Сдвиговый регистр для std_logic_vector

Я видел тот же вопрос здесь и пытался следовать например, но я столкнулся с ошибками при объявлении своих сигналов. В конкретных:

#Error: COMP96_0015: Pipeline.vhd : (52, 44): ';' expected.

Вот мой код:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity Pipeline isgeneric (
    VECTOR_WIDTH: natural := 128;
    VECTOR_DEPTH: natural := 7
); port(
     ImVal : in STD_LOGIC_VECTOR(9 downto 0);
     RA : in STD_LOGIC_VECTOR(127 downto 0);
     RB : in STD_LOGIC_VECTOR(127 downto 0);
     RC : in STD_LOGIC_VECTOR(127 downto 0);
     OpCode : in STD_LOGIC_VECTOR(10 downto 0);
     RT : in STD_LOGIC_VECTOR(127 downto 0);
     Clk: in STD_LOGIC;
     Reset: in STD_LOGIC;
     OutVal : out STD_LOGIC_VECTOR(127 downto 0)
 );
end Pipeline;

architecture Behavioral of Pipeline is
    type shift_reg_type1 is array (natural range<>) of std_logic_vector(127 downto 0);
    type shift_reg_type2 is array (natural range<>) of std_logic_vector(10 downto 0);
    type shift_reg_type3 is array (natural range<>) of std_logic_vector(9 downto 0);
    signal shift_regA: shift_reg_type1(0 to 6)(127 downto 0);
    signal shift_regB: shift_reg_type1(0 to 6)(127 downto 0);
    signal shift_regC: shift_reg_type1(0 to 6)(127 downto 0);
    signal shift_regT: shift_reg_type1(0 to 6)(127 downto 0);
    signal OpCode_reg: shift_reg_type2(0 to 6)(10 downto 0);
    signal ImVal_reg: shift_reg_type3(0 to 6)(9 downto 0);

begin

end Behavioral;

Он жалуется на мои объявления сигналов, но я не понимаю, почему.


person Noobgineer    schedule 06.03.2016    source источник
comment
Также есть синтаксическая ошибка в строке 4 ;-). И это тоже не минимальный пример.   -  person Martin Zabel    schedule 07.03.2016


Ответы (1)


Объявления сигналов неверны, как говорится в сообщении об ошибке. Более того, он ожидает точку с запятой, потому что оператор завершен, но ваш код имеет два ограничения диапазона на сигнал...

signal shift_regA: shift_reg_type1(0 to 6);   
signal shift_regB: shift_reg_type1(0 to 6);  
signal shift_regC: shift_reg_type1(0 to 6);   
signal shift_regT: shift_reg_type1(0 to 6);   
signal OpCode_reg: shift_reg_type2(0 to 6);    
signal ImVal_reg: shift_reg_type3(0 to 6);

shift_reg_type1 уже является ограничением на 127..0. Так что нельзя ограничивать shift_regA снова во втором измерении. Кстати. нет второго измерения, потому что это одномерный массив одномерных элементов.

person Paebbels    schedule 06.03.2016
comment
Я приближался к этому предположению, но хотел быть уверенным на 100%, поскольку в примере было два ограничения. Я не делал VHDL какое-то время, поэтому все нужно обновить, лол. - person Noobgineer; 07.03.2016