目的:
Vivado で SVA を使用してみる。結果:
Vivado で SVA 並列アサーション を記述し、アサーションができることを確認した。- 2021/11/4 追記
とくに問題なくアサーションできている。 - 2020/10/16 追記
前回から30日以上経過しているが、アサーション結果表示できている。 - 2020/09/04 追記
再実行で アサーションの表示が また 出力されるようになった。
先日、Windows版の vivado を Update したが、この影響か ? - 2020/08/29 追記
再実行したところ、アサーションの表示が 出力されない。
WEB PACK ではサポートされず、30日間無償評価で使用できていたと思われる。
- property に 引数 を付けるとエラー が発生する。
- アサーションの結果は 波形には表示されない。
- アサーションの結果は Fail 時 のみ ログ, ディスプレイ に表示される。
( 特に処理の記述を行わない場合 )
以下のパターンで試しただけなので、他にも注意点があるかもしれないし、上の点も 設定, 記述方法等があるかもしれないが、SVA は使用可能。
(尚、波形への表示案については「Vivado で SVA(アサーション) を試す 2」を参照。)
SVA 適用手順:
Vivado の コマンドラインでのシミュレーション環境 をベースに SVA を適用した。( SVA 適用後の サンプルは こちら を参照。)
- ディレクトリ構成
アサーション格納用として assertion ディレクトリを作成 - アサーション用ファイルの作成
アサーション用ファイルとして
- SVA ファイル ( アサーション記述のモジュール )
- bind ファイル ( SVA のモジュールを rtl に接続する記述 )
- bind リスト ( bind ファイルを インクルードする為の リスト )
- bind ファイルのインクルード
テストベンチに 上 の bind リスト を インクルードする。 - プロジェクトファイル (vlog.prj) 修正
vlog.prj に SVA ファイル を追加する。
SVA 適用例:
SVA 適用例を以下に示す。- テストベンチ ( Vivado の コマンドラインでのシミュレーション環境からの差分 )
end // include test patteern ------------ `include "tp.sv" // include assertion bind list ------- `include "./assertion/bind.list" endmodule
- bind リスト
`include "./assertion/bind_sva.sv"
bind ファイルのインクルード文を記述する。
- bind ファイル
bind testbench.i_plsgen sva_1 i_sva_1( .clk (clk), .clr (clr), .start (pls_start), .en (plsen), .outpls (output_pls) ) ; bind testbench.i_plsgen sva_2 i_sva_2( .clk (clk), .clr (clr), .start (pls_start), .en (plsen), .outpls (output_pls) ) ;
ここでは、 2つのアサーションファイルをバインドしている。
それぞれ RTL (i_plsgen) にバインド
testbench には バインドできない ?
- SVA ファイル
アサーションファイルを以下に示す。
尚、アサーションの適不適は不問とする。
( RTL は パルス生成回路 )// ----------------------------------------------------- // Sample module // // Module Name : sva_1 // Version : 0.00 // ----------------------------------------------------- module sva_1 ( clk, clr, start, en, outpls) ; input clk ; input clr ; input start ; input en ; input outpls ; // sequence description ---------------- sequence S1 ; outpls[*4] ##1 !outpls[*5] ; endsequence // property description --------------- property p_test1 ; @(posedge clk ) disable iff(clr) $rose(start) |-> ##1 S1[*6] ; endproperty // assertion description a_test1 : assert property ( p_test1 ) ; endmodule
sva_1 は、 start 信号の立ち上がりの次クロックから、"H 4サイクル, L 5サイクル"のシーケンスを 6回繰り返すことをチェックする。
// ----------------------------------------------------- // Sample module // // Module Name : sva_2 // Version : 0.00 // ----------------------------------------------------- module sva_2 ( clk, clr, start, en, outpls) ; input clk ; input clr ; input start ; input en ; input outpls ; // sequence description ---------------- sequence S1 ; outpls[*4] ##1 !outpls[*5] ; endsequence // property description --------------- property p_test2 ; @(posedge clk ) disable iff(clr) $rose(start) |-> ##1 S1[*6] |-> ##1 $fell(en) ; endproperty // assertion description --------------- a_test2 : assert property ( p_test2 ) ; endmodule
sva_2 は、 start 信号の立ち上がりの次クロックから、"H 4サイクル, L 5サイクル"のシーケンスを 6回繰り返した後、次サイクルで en が 立ち下がることをチェックする。
尚、sva_1, sva_2 の 2ファイルに分ける必要は無いが (通常は 1つのファイル(モジュール) に a_test1 と a_test2 の 両方を記述する) 、サンプルの為 2つのファイルに分けている。
- プロジェクトファイル (vlog.prj)
verilog xil_defaultlib \ "./rtl/plsgen.v" \ "./rtl/D_CNT.v" \ sv xil_defaultlib \ "./testbench/testbench.sv" \ "./testbench/param.sv" \ "./assertion/sva_1.sv" \ "./assertion/sva_2.sv" \ verilog xil_defaultlib "/tools/Xilinx/Vivado/2020.1/data/verilog/src/glbl.v"
プロジェクトファイルに sva_1.sv, sva_2.sv を追加する。
SVA 適用結果:
SVA 適用後の シミュレーション実行結果を以下に示す。****** xsim v2020.1 (64-bit) **** SW Build 2902540 on Wed May 27 19:54:35 MDT 2020 **** IP Build 2902112 on Wed May 27 22:43:36 MDT 2020 ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved. source xsim.dir/test_1/xsim_script.tcl # xsim {test_1} -autoloadwcfg -runall Vivado Simulator 2020.1 Time resolution is 1 ps run -all ERROR: Assertion failed. Time: 1140 ns Started: 220 ns Scope: /testbench/i_plsgen/i_sva_1 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_1.sv Line:28 ERROR: Assertion failed. Time: 3580 ns Started: 2480 ns Scope: /testbench/i_plsgen/i_sva_2 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_2.sv Line:28 $finish called at time : 3841 ns : File "/mnt/d/UserData/hobby/logic/study/test3/testbench/tp.sv" Line 42 exit INFO: [Common 17-206] Exiting xsim at Sun Aug 16 15:08:32 2020...この時の波形
テストパターンは、3回 パルスを生成。
1回目は "H" 4 クロック, "L" 5クロック を 5回繰り返し
6回目の"H" が無い為、a_test1 が Fail
a_test2 は 6回目 の "H" が無く 前提部が不成立の為、発火しない。(Fail しない)
2回目は H4 クロック, L5クロック を 6回繰り返し
a_test1, a_test2 共に 発火し、Pass。
3回目は H4 クロック, L5クロック を 7回繰り返し
6回目の "H" がある為、a_test1 は発火し、Pass
6回目の "H"→"L" の後 7回目が開始し、en (plsen) が 立ち下がらない為、Fail
期待通り、1回目, 3回目 のパルス生成で Fail し、エラー出力されている。
発火確認:
上の結果では、Fail した場合は ERROR 表示されるが、Fail しない場合は 何も表示されない。この為、Pass したのか 発火しなかったのかの区別がつかない。
発火した場合に表示する様に SVA ファイルを修正してみる。
// assertion description a_test1 : assert property ( p_test1 ) $display("a_test1 : OK") ; endmodule
// assertion description --------------- a_test2 : assert property ( p_test2 ) $display("a_test2 : OK") ; endmoduleassert文 に 処理 ($display 等) を追加する。
処理追加後の結果は下の通り。
****** xsim v2020.1 (64-bit) **** SW Build 2902540 on Wed May 27 19:54:35 MDT 2020 **** IP Build 2902112 on Wed May 27 22:43:36 MDT 2020 ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved. source xsim.dir/test_1/xsim_script.tcl # xsim {test_1} -autoloadwcfg -runall Vivado Simulator 2020.1 Time resolution is 1 ps run -all ERROR: Assertion failed. Time: 1140 ns Started: 220 ns Scope: /testbench/i_plsgen/i_sva_1 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_1.sv Line:28 Time: 2340 ns Started: 1260 ns Scope: /testbench/i_plsgen/i_sva_1 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_1.sv Line:28 a_test1 : OK Time: 2360 ns Started: 1260 ns Scope: /testbench/i_plsgen/i_sva_2 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_2.sv Line:28 a_test2 : OK Time: 3560 ns Started: 2480 ns Scope: /testbench/i_plsgen/i_sva_1 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_1.sv Line:28 a_test1 : OK ERROR: Assertion failed. Time: 3580 ns Started: 2480 ns Scope: /testbench/i_plsgen/i_sva_2 File: /mnt/d/UserData/hobby/logic/study/test3/assertion/sva_2.sv Line:28 $finish called at time : 3841 ns : File "/mnt/d/UserData/hobby/logic/study/test3/testbench/tp.sv" Line 42 exit INFO: [Common 17-206] Exiting xsim at Sun Aug 16 16:19:29 2020...
実行結果は、
1回目 (started: 220nS) は a_test1 Fail し、a_test2 は発火なし。
2回目 (started: 1260nS) は a_test1, a_test2 共に発火し、Fail なし。
3回目 (Started: 2480nS) は a_test1 は発火して Failなし, a_test2 は Fail。
となり、発火したことを確認できる。
できれば、波形に 表示されるといいのだが、、、
→ 表示案 : Vivado で SVA(アサーション) を試す 2
0 件のコメント:
コメントを投稿