Guten Tag allerseits,
ich brauche mal Tipps, welche Möglichkeiten ich bei folgender Situation habe:
seit heute Mittag plagt mich ein akutes Problem: Ich habe ein für mich unantastbares (zugekauftes) Verilog RTL eines IPs. Irgendein Held... Und anders kann ich das nicht ausdrücken... hat diesem Ding in der Toplevel Portliste einen Namen mit zwei Unterstrichen in Folge verpasst.
Beispiel:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
In einem VHDL Modul hat dieses Ding eine Component und wird instantiiert:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Das Ganze hat mittels Cadence Xcelium auch ganz super simuliert und getan:
Erst jetzt ist in einem anderen Flow aufgepoppt:
counter__out is not a valid identifier.
Da habe ich jetzt erstmal blöd geschaut. Und siehe da. VHDL Standard aufgemacht und die Bacchus-Naur Form angeschaut:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
Verdammt! Zwei Unterstriche sind nicht valide in einem Namen. Genausowenig wie ein Name, der auf einen Unterstrich aufhört (das fährt irgnedwo auch noch rum).
Das Problem ist, das ist bis heute Mittag nicht aufgefallen, weil Xcelium das einwandfrei kompiliert und simuliert, weil ja für die ganzen Tool-Hersteller der VHDL Standard nicht mehr als so eine grobe Richtlinie ist. Ich kotze.
Der andere Flow ist jetzt aber Standardkonform und weigert sich (offenbar zurecht).
Welche Möglichkeiten habe ich, das zu lösen?
-
Dem Lieferanten des IPs am Montag ne Mail schreiben, dass sie ihr Toplevel bitte anpassen. Wird im Zweifelsfall teuer, da alles bereits abgewickelt und nacharbeiten sind ja immer vergoldet. Und in Code, der mir nicht gehört kann ich lizenzbedingt nicht drin rumfummeln.
-
Einen eigenen Verilog-Wrapper drumherumstricken, der die Ports sinnvoll umbenennt. Da habe ich aber Probleme, dass dann im Instanzpfad eine Hierarchieebene mehr drin ist, und das an allen Stellen (Verifikations-Probes, Verifikations-Forces, Synthese Constraints, Place&Route constraints) alles kaputtmachen würde.
-
Kann VHDL vielleicht irgndwie wie Verilog diesen unangenehmen Weg, dass man Ports nicht per Namen, sondern nach Position in der Portliste mappt oder sowas? Sodass man den Namen nicht schreiben muss? (Verzweiflungstat)
Mein aktueller Ansatz: Das Modul, wo die Instanz drin ist ebenfalls in Verilog nachzubauen und abschließend mittels Formality die formale Äquivalenz zum originalen VHDL nachweisen. Das würde mich aber mindestens 2 eher 3 Tage kosten. Und bevor ich das jetzt anfange, lieber mal hören, was andere sagen.
Das Ticket, ob man diese "Standard compliance" in meinem anderen Flow abdrehen kann ist bereits bei Toolhersteller in Klärung... Sieht aber schlecht aus.
Gesegneten unterstrich-freien Sonntag euch allen.