Markus G. schrieb:
> Kann mir jemand sagen, wo mein Problem liegt?
Du "programmierst" das FPGA, so wie du einen Mikrocontroller
programmierst. Stimmts?
> Kann mir jemand sagen, wo mein Problem liegt?
Stell dir mal vor, das wäre tatsächlich ein RAM mit einem Satz
Adressleitungen und einem Satz Datenleitungen. Dann könntest du also
immer 1 Adresse anlegen und 1 Datenwort schreiben. Deine Zuweisungen
würden aber "gleichzeitig" stattfinden und ergäben so natürlich einen
Buskonflikt.
Aber da sind noch ganz, ganz arg grundlegende Probleme in deiner
Beschreibung. Wenn ich mir die so ansehe, dann könnte das bestenfalls
noch ein Simulator "verdauen" und irgendwas Krudes vor sich
hinsimulieren. Aber der Synthesizer wird sich an diesem Codebrocken herb
"verschlucken" und niemals eine Hardware draus machen, die das tut, was
der Simulator simuliert hat oder gar das, was du dir wünscht:
1 | process(Clk) -- der Prozess soll offenbar getaktet sein...
|
2 | begin -- warum taucht dann nachfolgend
|
3 | -- weder ein rising/falling_edge() noch ein 'event auf?
|
4 | -- Defaultwert am Anfang des Prozesses zuweisen
|
5 | outputsignal <= (others=>'Z');
|
6 |
|
7 | if(en_read = '1') then
|
8 | -- letzte Zuweisung an ein Signal "gewinnt" --> Defaultwert überschreiben
|
9 | outputsignal <= ram(to_integer(unsigned(addr2)));
|
10 | elsif(en_write = '1') then
|
11 | input_1 <= input(17 downto 0);
|
12 | input_2 <= input(35 downto 18);
|
13 | -- diese beiden Zuweisungen auf das RAM werden
|
14 | -- nicht "nacheinander" in Hardware implementiert!
|
15 | ram(to_integer(unsigned(addr1))) <= input_1;
|
16 | ram(to_integer(unsigned(addr1))+1) <= input_2;
|
17 |
|
18 | -- besser <= (others=>'Z'); denn das passt automatisch
|
19 | -- outputsignal <= "ZZZZZZZZZZZZZZZZZZ";
|
20 | -- else
|
21 | -- und noch besser wäre es, den Defaultwert vor die if-Abfrage zu setzen
|
22 | -- outputsignal <= "ZZZZZZZZZZZZZZZZZZ";
|
23 | end if;
|
24 | end process;
|
Sieh dir dringend im Handbuch/Userguide deines Synthesizers an wie ein
getakteter Prozess beschrieben werden muss und auch wie ein RAM codiert
werden muss, dass der Synthesizer letztlich ein RAM macht.
Nick M. schrieb:
> Ich bezweifle, dass man auf 2 Adressen gleichzeitig schreiben kann.
Man "kann" das schon, wenn man weiß was man macht und wie man es macht.
Dann bekommt man aber kein RAM, sondern einen Satz Register und einen
Riesenmonstermultipexer.