Forum: FPGA, VHDL & Co. VIVADO2014.4 VHDL 2008


von Marco G. (grmg2010)


Lesenswert?

Moin,

wie kann ich am einfachsten den VHDL-Support in VIVADO2014.4 aktivieren? 
Die Hilfeseite von XILINX dazu habe ich bereits gefunden, weiß aber 
nicht genau wie ich diese umsetzen soll.

Konkret geht es um das folgende Konstruckt, was es wohl erst ab 2008 
gab:

          with zaehler_segment select Output <=

                "00000011" when "0000",     -- Ziffer '0'
                "10011111" when "0001",     -- Ziffer '1'
                "00100101" when "0010",     -- Ziffer '2'
                "00001101" when "0011",     -- Ziffer '3'
                "10011001" when "0100",     -- Ziffer '4'
                "01001001" when "0101",     -- Ziffer '5'
                "01000000" when "0110",     -- Ziffer '6'
                "00011111" when "0111",     -- Ziffer '7'
                "00000001" when "1000",     -- Ziffer '8'
                "00001001" when "1001";     -- Ziffer '9'

von Rudi (Gast)


Lesenswert?

Den with Befehl habe ich schon 2006 verwendet, da kann was nicht 
stimmen.

von Tobias L. (murxwitz)


Lesenswert?

bis auf ein evtl. fehlendes "when others" für die nicht angegebenen 
Fälle sehe ich da aber auch keinen Fehler.
Habe das "with select" auch schon selbst in der ISE verwendet.

Schreib uns doch mal die Fehlermeldung die du bekommst und evtl etwas 
mehr Quellcode drumherum.

von Fpgakuechle K. (Gast)


Lesenswert?

Marco G. schrieb:

> Konkret geht es um das folgende Konstruckt, was es wohl erst ab 2008
> gab:
>
>           with zaehler_segment select Output <=
>
>                 "00000011" when "0000",     -- Ziffer '0'
>                 "10011111" when "0001",     -- Ziffer '1'
>                 "00100101" when "0010",     -- Ziffer '2'
>                 "00001101" when "0011",     -- Ziffer '3'
>                 "10011001" when "0100",     -- Ziffer '4'
>                 "01001001" when "0101",     -- Ziffer '5'
>                 "01000000" when "0110",     -- Ziffer '6'
>                 "00011111" when "0111",     -- Ziffer '7'
>                 "00000001" when "1000",     -- Ziffer '8'
>                 "00001001" when "1001";     -- Ziffer '9'

Besteht dein Problem mglw. darin das du with-select (nebenläufig) in 
einem process verwendest? VHDL ist da sehr pingelig. Innerhalb eines 
process muss du  case-is verwenden, jedenfalls vor VHDL 2008.

Kapitel 5.4. und 5.6.  in 
https://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.050/vorlesungen/sose08/LaborpraktikumEingebetteteSysteme/Material/Crashkurs_VHDL.pdf

Ab 2008 ist with select auch im process gestattet:
Siehe Abschnitt "Conditional and selected sequential statements" in 
https://www.doulos.com/knowhow/vhdl_designers_guide/vhdl_2008/vhdl_200x_ease/ 
.

Persönlich würde ich den Code auf case umschreiben, damit bleibt er 
kompatibel.

MfG

von Marco G. (grmg2010)


Lesenswert?

Stimmt,ich verwende das in einem Process. In der FH hatten wir dies auch 
gemacht und es hat ohne Probleme funktioniert. Allerdings arbeiten wir 
dort auch mit Quartus 2014, scheinbar wird dort die Version 2008 schon 
unterstützt.

Ich habe es jetzt in eine case-Strucktur umgewandelt und es funktioniert 
wie gewünscht. Danke für die Antworten auf meine Frage:)

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


Lesenswert?

Marco G. schrieb:
> Stimmt,ich verwende das in einem Process.
Dann nimm es doch einfach dort raus und lass das nebenher ablaufen. So 
wie es in der Hardware ja auch umgesetzt wird...

von berndl (Gast)


Lesenswert?

Lothar Miller schrieb:
> Dann nimm es doch einfach dort raus und lass das nebenher ablaufen. So
> wie es in der Hardware ja auch umgesetzt wird...

stimmt, warum im 'process' laenglich hinschreiben, wenn es doch so 
schoene 'concurrent' statements gibt. Bei den 'concurrent' Anweisungen 
erkennt man uebrigens auch ziemlich gut, wie komplex das ganze jetzt 
ist. Ein 'process' kann das ganz uebel verstecken/verschleiern. Und dann 
kommt noch die Kroenung: Kombinatorik im 'process' und dann noch 
Variablen verwenden. Wenn du da mal fremden Code verstehen musst, dann 
geht das 'am Kopf gekratze' echt richtig los...

Also, ich stimme dir uneingeschraenkt zu. Keep it simple!

von Fpgakuechle K. (Gast)


Lesenswert?

berndl schrieb:
> Lothar Miller schrieb:
>> Dann nimm es doch einfach dort raus und lass das nebenher ablaufen. So
>> wie es in der Hardware ja auch umgesetzt wird...
>
> stimmt, warum im 'process' laenglich hinschreiben, wenn es doch so
> schoene 'concurrent' statements gibt. Bei den 'concurrent' Anweisungen
> erkennt man uebrigens auch ziemlich gut, wie komplex das ganze jetzt
> ist. Ein 'process' kann das ganz uebel verstecken/verschleiern. Und dann
> kommt noch die Kroenung: Kombinatorik im 'process' und dann noch
> Variablen verwenden. Wenn du da mal fremden Code verstehen musst, dann
> geht das 'am Kopf gekratze' echt richtig los...
>
> Also, ich stimme dir uneingeschraenkt zu. Keep it simple!

Man weiss ja nicht was für ein Process um das Konstrukt steht. Ist es 
ein kombinatorischer ist natürlich ausserhalb process die IMHO einzig 
sinnvolle Variante. Ist der proess dagegen "getaktet" wird durch das 
Auslagern das FF von output entfernt.

Aber auch dabei wäre auch meiner Meinung nach Select ausserhalb process 
die bessere Variante, muss man halt noch eine Zeile und signal für das 
FF in den process einfügen.

MfG,

PS: Auch meines Erachtens ist das eine nicht so gelungene Verbesserung 
in der 2008-Fassung.

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.