Verilog の Specify チートシート のバックアップソース(No.1)

更新

[[公開メモ]]

* 概要 Specify チートシート [#d2271aa3]

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

を元に。

* Specify の書き方 [#k91713ff]

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

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

文法は以下に示すとおり。

* パスの宣言 [#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倍

* $setup(tested_event, reference_event, limit[, notifier]) [#n1a37909]

 LANG:verilog
 specify
   $setup(data, posedge clk, 5);
 endspecify

- posedge clk の前 limit より前に data が確定していることを確認する
- posedge clk の前 limit の期間に data が変化したら失敗する
- posedge clk と同時に data が変化するのは問題ない

* $skew(reference_event, tested_event, limit[, notifier]) [#k8f50d42]

$skew checks the following:

- tested_event と reference_event がほぼ同時に起きていることを確認する
- limit 以上離れて起きたら失敗

* $hold(reference_event, tested_event, limit[, notifier]) [#vf812997]

 LANG:verilog
 specify
   $hold(data, posedge clk, 5);
 endspecify

- posedge clk の後 limit が立つまで data が変化しないことを検証する
- 同時に変化するのもダメ

* $recovery(reference_event, tested_event, limit[, notifier]) [#a77fdce9]

- data が変化するのが posedge の後 limit 以内の期間のみであることを確認する
- limit 以上離れてから data が変化したらダメ
(time of data event) - (time of reference event) < limit

* $setuphold(reference_event, tested_event, setup_limit, hold_limit[, notifier]) [#a5df0775]

* $width(reference_event, limit, threshold [,notifier]) [#s55f8f49]

 LANG:verilog
 $width(posedge data, limit, threshold)

- posedge data から negedge data までの幅が limit 以上 threshold 以下であることを検証する

* $period(reference_event, limit[,notifier]) [#i46623b0]

- reference_event 間の間隔が limit 以上であることを検証する

* $nochange(reference_event, data_event, start_edge_offset, end_edge_offset [,notifier]) [#t3166155]

- よくわからない

Counter: 9288 (from 2010/06/03), today: 2, yesterday: 2