2013-03-09 10 views
5

Ich habe den folgenden Code (es kodiert für eine Anzahl von einer gedrückten Taste):VHDL: mit Auswahl für mehrere Werte

with buttons select 
    tmp <= "000" when x"1", 
     "001" when x"2", 
     "010" when x"4", 
     "011" when x"8", 
     "100" when others; 
code <= input(1 downto 0); 
error <= input(2); 

Ich versuche, es neu zu schreiben, ohne tmp Signal. Ist es möglich? Die folgende funktioniert nicht:

with buttons select 
    error & code <= "000" when x"1", 
        "001" when x"2", 
        "010" when x"4", 
        "011" when x"8", 
        "100" when others; 

Antwort

3

Statt mit ausgewählten, könnten Sie Fall:

my_process_name : process(buttons) 
begin 
    case buttons is 
    when x"1" => 
     error <= '0'; 
     code <= "00"; 
    when x"2" => 
     error <= '0'; 
     code <= "01"; 
    when x"4" => 
     error <= '0'; 
     code <= "10"; 
    when x"8" => 
     error <= '0'; 
     code <= "11"; 
    when others => 
     error <= '1'; 
     code <= "00"; 
    end case; 
end process; 
+1

Es funktioniert nur in den Prozessen: http://www.quicknet.se/hdc/hdl/ educaton/mux4_1/index.htm – rburny

+0

Gibt es einen bestimmten Grund, warum Sie es nicht in einem Prozess platzieren möchten? – TOTA

+1

Ich lerne einfach VHDL und ich suchte nach der einfachsten, elegantesten Lösung. Gibt es einen semantischen Unterschied, wenn ich kombinatorischen Code in einen Prozess einfüge? – rburny