FC2カウンター FPGAの部屋 PS/2キーボードインターフェース用テストベンチ(task使用)のアサーション
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

PS/2キーボードインターフェース用テストベンチ(task使用)のアサーション

今度はVerilog2001でアサーションを適用してみる。(といっても大げさなものではないが。。。)

実は、VHDLでPS/2キーボードとキャラクタ・ディスプレイ・コントローラをつないで、キーボードで1文字打ったら、そのままディスプレイに写すという実験をやっている。アサーションのないテストベンチを渡して、PS/2キーボード・インターフェース回路のシミュレーションをやってもらったところ、うまくパラレルデータが出ているようだったので、OKということになった。しかし、そのデータをLEDに出力してみると、1ビットシフトが足りない。なぜ???ということになって、よくVHDLコードを見てみると、PS/2のクロックをクロックとして使用して回路を作ってしまったようだった。
私のテストベンチはprocess文で2つのPS/2キーボードデータを出力しているので、2つ終わったら、最初のデータに戻って、繰り返して出力してしまう。それで、クロックが連続的に入って、ちゃんと動いているように見えてしまったようだ。実際には1つPS/2キーボードデータを入れたら、次のキー動作までPS/2のクロックは停止しているので、それ以降の回路動作は停止してしまったようだ。
テストベンチを作るときには1つPS/2キーボードデータを出したら、実機と同様にWAITするか、”PS/2キーボードインターフェース用テストベンチ(procedure使用)のアサーションのようなもの”でやったようにチェック用のコードを入れておけば、シミュレーション段階でミスを見つけることができたと思う。反省!!!

前振りが長くなってしまったが、Verilog2001のアサーションに行く。今度は task 文の中にアサーションを組み込むことにする。
keyboard_verilog_3_071011.png

今回は、図で貼り付けた。ピンクの四角で囲んだところが、今回追加したところだ。Verilogでは task 文の外のデータも参照できるので、scandataをinput_codeと比較して違っていたら、input_codeとscandataを表示してシミュレーションを中断する。自由にデータを表示できるのがVerilogの良いところだと思う。
VHDLも”たーぼのハードウェア設計記録”さんの”VHDLでC言語の標準関数を使う”を使用して printf でエラーメッセージを表示すると、すごくやりやすいと思う。

2007/10/13 : LRMに従って$displayの中の %x を %h に変更しました。たっくさん、ご指摘ありがとうございました。
さらにVeritak での$display表示結果を下に示します。


上の図のVerilogコードの黄色で囲んであるところを見るとわかると思いますが、わざとエラーが出るように書き換えてあります。
ピンクで囲ってあるところが、$display で表示されたメッセージです。
  1. 2007年10月11日 06:15 |
  2. アサーション事始め
  3. | トラックバック:0
  4. | コメント:6

コメント

いつもお世話さまです。
c言語的には%xでよいのですが、LRM的には%hの方がよろしいかと思います。(%xで動かないシミュレータは多分ない、とは思いますが、なぜか2001/2005LRMには%xが載っていないです。)
  1. 2007/10/13(土) 12:22:58 |
  2. URL |
  3. たっく #-
  4. [ 編集 ]

こんにちは。たっくさん、ご指摘ありがとうございました。

修正してしておきました。
  1. 2007/10/13(土) 20:44:03 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

わざわざありがとうございます。お手数をおかけしました。

TIPSをひとつ。
Verilog HDLでは、$timeformatで、時刻表示フォーマットを指定できます。(initial で一回指定しておけばOKです。)以降それで$display("%t",$time);とかすると xx.xx nsecとか指定フォーマットで表示するようになります。
  1. 2007/10/14(日) 07:02:21 |
  2. URL |
  3. たっく #-
  4. [ 編集 ]

たっくさん、教えていただいてありがとうございます。

$timeformatの使い方がわかりません。
今はVerilogの本がないので、調べてみたいと思います。
  1. 2007/10/14(日) 13:50:49 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

$timeformatはの使い方は以下にあります。
http://japanese.sugawara-systems.com/tutorial/verilog/newpage36.htm#TIMEFORMAT
ご参考まで。
  1. 2007/10/15(月) 00:16:24 |
  2. URL |
  3. たっく #-
  4. [ 編集 ]

たっくさん、たびたび教えていただいてありがとうございます。

PS/2キーボードインターフェース用テストベンチ(task使用)のアサーション($timeformat)として、記事を書き直しました。
http://marsee101.blog19.fc2.com/blog-entry-623.html
  1. 2007/10/15(月) 06:12:09 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/620-d2549ef0
この記事にトラックバックする(FC2ブログユーザー)