VHDL получение std_logic_vector из массива std_logic_vector

#vhdl #ghdl

#vhdl #ghdl

Вопрос:

У меня проблема. У меня есть array of std_logic_vector , и я ввожу a value unsinged(3 downto 0) , и я хочу использовать значение в качестве индекса array .

Пока все хорошо, но я должен получить a std_logic_vector из array и ввести вывод segments (который также std_logic_vector имеет тот же размер), но я получаю ошибку:

 > can't match type conversion with type array type "std_logic_vector"
 

вот мой код:

 > library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;

entity getarrayvalue is
port(
        value : in unsigned(3 downto 0);
        clk : in std_logic;
        segments : out std_logic_vector(6 downto 0)
    );
end entity;

architecture v1 of getarrayvalue is
    type rom_type is array(0 to 9) of std_logic_vector(6 downto 0);
    signal rom: rom_type :=("1111110","0110000","1101101","1111001","0110011","1011011","1011111","1110000","1111111","1111011");
    signal val_i: integer;

    val_i <= to_integer(value); 

    process(clk)
    begin
        if rising_edge(clk) then
            segments <= rom_type(val_i);
        end if;
    end process;

end architecture;
 

Кто-нибудь знает, как решить эту проблему? Спасибо!

Комментарии:

1. В вашем примере не воспроизводится ошибка, которая отсутствует begin в архитектуре. Покажите ваши полные и точные сообщения об ошибках. segments <= rom_type(val_i); следует segments <= rom(val_i); отметить, что без ограниченного подтипа начальное значение по умолчанию val_i находится за пределами диапазона индексов rom , и это приведет к ошибке моделирования при rom(val_i) вычислении.

2. Спасибо, я постараюсь исправить это сейчас