vhdl "выражение не является постоянным" - PullRequest
0 голосов
/ 22 марта 2019

У меня есть следующий VHDL-код, который выдает ошибку «выражение не является константой» для строки «сигнал FiltReg» :

--FILE A--
PORT
(
FindParam   : OUT STD_LOGIC_VECTOR(48 DOWNTO 0);
...
);

ARCHITECTURE a OF b IS
SIGNAL MAtaps : STD_LOGIC_VECTOR(4 DOWNTO 0);

BEGIN
FindParam <= (MAtaps & ...);

PROCESS (clk, clr_n)
  BEGIN
  IF clr_n = '0' THEN
    MAtaps <= (OTHERS => '0');
  ELSIF (clk'EVENT AND clk = '1') THEN
    MAtaps <= param2((MAtaps'HIGH) DOWNTO 0); 
  END IF;
END PROCESS;

.

 --FILE B--
 PORT
 (
 FindParam   : in STD_LOGIC_VECTOR(48 DOWNTO 0);
 ...
 );

 -- Local signals
   signal MAtaps     : integer range 0 to 16;
   signal FiltReg    : UNSIGNED(MAtaps DOWNTO 0); 


BEGIN

    MAtaps <= to_integer(unsigned(FindParam(48 DOWNTO 44)));

Похоже, что объявление сигнала должно быть постоянным, что не соответствует действительности.

Вопрос: Существует ли решение или обходной путь для использования MAtaps для объявления сигнала FiltReg?

РЕДАКТИРОВАТЬ: Сообщение об ошибке Quartus: enter image description here

Заранее спасибо

1 Ответ

0 голосов
/ 22 марта 2019

Нет. MAtaps должно быть статическим , то есть фиксированным во время компиляции. (VHDL - это язык описания hardware . У вас не может быть переменного количества аппаратного обеспечения.) MAtaps может быть константой или универсальным, но это не может быть другой сигнал или переменная.

...