Hallo Leute, ich habe mal eine Frage: Wieso darf "case" nicht in einem Prozess verwendet werden? Wieso muss man da denn if abfragen verwenden?
Hier ist ein Beispiel aus meinem Buch: ENTITY if_und_case IS PORT (i: IN INTEGER RANGE 0 TO 9; a,b,c: IN std_ulogic_vector (7 DOWNTO 0); z: OUT std_ulogic_vector (7 DOWNTO 0)); END if_und_case; ------------------------------------------------------------------------ ------ ARCHITECTURE case_variante OF if_und_case IS BEGIN p1: PROCESS (i,a,b,c) BEGIN -- alle Zweige sind gleichwertig CASE i IS WHEN 3 => z <= a; WHEN 0 TO 2 => z <= b; WHEN OTHERS => z <= c; END CASE; END PROCESS p1; END case_variante;
noname wrote: ------------------------------------------------------------------------ ------ > ARCHITECTURE case_variante OF if_und_case IS > > BEGIN > > p1: PROCESS (i,a,b,c) > BEGIN > -- alle Zweige sind gleichwertig > CASE i IS > WHEN 3 => z <= a; > WHEN 0 TO 2 => z <= b; > WHEN OTHERS => z <= c; > END CASE; > END PROCESS p1; > > END case_variante; genau das wurde mir bei der Klausur angestrichen. Man hat mir dann gesagt, dass case nur außerhalb eines Prozesses verwendet werden darf. Deshalb verstehe ich das nicht.
Das ist absoluter Schwachsinn. Ein Case darf natürlich in einem Prozess stehen (und wirkt praktisch wie ein IF, nur ohne Priorisierung) Ich glaube das solltest du deinem Professor mal anstreichen ;)
Wie war denn die Aufgabenstellung? Und was genau hast du dann als Antwort gegeben? Vielleicht ergibt sich ja etwas aus dem Zusammenhang was so nicht geht.
adpat wrote: > Wie war denn die Aufgabenstellung? Und was genau hast du dann als > Antwort gegeben? Vielleicht ergibt sich ja etwas aus dem Zusammenhang > was so nicht geht. In welchem Zusammenhang kann ich denn case nicht verwenden, wo ich if verwenden kann? Wie genau die Aufgabenstellung war, kann ich nicht mehr genau sagen. Ich hab aber ein Prozess gebaut. Und in diesem Prozess habe ich dann ein Signal Array verglichen. So in etwa:
1 | CASE n IS |
2 | WHEN '000' => o <= '1'; |
3 | WHEN '010' => o <= '1'; |
4 | . |
5 | . |
6 | WHEN OTHERS => o <= '0'; |
7 | END CASE; |
angestrichen wurde das case. Der Assistent hat mir dann gesagt (wortwörtlich): "case wird nicht innerhalb von Prozessen verwendet. Ich habe extra in die Spezifikation reingeschaut. Und außerdem haben wir case in den Vorlesungen garnicht eingeführt" Rückfrage von mir: Wo wird denn case sonnst verwendet Er: Außerhalb von Prozessen Deshalb wollte ich mal nachfragen, ob das wirklich so stimmt, was er erzählt hat. Denn ich habe nichts derartiges finden können.
Mathias Braun wrote: > "case wird nicht innerhalb von Prozessen verwendet. Ich habe extra in > die Spezifikation reingeschaut. Und außerdem haben wir case in den > Vorlesungen garnicht eingeführt" kopf -> wand -- stefan
Versuch mal ein case außerhalb eines Prozesses zu synthetisieren, da wird der Compiler aber schön meckern. Geht meiner Meinung nach nur innerhalb eines Prozesses, vielleicht hat der Assistent da was verwechselt...? Fälle wo man nur if statt case verwenden kann, naja, es kommt halt drauf an was man haben will. Beim case entsteht schematisch gesehen ein Riesenmultiplexer, bei if-else-if-else hintereinandergehangene Muxer mit Priorisierung. If-else ist daher eher sinnvoll wenn man nicht über die ganze Bitbreite abfragt oder andere Abbruchbedingungen hat oder noch etwas anderes ab und zu mit der Abfrage verknüpfen will oder eben bestimmte Priorisierungen erreichen möchte usw. . Das könnte in der Aufgabenstellung eventuell der Fall gewesen sein, wobei die Behauptung dass ein case nicht in einem prozess stehen darf dabei trotzdem falsch ist. Wenn die Aufgabe wirklich nur den Vergleich gefordert hat, wie du es kurz beschrieben hast, ohne irgendeine Bevorzugung eines Wertes, dann ist dein case korrekt. Wenn dabei nur ein Bit zu setzen ist könnte man möglicherweise bei günstigen Zahlenkonstellationen über nur ein ein if-else das ganze abfragen (z.B. if (n(2) = 1) then o <= '0'; else o <= '1'; end if; ) oder noch ein klein wenig verschachtelter und damit gegenüber dem case etwas sparen.
Mit welchem Programm kann ich denn ganz einfach den VHDL Code Syntetisieren? Sorry, aber VHDL war bei mir bisher nur reine Stift-Papier geschichte.
@ Mathias Braun >Mit welchem Programm kann ich denn ganz einfach den VHDL Code >Syntetisieren? Mit den Softwarepaketen der jeweiligen Hersteller der programmierbaren Bausteine. Also Xilinx, Altera, Lattice & Co. MfG Falk
also case geht definitiv NUR in process. Außerhalb nennt sich das analoge konstrukt "with .... select".
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.