Hallo! Ich versuche schon seit längerem diesen Multiplexer in VHDL umzusetzen. Da ich Anfänger bin, stehe ich da vor einem echten Problem. Ich möchte die beiden Ausgänge Y1 und Y2 jeweils mit unterschiedlichen Signalen ansteuern. S0 bis S2 sind dabei meine Steuereingänge für den Mux. Für die einzelnen Funktionen ergeben sich folgende Zusammenhänge: S0 (Switch0 or Switch1) S1 (Switch10 or Switch11) S2 (Switch15) Wie kann ich das in VHDL umsetzen? Ich bekomme das einfach nicht auf die Kette. Danke für das Feedback! Gruß
:
Bearbeitet durch User
with s select
y <= "00" when "000",
"01" when "001",
...
"11" when "111";
> Ich bekomme das einfach nicht auf die Kette.
Du bist nur faul!
Solche selbsterklärenden Dinge müssen beim Lesen klar sein. Wer da schon ein Problem hat, der sollte die Finger von Digitaltechnik lassen, denn der hat ein Denkproblem und kriegt es wohl auch nicht hin, seinen Hamburg-Besuch zu planen: Hagenbeck_Zoo <= summer and (not raining) and enough_money Hagenbeck_Aquarium <= ((not summer) or (summer and raining)) and enough_money Planten_un_Blomen <= (not raining) and (not enough_money) Europa_Passage <= raining and (not enough_money)
Stefan M. schrieb: > Wie kann ich das in VHDL umsetzen? Das sind effektiv 2 nebenläufige "when else" Zuweisungen. > Ich bekomme das einfach nicht auf die Kette. Was hast du denn schon? Und wo genau klemmt es? Stefan M. schrieb: > S0 (Switch0 or Switch1) > S1 (Switch10 or Switch11) > S2 (Switch15) Also etwa so?: S(0) <= Switch0 or Switch1; S(1) <= Switch10 or Switch11; S(2) <= Switch15; > S0 bis S2 sind dabei meine Steuereingänge für den Mux. Wenn du es schlau angelegt hast, dann hast du diese Select-Eingänge genauso wie den Eingangsvektor a als std_logic_vector(2[bzw 4] downto 0) angelegt. Dann kannst du das z.B. so zuweisen:
1 | Y1 <= a(0) when s="001" else |
2 | a(2) when s="010" else |
3 | a(4) when s="100" else |
4 | '0' -- alle anderen Kombinationen von s |
5 | |
6 | Y2 <= a(1) when s="001" else |
7 | a(3) when s="010" else |
8 | a(4) when s="100" else |
9 | '0' -- alle anderen Kombinationen von s |
:
Bearbeitet durch Moderator
Ich habe das Programm zum Testen entsprechend
1 | signal SEL: STD_LOGIC_VECTOR (0 to 2); |
2 | signal a: STD_LOGIC_VECTOR (2 downto 0); |
3 | signal Y1, Y2: STD_LOGIC; |
4 | .
|
5 | .
|
6 | |
7 | a(0) <= '1' when (BLINK_TASTEN_LINKS = '1') else '0'; |
8 | a(1) <= '1' when (BLINK_TASTEN_RECHTS = '1') else '0'; |
9 | a(2) <= '1' when (WBA = '1') else '0'; |
10 | |
11 | SEL(0) <= Sw0; |
12 | SEL(1) <= Sw10; |
13 | SEL(2) <= Sw15; |
14 | |
15 | |
16 | with SEL select |
17 | |
18 | |
19 | Y1 <= a(0) when "100", |
20 | a(1) when "010", |
21 | a(2) when "111", |
22 | |
23 | '0' when others; |
24 | |
25 | |
26 | |
27 | Y2 <= a(2) when "111", |
28 | |
29 | '0' when others; |
30 | |
31 | |
32 | |
33 | LED1 <= Y1; |
34 | LED2 <= Y2; |
mittels nebenläufigen Anweisungen aufgebaut,allerdings ist nun das Problem, dass ich nur Y1 oder Y2 zum Schalten verwenden kann, beide zusammen funktionieren nicht.Da bekomme ich Errors in Zeile Y2: type 'boolean' does not match with a string literal.Syntax error near "others". Das ist eigentlich Quatsch, da Y2 ohne Y1 funktioniert. Was könnte das Problem sein?
:
Bearbeitet durch Moderator
Stefan M. schrieb: > Was könnte das Problem sein? Dass du das "with select" für Y2 nicht korrekt verwendest.
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.