Verilog の Specify チートシート の変更点

更新


[[公開メモ]]

* 概要 [#d2271aa3]

http://verilog.renerta.com/source/vrg00052.htm

を元に、あんちょこを作りました。

* Specify の書き方 [#k91713ff]

 LANG:verilog
 module ...
   ...
   specify
     ...
 
   endspecify
   ...
 endmodule

の形で module 内に specify ブロックを作成し、
モジュール内の信号同士の間のディレイを規定する。

** 各種関数 [#m1b49aec]

影付きの部分で tested_event が生じるとエラーになる。~
境界上はエラーにならない。

&ref(timing-check-tasks.png);

- $setup(tested_event, reference_event, limit[, notifier])
- $skew(reference_event, tested_event, limit[, notifier])
- $hold(reference_event, tested_event, limit[, notifier])
- $recovery(reference_event, tested_event, limit[, notifier])
- $setuphold(reference_event, tested_event, setup_limit, hold_limit[, notifier])
- $width(reference_event, limit, threshold [,notifier])
- $period(reference_event, limit[,notifier])
- $nochange(reference_event, data_event, start_edge_offset, end_edge_offset [,notifier])

以下注釈。

- reference_event や tested_event には posedge clk のようにエッジを指定しても良いし、
ただ単に signal1 などとした場合には posedge signal1 or negedge signal1 の意味になる。
- reference_event や tested_event には通常 posedge clk のようにエッジ指定する。
- ただ単に signal1 などとした場合には posedge signal1 or negedge signal1 の意味になる。
- limit の単位は `timescale の第1引数
-- `timescale 10ns / 10ps ならば 10ns の何倍かで指定する
- reference_event に &&& で条件を付けられる
-- 例えば posedge clk &&& !rst とすれば !rst の時に限りチェックされる
- width における tested_event は reference_event の逆エッジ
- period における tested_event は reference_event と同じイベント
- $setup では tested_event が reference_event より前に来るのが覚えにくい
- $width における tested_event は reference_event の逆エッジ
- $period における tested_event は reference_event と同じイベント
- notifier に reg を指定すると、エラー時に 1 が代入される
-- ゼロで初期化しておく

** パスの宣言 [#m86b7bea]

 LANG:verilog
 specify
   (In1 => Out1) = (10);
 endspecify
 
 specify
   specparam TRise = 10, TFall = 15;
   (In2 => Out2) = (TRise, TFall) ;
 endspecify

- 入力 In1 から Out1 への遅延が単位時間の10倍
- 入力 In2 から Out2 への遅延が rise, fall 別に単位時間の10倍, 15倍

Counter: 5524 (from 2010/06/03), today: 4, yesterday: 0