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: 9288 (from 2010/06/03), today: 2, yesterday: 2