SOの知識人の皆さん、
完全なループを反復処理するのにかかる時間を決定することについての疑問を解消したかっただけです。私が50Mhzのクロックを持っていると考えてください。これは、クロック周期が20nsであることを意味します。
さて、0から500までカウントするカウンターがある場合、このカウンターはループ全体を完了するのに20ns x 500 = 10 usかかりますか?
ありがとうございました。
簡単な答え: はい。
長い答え: FPGA では、ハードウェアをプログラムします。使用process
するステートメントは、C/C++/etc のように順次ではなく、並列で実行されます。コードは、通常のマイクロプロセッサで行います。
例:
signal sig_a : UNSIGNED(3 downto 0) := (others => '0');
signal sig_b : SIGNED(7 downto 0) := (others => '0');
signal sig_c : std_logic := '0';
process(clk)
begin
if(rising_edge(clk)) then
sig_a <= sig_a + 1;
sig_b <= sig_b - 1;
sig_c <= not sig_c;
end if;
end process;
クロック信号を取得するたびに (50 MHz クロックで 20 ns ごと)、プロセス内の 3 つのステートメントすべてが同時に実行されます。3 つの信号はすべてフリップフロップに実装されるため、伝播遅延が終了すると (デバイスの正確な値については FPGA データシートを参照してください)、3 つの信号すべてが新しい値になります。
したがって、プロセスはステートメントが完了するのを「待つ」のではなく、クロックによって「トリガー」されます。これはクロックの立ち上がりエッジごとに発生するため、ステートメントを 500 回実行するには、500 クロック サイクル = 50 MHz で 10 us が必要です。