タイミング操作

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


遅延

処理を指定した時間だけ遅延させることができます。遅延は、シミュレーションのみ使用することができます。

 
  #遅延時間 // 処理

以下に例を示します。

 
  // 5単位時間ごとにクロックを反転
  always #5 clock = ~clock;
    

イベントの発生

シミュレーションにおいて、イベントを発生させることができます。

まずイベントを宣言します。


  event イベント名;
  

イベントを発生させるためには、以下のように記述します。


  ->イベント名;
  

以下に例を示します。


  // イベントの宣言
  event start_simulation;

  initial begin
  reset = 0;
  #10 reset = 1;
  // イベントの発生
  -> start_simulation;
  end
  

信号、イベントに同期

信号の変化時とイベントの発生時に、処理を実行させることができます。


  @(トリガ) // 処理
  

信号の変化時に処理を実行させたい場合は以下のいずれかのようにトリガを記述します。posedgeは信号の立ち上がりに、negedgeは信号の立ち下がりに同期して処理を実行するよう指定します。


  posedge 信号
  negedge 信号
  

以下に例を示します。


  event start_simulation;

  initial begin
  reset = 1;
  #10 reset = 0;
  // リセットが立ち下がったら、イベントを発生
  -> start_simulation;
  end

  initial begin
  in = 0;
  // イベントが発生したら(リセットが立ち下がった)、入力信号を発生
  @(start_simulation) in = 1;
  end

  // クロックの立ち上がりに同期して、カウンタを更新
  always @(posedge clock) begin
    counter <= (reset)? INIT: counter + 1;
  end

戻る