Hallo, ich beschäftige mich zur Zeit mit den attributes von VHDL und würde gerne wissen, ob es möglich ist eigene Attribute mit Parameter zu definieren. Bei den pre-defined attributes gibt es ja einige, z.B. character'pos('A') ergibt 65. Ich hab schon versucht das Attribut ähnlich einer Funktion zu definieren: type arrayOfInt is array(natural range <>) of integer; constant myList: arrayOfInt(0 to 7) := (3, 1, 4, 1, 5, 9, 2, 7); attribute myAttribute(myParameter: integer): integer; attribute myAttribute of myList: constant is myList(myParameter); aber Vivado stört sich bereits an der Klammer. Kann mir jemand helfen? Vielen Dank!! PS: (Ich weiß, dass dieses Beispiel sinnlos ist. Ich möchte einfach nur wissen, ob es überhaupt möglich ist. Eine konkrete Anwendung habe ich nicht.)
--gast-- schrieb: > aber Vivado stört sich bereits an der Klammer. An welcher? Und mit welchem Wortlaut?
Der Syntax-Check des Parsers beschwert sich bereits beim Abspeichern bei der Zeile attribute myAttribute(myParameter: integer): integer; Fehler-Meldung: [HDL 9-806] Syntax error near "(".
Von Attributen mit Parametern habe ich noch nix gehört. Xilinx verwendet Attribute z.B. so:
1 | signal state,nextstate : StType; |
2 | |
3 | attribute fsm_encoding : string; |
4 | attribute fsm_encoding of state : signal is "gray"; |
5 | attribute fsm_encoding of nextstate : signal is "gray"; |
Oder so:
1 | signal adc_dco : std_ulogic; |
2 | |
3 | attribute keep : string; |
4 | attribute keep of adc_dco : signal is "true"; |
Duke
Die Parametrisierung von Attributen zielt ja auf das Überschreiben der Typen hinaus, also das was in C++ als Template bezeichnet wird. Das gibt's in VHDL nicht (auch Vergleichbares in Verilog nicht.). Dafür muss je Typ ein Attribute definiert werden. Ausserdem gehört ja das Attribute zu einem Objekt bzw. zu derem Objekt-Typ (beschreibt z.B. die Länge eines Vektors etc.) und damit müsste ja auch in diesem Objekt-Typ der entsprechende Teiltyp überschrieben werden usw. Also viel zu kompliziert...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.