Forum: FPGA, VHDL & Co. Multiplexer 5x2 in VHDL


von Stefan M. (d2h17)


Angehängte Dateien:

Lesenswert?

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
von svedisk ficklampa (Gast)


Lesenswert?

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!

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

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)

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


Lesenswert?

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
von Stefan M. (d2h17)


Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.