VHDL Невозможно инициализировать массив неподписанных векторов. - PullRequest
0 голосов
/ 04 ноября 2018

Строки:

type some_array_type is array (0 to 4, 0 to 4) of unsigned(7 downto 0);
signal some_array : some_array_type := (others=>(others=>'0')); 

заставляет vivado 2018.2 выдать ошибку:

[Synth 8-1807] character '0' is not in type unresolved_unsigned

по какой-то причине в файле VHDL 2008. Какой это волшебный синтаксис, чтобы заставить Vivado понять, что я просто пытаюсь инициализировать массив нулями? Я не должен был написать функцию, чтобы сделать это. Я также попытался без знака ((others => (others => '0')));

Приведенный ниже код, конечно, можно игнорировать и он вообще ни для чего не нужен. Это просто для людей ОКР. «Вы всегда должны включать минимальный рабочий пример!»

library IEEE;
    use IEEE.std_logic_1164.all;
    use IEEE.numeric_std.all;

entity some_entity is
    port (
        clk, rst: in std_logic ;
    );
end some_entity ;

architecture arch of some_entity is
    type some_array_type is array (0 to 4, 0 to 4) of unsigned(7 downto 0);
    -- throws error
    signal some_array : some_array_type := (others=>(others=>'0'));

    type some_other_array_type is array (natural range <>) of std_logic_vector(7 downto 0); 
    -- doesn't throw error
    signal some_other_array : some_other_array_type(0 to 4) := (others=>(others=>'0'));
begin
    -- some made up process
    process(clk, rst)
        begin
            if(rising_edge(clk)) then
                if rst = '1' then
                    some_array <= (others=>(others=>'0'));
                else
                    some_array <= (others=>(others=>'1'));
                end if;
            end if;
    end process;
end arch;
...