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 の初期化とリセットの値を 0 ではなく 15 に変更しました。
問題は、それを行ってコンパイルしようとすると、次のエラーが発生することです。
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);
しかし、私はまだ同じエラーが発生します。それはどこから来たのですか?