我确实有以下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声明?
预先感谢
答案 0 :(得分:0)
不。 MAtaps
必须是 static ,即在编译时固定。 (VHDL是一种硬件描述语言。您不能使用数量可变的硬件。)MAtaps
可以是常量或泛型,但不能是其他信号或变量。