VHDL Grundlagen Rom

Gast #5156669
Wenn ich es richtig sehe, kann man in VHDL ein ROM auf folgende Art 
erzeugen:
1
type memory is array (0 to 15) of std_logic_vector (7 downto 0) ;
2
signal rom : memory := (
3
"00011101" , "10111111" , "01101000" , "11100000" ,
4
"00111110" , "01001111" , "00000000" , "00000000" ,
5
"11100000" , "10111110" , "00111110" , "01001111" ,
6
"00000000" , "00000000" , "10000000" , "00000000" ) ;

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?
Gast
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)
Gast
Danke für die Antworten.

Das hier geht bei mir:
1
  type rom_t is array (natural range <>) of unsigned(4 downto 0);

aber leider geht die Ermittlung der Länge nicht:
  constant ROMLENGTH:integer:= rom_t'length;
error: attribute length requires a constrained array prefix type
Gast
Der Code sieht jetzt so aus:
1
constant rom: rom_t:=(
2
      "10000000",
3
      "01000000",
4
      "00100000"
5
      );
6

7
constant ROMLENGTH: integer   := rom'length;
8
signal  address      : integer range 0 to ROMLENGTH := 0 ;

Aber ich kann das Ding nicht addressieren.

Wenn ich folgends versuche, darauf mit
1
leds <= rom(address);
zuzugreifen, gibt es den Fehler:
"indexed name is not a std_logic_vector"
Wie kann man die Adresse in das geforderte Format umwandeln?
Gast
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?
Gast
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.
Gast
>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?
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.