簡単なデジタル回路で書かれたVerilogのモジュールは、シミュレーションとテストベンチファイルを添付しなければなりません。もちろん、単純なモジュールは、単純なVerilogのテストベンチ・シミュレーション・シンプルを書き込むために使用することができますが、機能はより複雑な経験になると、柔軟性のVerilog言語は確かに少ないC / C ++などの言語よりもあります。オブジェクト指向の検証のためのプログラミング言語のSystemVerilog、より良いタイミングを記述するだけでなく、オブジェクト指向言語と再利用の柔軟性を持ってするように、エンジニアリングシミュレーションのための利便性の多くをもたらすことができます。次に、シミュレーションのための簡単なシーケンスのSystemVerilog検出モジュールを使用しました。
まず、プロジェクトのフレームワーク
プロジェクトのテストモジュールは、ステートマシンのシーケンス「1110010」を検出には、次のように説明した5つのファイルを、含まれています。
├──top.sv:以下のモジュールの各々を接続するための上部モジュール
│
│├──module_bfm.sv:バスファンクションモデルモジュールインタフェースは、接続のために記載されている
│
発生タイミングシミュレーション:│├──tester.svを信号
│
│├──coverage.sv:検出モジュールカバレッジ
│
│├──module.v:なるようにシミュレーションモジュール
モジュールがVerilogで書かれているので、インタフェースは、直接使用されず、SVモジュールの残りの部分は、直接接続されたBFMながら必要性は、Verilogの仕様に接続されます。
module top();
seq_fsm_bfm bfm();
coverage converage_i(bfm);
tester tester_i(bfm);
seq_fsm seq_fsm_i(
.in(bfm.in),
.out(bfm.out),
.state(bfm.state),
.clk(bfm.clk),
.reset(bfm.rst_n)
);
endmodule
二、使用するのSystemVerilogのインターフェース
使用したVerilogモジュールは、ポートに接続されているにかかわらず、使用の順序または名前を使用するのは非常に退屈でエラーが発生しやすい接続されています。SystemVerilogのインターフェースは、共有モジュールとの間に配列中の検出モジュールに接続するためのポートを規定する、非常に容易であるように、C / C ++クラス、パッケージ全体のモジュールポート信号に幾分類似しています。また、初期およびタスクインターフェースを提供しながら、クロック信号と簡単な説明、本明細書に記載のインタラクティブクロック、リセット信号及びデータ信号を生成する容易にします。
//Bus Functional Model
interface seq_fsm_bfm();
logic clk;
logic in;
logic out;
logic[0:2] state;
logic rst_n;
initial begin
clk=0;
forever #10 clk = ~clk;
end
task reset();
rst_n = 0;
@(posedge clk);
@(posedge clk);
rst_n = 1;
endtask
task send_data(bit in_data);
@(posedge clk) in = in_data;
endtask
endinterface //seq_fsm_interface
第三に、機能カバレッジ
coverpointを定義するサンプリング実際の信号のための機能的カバレッジ、さらにテスト信号は、すべての回復可能な状態を含んでいます。2、サンプリング; 1、カバレッジの定義:機能的カバレッジの単純な例として、我々は、工程が簡単に分けることができます。
module coverage(seq_fsm_bfm bfm);
logic in;
logic out;
logic[2:0] state;
covergroup cg_cov;
coverpoint in;
coverpoint out;
coverpoint state;
endgroup
cg_cov oc;
initial begin
oc = new();
forever begin
@(posedge bfm.clk);
in = bfm.in;
out = bfm.out;
state = bfm.state;
oc.sample();
end
end
endmodule
coverpointデフォルトはすべての状態、すなわち、状態3又はそれ以上のビットが8つの状態を含み、「000」、「001」、「010」を含む......、のためのより多くの状態の一部、使用負またはリスト。次のように結果のカバレッジレポートを使用します:
# COVERGROUP COVERAGE:
# ----------------------------------------------------------------------------------------------------
# Covergroup Metric Goal/ Status
# At Least
# ----------------------------------------------------------------------------------------------------
# TYPE /top/converage_i/cg_cov 100.0% 100 Covered
# Coverpoint cg_cov::in 100.0% 100 Covered
# Coverpoint cg_cov::out 100.0% 100 Covered
# Coverpoint cg_cov::state 100.0% 100 Covered
# Covergroup instance \/top/converage_i/oc 100.0% 100 Covered
# Coverpoint in 100.0% 100 Covered
# covered/total bins: 2 2
# missing/total bins: 0 2
# bin auto['b0] 498 1 Covered
# bin auto['b1] 502 1 Covered
# Coverpoint out 100.0% 100 Covered
# covered/total bins: 2 2
# missing/total bins: 0 2
# bin auto['b0] 994 1 Covered
# bin auto['b1] 4 1 Covered
# Coverpoint state 100.0% 100 Covered
# covered/total bins: 8 8
# missing/total bins: 0 8
# bin auto['b000] 394 1 Covered
# bin auto['b001] 222 1 Covered
# bin auto['b010] 127 1 Covered
# bin auto['b011] 142 1 Covered
# bin auto['b100] 64 1 Covered
# bin auto['b101] 31 1 Covered
# bin auto['b110] 14 1 Covered
# bin auto['b111] 4 1 Covered
第四に、テスターテスター
ここで、テスターは、比較的単純であるが、リセットBFM 01でランダム信号を生成します。
module tester(seq_fsm_bfm bfm);
initial begin
bit in_data;
bfm.reset();
repeat(1000) begin
// $display("@%0t\n",$time);
in_data = ($random) %2;
bfm.send_data(in_data);
end
$stop;
end
endmodule
五、ModelSimでのシミュレーションの自動化
ModelSimのシミュレーションステップはおおよそコンパイルおよびシミュレーション、シミュレーションの各時間コンパイラに分割することができ、波形シミュレーションは非常に面倒である加えます。あなたは、次の書類を行い、シミュレーションを行う自動化するスクリプトを書くことができます。
if [file exists "work"] {vdel -all}
vlib work
vlog top.sv tester.sv seq_fsm_bfm.sv coverage.sv seq_fsm.v #编译文件,注意路径,这里与do文件同目录
vopt top -o top_optimized +acc +cover=sbfec+seq_fsm(rtl). #指定顶层文件,优化
vsim top_optimized -coverage #开始仿真
set NoQuitOnFinish 1
onbreak {resume}
log /* -r
add wave seq_fsm_i/* #添加波形
run -all
vcover report seq_fsm.ucdb -cvg -details #报告覆盖率
良いrun.doファイルを書き込み、Linuxで直接実行
vsim -do run.do
参考:
クリス・スピア、ガイドラインの作成のSystemVerilog検証テストベンチ
レイSalemiの、UVM入門