私はVHDLを初めて使用し、遅延とゲート出力の長さを調整して、プログラマブルFPGAの遅延/ゲートアプリケーションを作成しようとしています。入力信号を受信するとすぐに、ゲート信号の生成が完了するまで、他の入力を無視する必要があります。
後でこのコンポーネントを 8 つの異なる入力と 8 つの異なる出力に使用し、レジスタを書き込むことによって、それぞれに必要な遅延/ゲート パラメータを個別に設定したいと考えています。
Quartus II v 11.0 でコンパイルしようとすると、次のエラーが発生します。
エラー (10821): clkgen.vhd(46) での HDL エラー: サポートされているレジスタ モデルと動作が一致しないため、"control_clkgen" のレジスタを推論できません
そして同様に
エラー (10822): clkgen.vhd(37) での HDL エラー: このクロック エッジで割り当て用のレジスタを実装できませんでした
何が悪いのかわかりません。コンポーネントのコードは次のとおりです。
library ieee;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_arith.all;
use IEEE.Std_Logic_unsigned.all;
ENTITY clkgen is
port(
lclk : in std_logic;
start_clkgen : in std_logic;
gate_clkgen : in std_logic_vector(31 downto 0);
delay_clkgen : in std_logic_vector(31 downto 0);
output_clkgen : out std_logic
);
END clkgen ;
ARCHITECTURE RTL of clkgen is
signal gate_cycles_clkgen : std_logic_vector(32 downto 0);
signal delay_cycles_clkgen : std_logic_vector(32 downto 0);
signal total_cycles_clkgen : std_logic_vector(32 downto 0);
signal counter_clkgen : std_logic_vector(32 downto 0);
signal control_clkgen : std_logic;
begin
gate_cycles_clkgen <= '0' & gate_clkgen;
delay_cycles_clkgen <= '0' & delay_clkgen;
total_cycles_clkgen <= gate_cycles_clkgen + delay_cycles_clkgen;
start_proc: process(lclk, start_clkgen)
begin
if (start_clkgen'event and start_clkgen = '1') then
if control_clkgen = '0' then
control_clkgen <= '1';
end if;
end if;
if (lclk'event and lclk = '1') then
if control_clkgen = '1' then
counter_clkgen <= counter_clkgen + 1;
if (counter_clkgen > delay_cycles_clkgen - 1 AND counter_clkgen < total_cycles_clkgen + 1) then
output_clkgen <= '1';
elsif (counter_clkgen = total_cycles_clkgen) then
counter_clkgen <= (others => '0');
output_clkgen <= '0';
control_clkgen <= '0';
end if;
end if;
end if;
end process start_proc;
END RTL;
助けてくれてありがとう。