1

誰でもテストベンチを書くのを手伝ってもらえますか?

  • load = 1「a」を入力した場合に設定します。
  • 1 クロック サイクル (つまり、クロックの周期) 待ちます。
  • 設定load = 0・入力a = 00000

1 クロック サイクル遅延させる方法がわかりません。

4

2 に答える 2

3

「期間」を待つのではなく、同期的に行います。

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発生させる解決関数のために、それらがすべて終了するまで実行されます。finishedX1

于 2013-07-26T09:06:46.747 に答える
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ます。

于 2013-07-25T20:32:26.007 に答える