Was ich aber sehr unpraktisch finde: wenn man neue Daten hinzufügt, muss
man die Anzahl zählen und die Arraylaenge korrigieren. Geht das
irgendwie automatisch?
Oder eine andere Frage: kann man den Rest der Daten mit Default '0'
auffüllen?
Pat A. schrieb:> Ja, das geht mit einem "unconstrained array"
Das geht bei der Deklaration, geht das aber
auch bei der Initialisierung? Braucht es da
nicht konkrete Angaben?
Ich hab's gerade mal ausprobieren müssen:
Zu einem konkretes Objekt muss bei der Definition
die Bereichsgrenzen angegeben werden (sollte ja
jeden bekannt sein), dies kann aber auch implizit
durch ein Werte-Array erfolgen:
type arraytype is array(natural range <>) of integer;
constant data : arraytype := (0,1,2,3);
(getestet in ISIM)
aber leider geht die Ermittlung der Länge nicht:
constant ROMLENGTH:integer:= rom_t'length;
error: attribute length requires a constrained array prefix type
chris schrieb:> aber leider geht die Ermittlung der Länge nicht
Die gepostete Typdefinition hat ja auch noch gar keine Länge. Sie
bekommt sie erst mit der Zuweisung von Werten.
Siehe die vorletzte Zeile im Post vor deinem...
Ich habe an der falschen Stelle gesucht:
Die "leds" sind als std_logic_vector definiert, das macht die Probleme.
Da taucht bei mir dann die folgende Frage auf:
Üblicherweise wurden bei 8 angeschlossenen Leds der Typ
std_logic_vector ( 7 downto 0 )
verwendet.
Sollte man jetzt auch für so was wie die Leds statt dessen "unsigned"
für die Schnittstelle einer Komponente verwenden?
chris schrieb:> Sollte man jetzt auch für so was wie die Leds statt dessen "unsigned"> für die Schnittstelle einer Komponente verwenden?
Nö, für Pins ist std_logic_vector richtig, manche bestehen sogar auf
std_ulogic_vector.
Bei Pins braucht man auch schon mal tristate, das geht mit
signed/unsigned eher schlecht.
>Bei Pins braucht man auch schon mal tristate, das geht mit>signed/unsigned eher schlecht.
Mittlerweile finde ich aber Integer schöner, weil man direkt damit
rechnen kann.
Busverteiler könnte man ja trotzdem mit Integer machen, wenn es nur
einen Sender und mehrere Empfänger gibt. Spricht sonst noch was dagegen?
chris schrieb:> Busverteiler könnte man ja trotzdem mit Integer machen, wenn es nur> einen Sender und mehrere Empfänger gibt. Spricht sonst noch was dagegen?
Manche tools verwenden beim automatischen Erzeugen von Code nicht die
std.numeric die zum Rechnen eigentlich das Beste wäre, sondern
produzieren std.logic und das nicht nur bei Bussen. Dann hast du
Misch-Code, den manche Compiler nicht fressen.
Wir hatten vor einiger Zeit den Fall, das es in einen ASIc gehen sollte
und jede Entity noch einen wrapper brauchte, um von integer wieder auf
stdlogic zu übersetzen. Das Verrückte war, das intern einige schon den
umgekehrten Weg gegangen waren, um eine Rechenlogik die auf std logig
geschrieben war auf INt zu übersetzen, damit es einheitlich war.
Der Compiler hat es nicht gefressen. Also haben sie alles von INT auf
Logic umgestellt.
Man muss sich vorher im Projekt einmal überlegen, was man will und dann
konsequent alles in einer Strategie bauen.