Forum: FPGA, VHDL & Co. VHDL Generate


von Martin (Gast)


Lesenswert?

Hallo zusammen,
ich bin VHDL Anfänger daher die Frage.
Ich habe einen Array von 128 Bytes.

in C kann man mit einer for Schleife das Feld mit einem Byte füllen:
1
for(i=0; i<128; i++)
2
 Array[i] = data;
wie geht das in VHDL?
Geht das irgendwie hier auch mit generate? (Bei mir gibt es Fehler)
Oder muss ich doch alles selber schreiben
Array(0) <= data;
Array(1) <= data;
..
Array(127) <= data;?

Vielen Dank für die Hilfe

von Christian R. (supachris)


Lesenswert?

Eine for Schleife in VHDL wird parallel auf dem Chip realisiert, daher 
geht das nicht, denn einen RAM kann man nicht parallel auf alle 
Speicherstellen schreiben. Was du brauchst ist eine State-Machine, die 
im einfachsten Fall auch ein Adresszähler am RAM sein kann.

von Martin (Gast)


Lesenswert?

Aber
Array(0) <= "00000001";
Array(1) <= "00000010";
..

Array(127) <= "10000000";

wird schon gehen?

von Dussel (Gast)


Lesenswert?

Wird gehen, wird aber eine riesige Schaltung geben, die über ein 
normales RAM rausgeht, weil dann für jede Speicherzelle eine Schaltung 
aufgebaut wird, die den Startwert lädt.

von Fpgakuechle K. (Gast)


Lesenswert?

type t_byte is std_logic_vector(7 downto 0);
type t_byte_array is array(127 downto 0) of t_byte;


signal byte_array : t_byte_array := (others => data);

Kommt darauf wofür und wann man das array gefüllt haben möchte.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Ich habe einen Array von 128 Bytes.
Mit welcher Hardwarekomponente sol dieses Array realisiert werden? Mit 
einem RAM? Dann geht das so nicht, weil bei einem RAM über Adresse und 
Datenleitungen immer nur 1 Wort angesprochen werden kann.

von Georg A. (georga)


Lesenswert?

Nur am Rande: Es gibt natürlich auch normale for-Schleifen in VHDL, mit 
der man das Array wie in C füllen kann, das hat noch nichts mit 
for-generate zu tun. Diese Schleifen lassen sich natürlich auch in HW 
umsetzen, verhindern durch die Parallelität aller Zuweisungen aber, dass 
im FPGA ein echtes RAM benutzt wird *) Stattdessen wird für jedes Bit 
eine Logikzelle geopfert... Wenn der Code nur in der Testbench laufen 
muss, kann einem das aber völlig egal sein.

*) Da gibts ohnehin noch mehr DOs and DONTs dazu...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Georg A. schrieb:
> *) Da gibts ohnehin noch mehr DOs and DONTs dazu...
Oder andersrum: bestenfalls 5% von VHDL sind synthetisierbar...

Diese for-Schleife ist z.B. dann synthetisierbar, wenn mit ihr das RAM 
einmalig beim Reset initialisiert wird.

von S_Hennig (Gast)


Lesenswert?

Dumme Frage: Hat der TO überhaupt was von Synthese gesagt? Könnte sich 
ja auch um eine Testbench handeln, oder?

Und die machen ja eh' den größten Teil eines Designs aus, oder?

... nein, bei mir auch nicht.

Grüße,
 Stefan

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
Noch kein Account? Hier anmelden.