vhdl: ошибка кода Xilinx

Мы получаем этот набор ошибок:

Line 23: Mismatch in number of elements assigned in conditional signal assignment
Line 23: Expression has 1 elements ; expected 7

В этом коде строка 23

Q_out <= "1111110" when Q_in = "0000" else


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity decoder is
Port (
      Q_in  : in  UNSIGNED (3 downto 0);
      Q_out : out  UNSIGNED (6 downto 0)
);
end decoder;
architecture behavioral      of decoder is
begin
Q_out <= "1111110" when Q_in = "0000" else
        "0110000" when Q_in = "0001" else
        "1101101" when Q_in = "0010" else
        "1111001" when Q_in = "0011" else
        "0110011" when Q_in = "0100" else
        "1011011" when Q_in = "0101" else
        "0011111" when Q_in = "0110" else
        "1110000" when Q_in = "0111" else
        "1111111" when Q_in = "1000" else
        "1110011" when Q_in = "1001" else 
        "X";


 end behavioral    ;

person user3235290    schedule 25.01.2014    source источник
comment
Брайан: Это сработало! Большое спасибо! Я нахожу это странным, потому что одноклассники только что использовали X, даже для беззнакового массива, и в лекциях были примеры только использования X. В любом случае, нужно было заметить это по ошибке, слишком много внимания уделялось одной строке! Та!   -  person user3235290    schedule 25.01.2014
comment
Вы также можете использовать (others => 'X'), чтобы заполнить его 'X' для любой длины, что легче поддерживать и повторно использовать.   -  person Morten Zilmer    schedule 25.01.2014


Ответы (1)


VHDL строго типизирован, а это означает, что при назначении сигналов необходимо согласовать ширину и типы портов. В вашем случае вы не сопоставили ширину портов, о чем вам говорит ошибка. Вы пытаетесь назначить что-то шириной 1 бит чему-то шириной 7 бит. Пытаться:

 "1110011" when Q_in = "1001" else 
 (others => 'X');

Ключевое слово others в VHDL означает, что он будет заполнен столько X, сколько необходимо для соответствующего соответствия ширине портов.

person Russell    schedule 25.01.2014