mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan M. (d2h17)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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:
   Y1 <= a(0) when s="001" else
         a(2) when s="010" else
         a(4) when s="100" else
         '0'                   -- alle anderen Kombinationen von s

   Y2 <= a(1) when s="001" else
         a(3) when s="010" else
         a(4) when s="100" else
         '0'                   -- alle anderen Kombinationen von s

: Bearbeitet durch Moderator
von Stefan M. (d2h17)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe das Programm zum Testen entsprechend
signal SEL: STD_LOGIC_VECTOR (0 to 2);
signal a: STD_LOGIC_VECTOR (2 downto 0);
signal Y1, Y2: STD_LOGIC;
.
.

 a(0) <= '1' when (BLINK_TASTEN_LINKS = '1') else '0';
 a(1) <= '1' when (BLINK_TASTEN_RECHTS = '1') else '0';
 a(2) <= '1' when (WBA = '1') else '0';

 SEL(0) <= Sw0;
 SEL(1) <= Sw10;
 SEL(2) <= Sw15;
    

with SEL select

    
 Y1 <=  a(0) when "100",
        a(1) when "010",
        a(2) when "111",  

'0' when others;                  
    


Y2 <=  a(2) when "111",  

'0' when others;


           
LED1 <= Y1;
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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Stefan M. schrieb:
> Was könnte das Problem sein?
Dass du das "with select" für Y2 nicht korrekt verwendest.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.