Hallo zusammen,
ich arbeite seit einiger Zeit recht intensiv mit VHDL.
Dabei ertappe ich mich immer wieder, dass ich kleine Ungenauigkeiten
beschreibe, die dann am Ende meine Simulation zerhauen und ich erst
aufwendig suchen muss, wo das Problem liegt. Dann baue ich einfach eine
quick and dirty Lösung ein und bin zufrieden... das möchte ich nun
ändern.
Gerade hatte ich wieder so einen Fall:
Ich habe einen ungetakteten Prozess und wenn enable auf 1 geht, soll der
output fest auf "111" liegen. Sonst soll er sich anhand der addr
verhalten.
Ich habe eine Defaultzuweisung - also in meinen Augen sollten beide
Prozesse identisch sein. Dennoch funktioniert nur der erste und ich habe
keine Ahnung wieso :(
1
-- so funktioniert es!
2
PROCESS(enable,addr)
3
BEGIN
4
output<=(OTHERS=>'0');
5
IFenable='1'THEN
6
output<="111";
7
ELSE
8
IFaddr="00"THEN
9
output<="001";
10
ENDIF;
11
IFaddr="010"THEN
12
output<="001";
13
ENDIF;
14
IFaddr="10"THEN
15
output<="001";
16
ENDIF;
17
ENDIF;
18
ENDPROECESS;
1
-- so funktioniert es nicht
2
PROCESS(enable,addr)
3
BEGIN
4
output<=(OTHERS=>'0');
5
IFenable='1'THEN
6
output<="111";
7
ENDIF;
8
IFaddr="00"THEN
9
output<="001";
10
ENDIF;
11
IFaddr="010"THEN
12
output<="001";
13
ENDIF;
14
IFaddr="10"THEN
15
output<="001";
16
ENDIF;
17
ENDPROECESS;
Es könnte daran liegen, dass ich nicht viel Ahnung von Synthese habe.
Ich habe also selten eine Vorstellung, was ich genau beschreibe und was
mir die Synthese dann ausspuckt.
Das Thema mit der Defaultzuweisung musste ich auch erst lernen, dass
ohne die ein Latch entsteht.
Kann jemand einen guten Lehrgang/Kurs empfehlen, wo man solche
Grundlagen beigebracht bekommt?
So dass ich mir irgendwann selber erdenken kann: Wo liegt also der
Unterschied in der Hardware zwischen den beiden obigen Prozessen.
Wie würden sich beide unterscheiden, wenn ich bei den IF--THEN bleibe,
oder alles in eine case-Abfrage stecke?
hat jemand einen Tip für mich, wohin ich mich wenden könnte?
Ich weiß, dass derartige Kurse nicht billig sind, aber ich denke das
bekomme ich schon geregelt :)
Vielen Dank!
Rico
Der if-enable Zweig muss am Ende stehen, damit die Prozesse äquivalent
sind. Das hat nichts mit der Synthese zu tun, sondern mit dem
VHDL-Standard.
Ich denke ein Buch tut es auch...
das liegt nicht am default, sondern daran das die letzte aktive
zuweisung ausgeführt wird. da das else fehlt wird output entsprechend
adr gesetzt, egal wo ena steht.
MfG
Ich würde dir auch ein Buch empfehlen. Da lernst du dann auch was VHDL
wirklich ist und wie man eine HDL benutzt. Ich denke in einem kurs kommt
zwar viel drann aber das vergisst du dann auch schnell wieder.
Meiner Ansicht nach denkst du noch ein wenig zu viel im
C-Programmierstil und nicht wie ein Schaltungsentwickler.
lg
Hallo und vielen Dank!
Mhm... ich muss scheinbar noch viel lernen.
Ich hatte mal folgenden Fall:
1
PROCESS(s_signal,INPUT1,INPUT2)
2
BEGIN
3
s_signal<=v_variable+s_signal;
4
v_variable:=INPUT1+INPUT2;-- oder irgendwie so
5
ENDPROCESS;
Hier hatte es nur so funktioniert, weil die Belegung der Variablen im
Prozess weiter oben als deren Verwendung stehen muss. Daran hatte ich
mich bis jetzt irgendwie orientiert... scheint aber wieder nicht überall
zu gelten :)
1
PROCESS(s_signal,INPUT1,INPUT2)
2
BEGIN
3
v_variable:=INPUT1+INPUT2;-- oder irgendwie so
4
s_signal<=v_variable+s_signal;
5
ENDPROCESS;
Naja... habe ich wohl nicht zu Ende gedacht.
Sonst würden die Defaultzuweisungen auch nicht am Anfang, sondern am
Ende stehen... eigentlich logisch :)
Aber gibt es Lehrgänge, die mich noch etwas tiefer in diese Thematiken
einsteigen lassen?
Wann entsteht ein Latch?
Wie werden IF und CASE unterschiedlich interpretiert und in Hardware
umgesetzt?
Danke!
Rico
Leonard Lebewohl schrieb:> da passen die vectorlängen nicht
Das war nur schnell runtergeschrieben, um das Problem auszuzeigen... da
ist mir ein Fehler unterlaufen... sry!
blablub schrieb:> Meiner Ansicht nach denkst du noch ein wenig zu viel im> C-Programmierstil und nicht wie ein Schaltungsentwickler.
Ich kann nicht programmieren, kann daher auch nicht wie ein
Programmierer denken.
Ich glaube eher, ich denke zu sehr "parallel" und stolpere dann immer
wieder darüber, dass die Reihenfolge im Prozess dann doch irgendwo
entscheidend ist.
>Hier hatte es nur so funktioniert, weil die Belegung der Variablen im>Prozess weiter oben als deren Verwendung stehen muss. Daran hatte ich>mich bis jetzt irgendwie orientiert... scheint aber wieder nicht überall>zu gelten :)
Doch das stimmt schon! Wie kommst du darauf dass das nicht allgemein
gilt?
Siehe:
>Variablenzuweisungen im Process werden sofort ausgeführt. >Signalzuweisungen nur
geplant
>⇒ im Process sollten grundsätzlich zuerst die Variablenzuweisungen und >dann die
Signalzuweisungen gemacht werden! Variablen sind nicht nach >außen sichtbar oder
weiterverwertbar.
D.h. Eine Variable kann im Prozess je nach Ablauf öfters den Wert
wechseln. Ein Signal wird grundsätzlich nur am ende des Prozesses
gesetzt und zwar auf den Wert der ihm als letztes zugewiesen wurde.
lg
Du beschreibst aber dein vhdl problem wie ein Softwerker, nicht wie ein
Hardware Entwickler. Ein Schaltungsentwickler überlegt was er an
hardwareblöcken braucht (decoder, FSM, Muxer, encoder, counter, buffer,
...) und verwendet genau das VHDL-Konstrukt das in synthesise style
guide http://www.cis.upenn.edu/~milom/cse372-Spring06/xilinx/sim.pdf
oder http://www.xilinx.com/itp/xilinx10/books/docs/xst/xst.pdf ) dafür
vorgesehen ist.
Es gibt kein default in Hardware, sondern reset, FF-initial values oder
Minterme. ebenso gibt es keine Zuweisung in hardware sondern ein
register-load,
Zuweisung und default ist programmierjargon der verwirrt hier mehr als
er nutzt.
Leonard Lebewohl schrieb:> Du beschreibst aber dein vhdl problem wie ein Softwerker, nicht> wie ein> Hardware Entwickler. Ein Schaltungsentwickler überlegt was er an> hardwareblöcken braucht (decoder, FSM, Muxer, encoder, counter, buffer,> ...) und verwendet genau das VHDL-Konstrukt das in synthesise style> guide http://www.cis.upenn.edu/~milom/cse372-Spring06/xi...> oder http://www.xilinx.com/itp/xilinx10/books/docs/xst/xst.pdf ) dafür> vorgesehen ist.>> Es gibt kein default in Hardware, sondern reset, FF-initial values oder> Minterme. ebenso gibt es keine Zuweisung in hardware sondern ein> register-load,>> Zuweisung und default ist programmierjargon der verwirrt hier mehr als> er nutzt.
Sorry, aber so ein Käse...
Man kann sehr wohl in Hardware denken und dabei Code schreiben, der
keine Textform eines Schematics ist.
VHDL ist aber halt eine "Hardwarebeschreibungs-Sprache"...
Das sollte man sich immer ganz klar bewusst machen und im Hinterkopf
behalten damit man in etwa weiß was bei der Synthese an Hardware
generiert wird. Von dem her halte ich das keinen Käse. Wenn man das
nicht macht kommt auch nix gescheites raus.
Aber davon gibt es wohl unterschiedliche Auffassungen...
Philip K. schrieb:> Leonard Lebewohl schrieb:>> Du beschreibst aber dein vhdl problem wie ein Softwerker, nicht>> wie ein>> Hardware Entwickler. Ein Schaltungsentwickler überlegt was er an>> hardwareblöcken braucht (decoder, FSM, Muxer, encoder, counter, buffer,>> ...) und verwendet genau das VHDL-Konstrukt das in synthesise style>> guide http://www.cis.upenn.edu/~milom/cse372-Spring06/xi...>> oder http://www.xilinx.com/itp/xilinx10/books/docs/xst/xst.pdf ) dafür>> vorgesehen ist.>>>> Es gibt kein default in Hardware, sondern reset, FF-initial values oder>> Minterme. ebenso gibt es keine Zuweisung in hardware sondern ein>> register-load,>>>> Zuweisung und default ist programmierjargon der verwirrt hier mehr als>> er nutzt.>> Sorry, aber so ein Käse...> Man kann sehr wohl in Hardware denken und dabei Code schreiben, der> keine Textform eines Schematics ist.
Naja, wenn für Dich schematic die einzige Form ist Hardware zu
beschreiben, hast du dich offensichtlich noch nie ernsthaft mit
Digitaltechnik befaßt.
Da gibt es noch Wahrheitstablenne, state charts, LookUptable; Register
transfer, .... Und für jede diese Beschreibungsform bietet VHDL die
entsprechende Ausdrucksform: structural, behavioural, Case/select für
encoder/decoder; arrays of std_logic_vectors für LUT's. Ein/zwei/drei
process Notationen für state machines, ...
Dagegen irgendwas mit IF -then hinzuschreiben (weil man das so von C
kennt) und sich dann überraschen lassen, was die synthese daraus macht
ist das Gegenteil von Hochsprachenbasierten Digitalentwurf.
MfG
Fpga Kuechle schrieb:> Dagegen irgendwas mit IF -then hinzuschreiben (weil man das so von C> kennt) und sich dann überraschen lassen, was die synthese daraus macht> ist das Gegenteil von Hochsprachenbasierten Digitalentwurf.
Wobei der obige Code auch nicht richtig z.B. in C geschrieben
funktionieren würde.
Ohne alles gelesen zu haben: Dir fehlt einfach das Verständnis und die
Übung. Ich hab keinen richtigen VHDL-Kurs besucht, sondern nur so einen
Minikurs an der Uni, wo man sich das meiste selbst beibringen musste.
Der Fehler in deinem Code ist mir aber sofort aufgefallen.
Würde also empfehlen, dass du dir ein gutes Buch kaufst, im Internet
Tutorials anschaust und dann ein paar Sachen umsetzt, um Übung zu
bekommen.
VHDL-Schulungen sind meist relativ teuer. Ein Kommilitone (hatte das
selbe Praktikum an der Uni gemacht) hatte einen Anfängerkurs besucht und
ihm war eigentlich das meiste schon bekannt.
Folglich solltest du dir die Grundlagen selbst beibringen können. Musst
du eben ein bisschen Arbeit reinstecken!
Johannes O. schrieb:> VHDL-Schulungen sind meist relativ teuer.
Und zudem sind VHDL und FPGA bestenfalls zu 10% deckungsgleich (VHDL
kann viel mehr als ein FPGA kann, und FPGAs können viel mehr als man mit
VHDL beschreiben könnte oder möchte). In einer traditionellen VHDL
Schulung lernst du mit ein wenig Pech viel über Simulation, aber
ziemlich wenig über die Implementierung von Schaltungen in FPGAs...
Philip K. schrieb:> Fpga Kuechle schrieb:>> ...> Ich glaube Du hast mich falsch verstanden.
Ja gegenseitige Mißverständnisse sind üblich, ich meine mit
Code wie in Hardware gedacht wie in dem Lehrbuch "HDL chip design".
Schau mal in google, da hat's seitenweise Auszüge, in denen Autor zeigt
wie man Grundschaltungen (Encoder, FSM) synthesegerecht in VHDL/Verilog
schreibt
und welche Netzliste daraus generiert wird. Dann sollte klarer sein, was
mit Hardwarebeschreibung gemeint ist.
MfG,
Beherrscht man Digitaltechnik durch diverse Kurse an der Uni/Hochschule,
so kann man sich das Schreiben von synthesefähigem VHDL-Code mit einem
gutem Buch (Tipp VHDL-Synthese von Reichardt) innerhalb von zwei Wochen
(Null Vorkenntnisse) selbst beibringen..
Sind die Digitaltechnik-Kenntnisse jedoch nicht vorhanden, dann sollte
man dort ansetzen.
Möchte man das gesamte Spektrum an VHDL Sprackkonstrukten ausreizen
(bspw. für komplexe Testbenches), dann ist das Buch der Bücher das von
Ashenden. Ein super Nachschlagewerk: The Designer's Guide to VHDL.
Einen Grundkurs zu VHDL würde ich mir sparen, lieber nach dem Einlesen
ein wenig spezieller. Die grundlegenden Fehler, die in dem Codeschipsel
gemacht wurden passieren mit einem Buch nicht.
Tom schrieb:> Beherrscht man Digitaltechnik durch diverse Kurse an der Uni/Hochschule,> so kann man sich das Schreiben von synthesefähigem VHDL-Code mit einem> gutem Buch (Tipp VHDL-Synthese von Reichardt) innerhalb von zwei Wochen> (Null Vorkenntnisse) selbst beibringen..
Das dauert länger. Musst noch nicht verzagen.
Das Neue ist alle Leitungen haben Signale zu jedem Zeitpunkt.
Bei einer Software wird Zeile für Zeile abgearbeitet. Der Rest des Codes
ist tot in dem Moment. Im FPGA ist jeder Zeitpunkt zubetrachten. Lieber
ein Signal mit einem Default Wert belegen als ein undefinerter Zustand
im System. Hier sollten auch Reset Leitungen, in deinem Design
auftauchen.
Nur so als Gedankenstütze, wie du dein Code unter Kontrolle bekommst.
> Sind die Digitaltechnik-Kenntnisse jedoch nicht vorhanden, dann sollte> man dort ansetzen.>> Möchte man das gesamte Spektrum an VHDL Sprackkonstrukten ausreizen> (bspw. für komplexe Testbenches), dann ist das Buch der Bücher das von> Ashenden. Ein super Nachschlagewerk: The Designer's Guide to VHDL.
Das ist kein Werk zum Einstieg.
Besser für dich als Einsteiger Pong P.Chu "FPGA Prototyping by VHDL
examples".
Du musst auch lernen mit einem VHDL Simulator um zu gehen. Da geht
schneller ein Licht auf.
René D. schrieb:> Besser für dich als Einsteiger Pong P.Chu> "FPGA Prototyping by VHDL examples".
Da kann man geteilter Meinung sein...
Beitrag "Re: Suche VHDL Buch"> Du musst auch lernen mit einem VHDL Simulator um zu gehen.> Da geht schneller ein Licht auf.
Und vor allem: es tut gar nicht weh! Und zudem kann man endlich mal VHDL
Sprachkonstrukte verwenden, die man nie in ein FPGA rein bekommt... ;-)
Sieh dir das mal an: http://www.stefanvhdl.com/
René D. schrieb:> Besser für dich als Einsteiger Pong P.Chu "FPGA Prototyping by VHDL> examples".
Kann ich auch sehr empfehlen. Nach allerlei Versuchen bei VHDL
einzusteigen, die immer im Sande verlaufen sind, da das ganze sehr
abstrakt gehandhabt wurde, gingen mir beim Chu (da gibts auch noch ein
zweites etwas dickeres blaues Buch) doch einige Lichter auf. Ist meiner
Einschätzung nach ein sehr guter Didakt (anders als so manche deutsche
Professoren ....).
hubert schrieb:> Chu
[...]
> Einschätzung nach ein sehr guter Didakt
Ja, didaktisch nicht ganz schlecht, aber der Beispielcode ist nicht sehr
profesionell. Leider.
Duke
Hallo zusammen,
ich habe mir VHDL auch komplett selber beigebracht bzw. bin noch dabei.
Hatte Digitaltechnik an der FH, aber mit anderem Schwerpunkt. Nun bin
ich über ein FPGA Projekt hier gelandet, wo es mehr Richtung ASICs geht.
Da ich also keine reale Hardware vor mir habe, muss ich zwangsweise
simulieren. Dabei habe ich meiner Meinung nach schon recht große und
komplexe Designs umgesetzt und simuliert, die auch gut funktioniert
haben.
Aber wie schon gesagt ertappe ich mich immer wieder dabei, diese kleinen
Ungenauigkeiten einzubauen, weil ich einfach nicht weiß, was am Ende
nach der Synthese daraus "gebaut" wird.
Auch habe ich bisher (selten) schon mit Vairablen gearbeitet, wo dann
das besagt Problem mit der korrekten Reihenfolge aufgetaucht ist.
Dass ein Signal immer am Ende eines Prozesses zugewiesen wird, war mir
so in aller Deutlichkeit noch nicht bewusst. Die Frage hat sich bisher
nicht gestellt - es hat funktioniert. Wenn ich auf solche Probleme stoße
sicher auch mit viiiel Glück bzw. hat die Simulation dann geholfen.
blablub schrieb:> VHDL ist aber halt eine "Hardwarebeschreibungs-Sprache"...> Das sollte man sich immer ganz klar bewusst machen und im Hinterkopf> behalten damit man in etwa weiß was bei der Synthese an Hardware> generiert wird.
Und genau das weiß ich eben nicht. Deswegen suche ich etwas Nachhilfe
auf diesem Gebiet.
Fpga Kuechle schrieb:> Dagegen irgendwas mit IF -then hinzuschreiben (weil man das so von C> kennt) und sich dann überraschen lassen, was die synthese daraus macht> ist das Gegenteil von Hochsprachenbasierten Digitalentwurf.
Das IF-Konstrukt ist meiner Meinung nach eine ganz alltägliche Sache im
VHDL und Hardwareentwurf. Wieso sollte man darauf verzichten bzw. was
genau sin die Alternativen, außer case?
Lothar Miller schrieb:> In einer traditionellen VHDL> Schulung lernst du mit ein wenig Pech viel über Simulation, aber> ziemlich wenig über die Implementierung von Schaltungen in FPGAs...
Das ist mit bewusst. In einer VHDL Testbench kann man die tollsten
Sachen machen, die nie in Hardware funktionieren würden (z.B. after XY
ns, Defaultzuweisungen etc.). Mir geht es aber in erster Linie um die
Hardware. Die Testbenches dazu bekomme ich dann schon irgendwie drum
herum gebaut... dort hat man ja viele Freiheiten, muss nicht auf
Ressourcen achten etc.
Auch wenn mein Schwerpunkt auf ASICs liegt, muss es dennoch in einem
FPGA synthetisierbar sein. Auch ein ASIC kann nicht zaubern und hat die
gleichen logischen Grundelemente wie ein FPGA.
Tom schrieb:> Tipp VHDL-Synthese von Reichardt
Das Buch kenne ich, damit komme ich aber gar nicht zurecht.
Es werden ein paar Grundlagen beschrieben, wobei aber viele wertvolle
Informationen ausgelassen werden.
Irgendwann kommen dann FIR Filter und sowas... das sind dann schon
wieder spezielle Anwendungen, die unter Umständen nicht gebraucht
werden.
Ich werde mir wohl mal die andere Buchvorschläge hier anschauen.
René D. schrieb:> Du musst auch lernen mit einem VHDL Simulator um zu gehen. Da geht> schneller ein Licht auf.
Das habe ich bereits ausführlich gemacht. Ohne Simulation kann ich meine
Designs nicht testen.
Vielen Dank an Alle!
Rico
Das Buch von Ashenden auch empfehlen!
If - Then ist auch in VHDL durchaus zulässig und sinnvoll, sonst gäb es
das ja nicht! Was eventuell Sinnvoll sein kann ist sich ein so erzeugtes
entity auch mal in der grafischen Anzeige darstellen zu lassen. Wenn ich
mich richtig erinnere wurde da dann auch gezeigt wie sowas in Flip-Flops
und AND/OR Gattern etc. aufgebaut wird.
Meine letzte Erfahrung mit FPGAs liegt leider schon etwas länger zurück
deshalb kann ich dir da bei den aktuellen Tools nix genaues sagen. Ich
lebe jetzt eher in der analogen Welt des Chipdesigns ;)
Japp genau das meinte ich, ist halt nur schon ein paar Jahre her ;) Das
bringt auf jeden Fall viel mehr als ein Kurs. Das was man in einem 3
Tages Kurs hingeballert bekommt hat man nach spätestens 3 Tagen auch
wieder vergessen.(Oder man muss seine Notizen nachlesen aber das steht
dann zu 99% auch im Ashenden)
Kleine Korrektur:
Das Buch von Ashenden würde ich auch empfehlen! :D
Rico schrieb:> Fpga Kuechle schrieb:>> Dagegen irgendwas mit IF -then hinzuschreiben (weil man das so von C>> kennt) und sich dann überraschen lassen, was die synthese daraus macht>> ist das Gegenteil von Hochsprachenbasierten Digitalentwurf.>> Das IF-Konstrukt ist meiner Meinung nach eine ganz alltägliche Sache im> VHDL und Hardwareentwurf. Wieso sollte man darauf verzichten bzw. was> genau sin die Alternativen, außer case?
Nun ja , eigentlich ging es mir weniger um das IF -construct als um die
Vorgehensweise ein gewünschtes Verhalten irgendwie in VHDL zu coden und
dann zu hoffen das das Synthesetool schon erkennt was gemeint ist und
die passende Hardware aus dem Hut zaubert. Diesen Gedanken
weitergedacht, heißt das schon die Anfangsfrage "Was macht die Synthese
aus meinem Code?" keine optimale Vorgehensweise ist. Besser: "was muß
ich schreiben, das das Synthese-tool einen Muxer/Encoder/RAM/... in die
Netzliste aufnimmt?". Also erst Digitaltechnik lernen und dann Synthese.
BTW: Das IF-Construct ist in VHDL nur eine mögliche Beschreibungsform,
VHDL kennt noch die bedingte Signalzuweisung und select (concurent also
außerhalb process) sowie IF und case (nur im process) . Anbei eine Seite
aus dem Buch "HDL-Chip Design" die am Beispiel eines Muxers zeigt, das
das IF-construct hier die schlechtere Wahl ist. (erfodert sensitiovy
list, langegezogene Beschreibung)
MfG,
Fpga Kuechle schrieb:> Anbei eine Seite aus dem Buch "HDL-Chip Design"
Das gefällt mir. Ist der Rest des Buches auch so gut?
Ich suche gerade noch ein Weihnachtsgeschenk für mich... ;-)
> die am Beispiel eines Muxers zeigt, das das IF-construct hier die> schlechtere Wahl ist. (erfodert sensitiovy list, langegezogene> Beschreibung)
Das Problem liegt hier nicht am if an sich, sondern daran, dass
Softwareentwickler VHDL machen, und die sind es gewohnt, alles was
zusammengehört auf Gedeih und Verderb in eine "Funktion" zu packen. Und
das was der Uniformität einer Funktion in VHDL am Nächsten kommt, ist
die Procedure. Und dann wird dort alles reingehämmert.
Manche dann meinen auch noch, mit der Sensitivliste irgendwas steuern zu
können...
Lothar Miller schrieb:> Fpga Kuechle schrieb:>> Anbei eine Seite aus dem Buch "HDL-Chip Design"> Das gefällt mir. Ist der Rest des Buches auch so gut?> Ich suche gerade noch ein Weihnachtsgeschenk für mich... ;-)
Als Einstieg super-buch, behandelt auch simulation/test praxisgerecht.
Leider seit über 10 Jahren keine Neuauflage und deshalb kaum
FPGA-Bezüge.
Für mich mit abstand das beste hdl-buch, als Student taten die 197
Deutsche Mark zwar weh waren aber als Berufsbasis perfekt angelegt.
MfG,