Danke Michael Fischer (Datum: 20.05.2014 18:37)
----------------------------
D.h. das Signal RamAddr wird an mehreren Stellen beschrieben. So etwas
ist erlaubt wenn das in einem "process" gemacht wird, aber nicht wenn
es von mehreren Prozessen versucht wird.
------------------------------
Ich dachte wenn ich die in "architecture" reinsetze das sie überall
angesprochen werden können.
Danke.
Gruss
Hallo Lernresistenter!
(lies Bücher, lern zitieren, lern den Unterschied zwischen Programm und
Beschriebung...)
peter schrieb:> das sie überall> angesprochen werden können
Lesen ja, schreiben nein.
peter schrieb:> Ich dachte wenn ich die in "architecture" reinsetze das sie überall> angesprochen werden können.
Es geht ja nur beim Zuweisen schief. Genauer gesagt dann, wenn aus zwei
Prozessen das selbe Signal getrieben wird:
1
process(b)begin
2
ifb='1'then
3
c<='0';
4
else
5
c<='1';
6
endif;
7
endprocess;
8
9
process(a)begin
10
ifa='1'then
11
c<='0';
12
else
13
c<='1';
14
endif;
15
endprocess;
Wie denkst du denn, dass sowas in realer Hardware innerhalb eines
FPGAs aussehen sollte? Dass einfach die Ausgänge von ein paar Flipflops
oder LUTs zusammengeschaltet werden und dann der Stärkere gewinnt?
Nicht mal sowas geht, obwohl hier eigentlich kein Konflikt vorliegt:
1
process(a)begin
2
ifa='1'then
3
c<='1';
4
endif;
5
endprocess;
6
7
process(a)begin
8
ifa='0'then
9
c<='0';
10
endif;
11
endprocess;
Und warum?
Weil der Synthesizer hier mit seiner Mustererkennung zwei Latches
erzeugt und die dann nicht zusammenschalten kann...
Duke Scarring schrieb:> lern den Unterschied zwischen Programm und> Beschriebung...)>> peter schrieb:>> das sie überall>> angesprochen werden können> Lesen ja, schreiben nein.
(1)oben die Beachtung des Unterschieds zwischen Programm und
Beschreibung eingefordert und unten dann "Signal schreiben" (Software)
statt "Signal treiben" (Hardware) verwendet.
(2)Und es ist sehr wohl möglich ein Signal von mehreren processes aus
zuzuweisen.
Für diesen Fall kennt VHDL die resolution function (Auflösungsfunktion),
in der Bibliothek an dem Schlüsselwort resolved erkennbar.
Siehe bspw. dort:
http://www.ida.liu.se/~TDTS01/lectures/14/lect3.frm.pdf
Anders wäre es in VHDL nicht möglich open collector, wired or, PullUp
etc. zu simulieren. (was man aber immer wieder braucht bspw. für VME-BUS
IRQ-system oder I2C ACK)
Und genau diese Auflösungsfunktion ist der Unterschied zwischen
std_logic und std_ulogic (u steht für unresolved).
Siehe:
http://objectmix.com/vhdl/208460-what-difference-between-types-std_logic-std_ulogic.html
Also ein signal vom typ std_logic kann mehrere Quellen haben, std_ulogic
nicht (simulator bricht mit error ab).
Ein deutsches Buch das diese Simulatordetails beschreibt ist ISBN
3-540-59143-5 (auf S.110 ff.) Allerdings ein sehr "akademisches" Buch
mit überwiegenden Focus auf Simulation und damit IMHO für FPGA-Designer
nur bedingt hilfreich).
Das dergleichen aber von der Synthese verweigert wird, wenn es die
Zielhardware nicht zuläßt hat Lothar in seinem Post dargestellt.
Dort allerdings:
http://web02.gonzaga.edu/faculty/talarico/cpen430/documents/vhdl-for-synthesis.pdf
lässt man die Frage ob resolved signals zufriedend stellend
synthetisierbar sind offen und empfiehlt um Probleme von vornherein
auszuschliessen keine zwei Quellen ein Signal treiben zu lassen (S.13).
MfG,
Habe ich hier so einen Typischen Fall?
Wenn ich die Daten vom PC sende sw(2) kommt in den Ramzellen nur der
Wert "128".
Wenn ich aber mit Sw(0) dem ROM ins RAM schreibe, kann ich die Daten vom
RAM zum PC übertragen mit sw(1).
Gruss
peter schrieb:> Habe ich hier so einen Typischen Fall?> Wenn ich die Daten vom PC sende sw(2) kommt in den Ramzellen nur der> Wert "128".> Wenn ich aber mit Sw(0) dem ROM ins RAM schreibe, kann ich die Daten vom> RAM zum PC übertragen mit sw(1).
Was sagt die Simulation?
Duke
Jup, die Simulation stürzt vom QuartusII ab auf meinem Window8 gleich
nach dem starten. Habe jetzt schon veschiedene Quartusversionen geladen.
Danke.
Gruss
Wenn ich jetzt das ROM/RAM Füllen zusammenfasse in einer IF , dann
werden gemäß led_grün die Daten "rx_data" vom Pc richig angenommen.
Wenn ich aber mit SW(1) die Daten zum PC schicke aus dem RAM , steht da
nur "68" drin in allen Zellen.
GRuss
peter schrieb:> Hmm...habe ich hier ein Denkfehler im Ablauf?
Was ist noch mal das zugehörige Problem?
> RamAddr <= RamAddr +1;
Wie weit darf die denn laufen? Es ist dir schon klar, dass der Zähler in
der realen Hardware einfach wieder bei 0 anfängt? Wir hatten das doch
schon durchgekaut...
peter schrieb:> die Simulation stürzt vom QuartusII ab auf meinem Window8 gleich nach> dem starten.
Ändere das. du wirst ohne Simulator nicht weit kommen mit FPGAs. Schon
der kleinste Fehler wird dich (und uns) tagelang beschäftigen.
> ----------------------------> ...> ----------------------------
Nimm bitte die VHDL Tags zum Formatieren des Quelltextes.