VerilogとVHDLの記述比較(テストベンチ)

3ステップで実行 ModelSimコマンドラインのVerilogとVHDLのサンプル・データについて、テストベンチの記述を比較しました。
(データはこちらです。[Verilog版VHDL版])

テストベンチの概要

テストベンチは、大きく3つの部分で構成されています。

  • クロック信号の生成
  • リセット信号の生成
  • 入力データの生成

テストベンチの構成

クロック信号の生成

Verilog-HDL

initialとforeverの組み合わせでクロックを生成しています。クロック周期はlocalparamや`defineを使って定義することもできますが、ここでは直接値(5)を記述しています。

VHDL

processでクロックを生成しています。クロック生成は、sim_endでクロックを停止します。クロックの停止は、シミュレータを終了させるために必要な処理です。

リセット信号の生成

Verilog-HDL

taskでリセット信号を生成しています。リセット信号rst_xは、taskの引数として渡していません。グローバルな信号としてtask内で直接値を設定しています。

VHDL

procedureでリセット信号を生成しています。リセット信号rst_xは、procedureに引数として与えています。

入力データの生成

Verilog-HDL

デザイン(DUT: Design-Under-Test)の8ビット入力端子i_inに対して、ランダムな値を10回入力しています。ランダム値生成にはシステムタスク$randomを利用しています。

VHDL

デザイン(DUT: Design-Under-Test)の8ビット入力端子i_inに対して、ランダムな値を10回入力しています。ランダム値生成はこちらのサイトを参考にさせていただきました。math.realパッケージに格納されている、uniformを利用してランダムデータを生成しています。uniformで生成したreal型のランダムデータを、まず255までの整数に変換し、次に8ビットのstd_logic_vectorに変換しています。続いて、データ入力を終了して10サイクル待ってからsim_endをtrueに設定しています。これによってクロックが停止し、シミュレータが停止します。

VerilogとVHDLの違いについて

テストベンチの内容について、実現方法の違いをまとめると次のようになります。

項目 Verilog-HDL VHDL
クロックの立ち上がりを待つ  @(posedge clk);  wait until clk’event and clk=’1′;
クロックの立ち下がりを待つ  @(negedge clk);  wait until clk’event and clk=’0′;
シミュレーションの終了 $finish  processのループ等、処理を全て終了させる
ランダム値の生成 $random  uniform等を使って生成する
画面への文字表示 $display report
スポンサーリンク
広告大
広告大
  • このエントリーをはてなブックマークに追加
スポンサーリンク
広告大