我正在 quartus II 上为 CYCLONE III EP3C25 FPGA 编写 VHDL 程序,但遇到了问题。
这是我的程序的重要部分:
odata : out std_logic_vector(15 downto 0);
signal buf_data : std_logic_vector(255 downto 0);
signal nb_word : integer :=0;
Process(clk,RST)
begin
if(RST='0') then
nb_word<=0;
elsif(clk'event and clk='0') then
if(Current_state_w=s2) then
if(nb_word<=X"F0") then
nb_word<=nb_word+16;
else
nb_word<=0;
end if;
end if;
end if;
end process;
Process(clk,RST)
begin
if(RST='0') then
odata<=(OTHERS=>'0');
elsif(clk'event and clk='0') then
odata<=buf_data(nb_word+15 downto nb_word);
end if;
end process;
这段代码编译得很好,但没有做我想做的事,然后我只想改变:
odata<=buf_data(nb_word+15 downto nb_word);
在
odata<=buf_data(nb_word downto nb_word-15);
我将 nb_word 的初始化和重置值更改为 15 而不是 0。
问题是,当我这样做并尝试编译时,我得到了这个错误:
Error (10779): VHDL error at VL_control.vhd(99): expression is not constant
该行对应于 odata 行的更改。
我真的不明白为什么我会收到这个错误。为什么可以做加法而不是减法?我还尝试定义另一个信号并在像这样寻址缓冲区之前对信号进行减法:
nb_word1 := (nb_word-15);
odata<=buf_data(nb_word downto nb_word1);
但我仍然得到同样的错误。这是哪里来的??????