vhdl“表达式不是常数”

时间:2019-03-22 14:18:02

标签: vhdl

我确实有以下vhdl代码,对于“ signal 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 :(得分:0)

不。 MAtaps必须是 static ,即在编译时固定。 (VHDL是一种硬件描述语言。您不能使用数量可变的硬件。)MAtaps可以是常量或泛型,但不能是其他信号或变量。