誰でもテストベンチを書くのを手伝ってもらえますか?
load = 1
「a」を入力した場合に設定します。- 1 クロック サイクル (つまり、クロックの周期) 待ちます。
- 設定
load = 0
・入力a = 00000
1 クロック サイクル遅延させる方法がわかりません。
誰でもテストベンチを書くのを手伝ってもらえますか?
load = 1
「a」を入力した場合に設定します。load = 0
・入力a = 00000
1 クロック サイクル遅延させる方法がわかりません。
「期間」を待つのではなく、同期的に行います。
process
begin
load <= '1';
-- setup other signals as you wish also
wait until rising_edge(clk);
load <= '0';
-- more signals and wait for rising_edge() calls in here...
wait; -- when you've finally finished.
end;
もう 1 つの便利なトリックは、 というシグナルを使用することfinished
です。0
プロセスの開始時と1
最終の直前に設定しますwait
。
次に、クロックジェネレーターを次のようにします。
signal clk : std_logic := '1';
....
clk <= not clk after clk_period/2 when finished /= '1' else '0';
これにより、ローになるまで動作するクロック信号が作成finished
され1
ます。シミュレーターは、それ以上の信号変更が予定されていないことを検出し、自動的に停止します。
さまざまな入力を作成し、出力をチェックするさまざまなプロセスを多数持つことができます。それらのそれぞれが完了したときに終了した場合、クロックは、すべてのドライバーがsになるまで信号を1
発生させる解決関数のために、それらがすべて終了するまで実行されます。finished
X
1
そのようにしてみることができます:
SIGNAL CLKp :time := 40 ns;
PROCESS
BEGIN
CLK <= '0'; wait for CLKp/2;
CLK <= '1'; wait for CLKp/2;
END PROCESS;
PROCESS
BEGIN
load <= '1'; a <= ...; wait for CLKp;
load <= '0'; a <= X"0"; wait for CLKp;
END PROCESS;
その単純な例では、 を使用して 1 サイクルの遅延を取得しwait for CLKp
ます。