Hallo! Ich möchte mit einem Zähler die Adresse eines SRAMs erzeugen. mit ... if (risign_edge(clk) ) then address <= address + 1; data <= address (7 downto 0); end if; ... habe ich ja das Problem das der Prozess die erste Adresse auslässt da sich ja die Adresse schon beim eintreten der ersten Clockedge erhöht. Gibt es eine eine einfache möglichkeit das die Adresse erst beim nächsten Durchlauf erhöht wird? Ich habe schon überlegt mit -1 anzufangen; gefallt mir aber irgendwie nicht... Viele Grüße Manuel
Die Adresse address wird zwar erhöht, aber data bekommt noch die nicht erhöhte Adresse ! Das ist bei VHDL so.
Machs so (concurrent):
1 | process
|
2 | :
|
3 | if rising_edge(clk) then |
4 | address <= address+1; |
5 | end if; |
6 | end process; |
7 | :
|
8 | data <= address(7 downto 0); |
Oder so (durch die Brust ins Auge):
1 | process
|
2 | :
|
3 | if rising_edge(clk) then |
4 | address <= address+1; |
5 | data <= address(7 downto 0)+1; |
6 | end if; |
7 | end process; |
8 | :
|
Gast wrote:
> Das ist aber nicht dasselbe!
Was ist nicht das selbe wie was?
Also gut.
Manuel hat noch ein anderes Problem, darauf wir er später noch kommen.
Helfen wir ihm erst mal mit dem Zähler. richtig schön wäre es doch, wenn
da ein Zähler wäre, und aus dem die Adresse und die Daten erzeugt
würden:
1 | process
|
2 | :
|
3 | if rising_edge(clk) then |
4 | cnt <= cnt+1; |
5 | end if; |
6 | end process; |
7 | :
|
8 | address <= cnt; |
9 | data <= cnt(7 downto 0); |
Jetzt laufen die beiden synchron und auch bei 0 los.
Was soll diese Zeile eigentlich bewirken? data <= address (7 downto 0); Da wird den 8 Bit Vektor Data die unteren 8 Bit des Adressvektors zugewiesen. Also das ist kein Speicherzugriff. Der müsste irgendwie so ausssehen: data <= sram[address]; Ich denke damit ergibt sich dann das ganze rumgewurschtel.
> Was soll diese Zeile eigentlich bewirken? >>>> Ich möchte mit einem Zähler die Adresse eines SRAMs erzeugen. Offenbar will er an die Adresse 0 das Datum 0 schreiben, an die Adresse 1 den Wert 1 uswusf. Nach der originalen Lösung waren die Daten und die Adressen um 1 versetzt. > data <= sram[address]; angenommen, sram wäre ein std_logic_vector Array
1 | data <= sram(to_integer(unsigned(address))); |
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.