Verilog の Specify チートシート の履歴(No.1)
更新概要 Specify チートシート†
http://verilog.renerta.com/source/vrg00052.htm
を元に。
Specify の書き方†
LANG:verilog module ... ... specify ... endspecify ... endmodule
の形で module 内に specify ブロックを作成し、 モジュール内の信号同士の間のディレイを規定する。
文法は以下に示すとおり。
パスの宣言†
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])†
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])†
$skew checks the following:
- tested_event と reference_event がほぼ同時に起きていることを確認する
- limit 以上離れて起きたら失敗
$hold(reference_event, tested_event, limit[, notifier])†
LANG:verilog specify $hold(data, posedge clk, 5); endspecify
- posedge clk の後 limit が立つまで data が変化しないことを検証する
- 同時に変化するのもダメ
$recovery(reference_event, tested_event, limit[, notifier])†
- data が変化するのが posedge の後 limit 以内の期間のみであることを確認する
- limit 以上離れてから data が変化したらダメ (time of data event) - (time of reference event) < limit
$setuphold(reference_event, tested_event, setup_limit, hold_limit[, notifier])†
$width(reference_event, limit, threshold [,notifier])†
LANG:verilog $width(posedge data, limit, threshold)
- posedge data から negedge data までの幅が limit 以上 threshold 以下であることを検証する
$period(reference_event, limit[,notifier])†
- reference_event 間の間隔が limit 以上であることを検証する
$nochange(reference_event, data_event, start_edge_offset, end_edge_offset [,notifier])†
- よくわからない
Counter: 13343 (from 2010/06/03),
today: 3,
yesterday: 3