初歩からのHDLテストベンチ 初歩からのHDLテストベンチ

初歩からのHDLテストベンチ
第 3 回 絶対遅延とソフトウェア風テストベンチの文法
安岡貴志
ビギナーズ
デバイスの記事
HDL で回路を記述できるようになったばかりで、これからテ
文法を,それこそ C 言語によるソフトウェア・プログラム
ストベンチを書こうとしてる方を対象とした連載の第 3 回であ
のように使えると言いました.今回はその中から for 文に
る.始めに絶対時間で遅延を記述する方法を解説し,サンプ
よるループ表現を説明します.
ル回路の検証事例をもとに,遅延の効率的な記述法を説明す
る.
(筆者)
1.相対遅延と絶対遅延
前回(本誌 2007 年 8 月号,pp.116-124)まではテスト入力
相対遅延とは,前の信号の変化から何 ns で代入を実行す
(検証対象回路の入力ポートに与える信号)を作るのに相対
るというように,遅延を相対関係で表現する手法です[図
遅延を使っていました.今回は絶対遅延による表現を解説
1(a)].前回までのテストベンチはすべてこの手法で書い
します.また,第 1 回(本誌 2007 年 5 月号,pp.70-79 の特
てきました.これに対して絶対遅延とは,シミュレーショ
第 4 章編集部注)で,テストベンチでは HDL のすべての
ン開始時点(シミュレーション時間 0)から何 ns で代入する
集1
というような,絶対時間で表現する手法です[図 1(b)
].
0ns
100ns
100ns後に
SA=1
200ns
100ns後に
SA=0
300ns
400ns
ここでは,第 1 回で示した図 2 の仕様をもつ検証対象の
回路に対して,図 3(a)のテストベンチから,図 3(b)の信
100ns後に
SA=1
号 SA と信号 SB のようなテスト入力を与える記述法を,相
対遅延,絶対遅延を使って解説します.
信号SA
(a)遅延を前の信号の変化からの相対遅延で表現
0ns
100ns
200ns
300ns
400ns
編集部注:本連載の第 1 回は,本誌 2007 年 5 月号,pp.70-79 の特集 1 第 4 章
「テストベンチの書き方を身に付ける」として掲載した.
300ns後にSA=1
200ns後にSA=0
100ns後にSA=1
A
B
and_comb Y
信号SA
(a)ブロック図
(b)遅延をシミュレーション開始時からの絶対遅延で表現
図1
遅延の表現
前の信号の変化からの相対関係で表現する相対遅延と,常に開始時点からの
時間で表現する絶対遅延がある.
KeyWord
図2
A
B
Y
0
0
0
1
0
0
0
1
0
1
1
1
ポートA,Bへの
入力信号が
いすれも‘0’
のとき
ポートYからの
出力信号は‘0’
(b)真理値表
検査対象の回路
回路の名前は,and-comb である.1 ビットの入力ポートA,B と1 ビッ
トの出力ポート Y を持つ.記憶素子(フリップフロップなど)を含まな
い組み合わせ回路である.
テストベンチ,テスト入力,絶対時間,相対時間,fork,wait,after,assert 文,エンコーダ,for 文
Design Wave Magazine 2007 October 123
Verilog HDL
積しません.それぞれの式がシミュレーション開始時から
リスト 1(a)は,第 1 回で示したテスト入力の記述例で
す.ここで記述された信号 SA,SB の変化のタイミングは
図 3(b)と同じです注 1.
独自の遅延値に従って並行に実行されます.つまり,各式
の遅延値は絶対遅延となります.
リスト2 は,リスト1 とまったく同じ変化タイミングで信
リスト 1(b)は,リスト 1(a)の記述を 1 行当たり一つの
号 SA と SB のテスト入力を記述したものです.各代入式の
式だけの記述に直したものです.式の実行タイミングは,
# に続く遅延値は絶対遅延となり,式の間で累積しません.
式の間の相対遅延で記述されています.図 4 のように,
begin ∼end の間に記述された式は上から順番に実行され,
その間の遅延は累積されます(式 2 は必ず式 1 の後に実行さ
れ,式 3 は必ず式 2 の後に実行される)
.
VHDL
リスト 3(a)は,第 1 回で示したテスト入力の記述例で
す.ここで記述された信号SA,SB の変化のタイミングは,
図 5 は fork ∼ join という文法の書式を表しています.
fork ∼ join は,begin ∼ end と違い,式の間で遅延は累
図 3 と同じです.
リスト3(b)は,リスト3(a)の記述を1 行当たり一つの式
だけの記述に直したものです.式の実行タイミングは,wait
文ごとに累積する相対遅延で記述されています.図6 のよう
and_comb_tb
(テストベンチ)
に,wait 文を使った記述では,式 2 は式 1 実行後,間の
テスト入力生成
wait 文で指定した遅延経過後に実行され,式 3 は式 2 実行
SA
A
SB
B
and_comb
(検証対象)
Y
注 1 本稿の Verilog HDL のすべての解説では,シミュレータのシミュレー
ション時間の単位が,ns に設定されているものとして解説しています.
リスト1
Verilog HDL によるAND 回路のテストベンチ
(a)ブロック図
0ns
100ns
200ns
300ns
400ns
信号SA
initial begin
SA = 0; SB
#100 SA = 1; SB
#100 SA = 0; SB
#100 SA = 1; SB
#100 $finish;
end
信号SB
=
=
=
=
0;
0;
1;
1;
(a)記述例 1
信号SY
(b)タイミング・チャート
図3
AND 回路の検証
(a)のようなテストベンチから,(b)のテスト入力を与える.
initial begin
initial begin
SA = 0;
SB = 0;
#100 SA = 1;
SB = 0;
#100 SA = 0;
SB = 1;
#100 SA = 1;
SB = 1;
#100 $finish;
end
式1
begin ∼end の間の式は,上から順に実行さ
れ,遅延が累積する.
0
0
100
100
200
200
300
300
400
ns
ns
ns
ns
ns
ns
ns
ns
ns
累積
式4
end
リスト2
式1
図5
Verilog HDL による絶対遅延の書式
124 Design Wave Magazine 2007 October
シミュレーション時間
ns
ns
ns
ns
ns
ns
ns
ns
ns
(b)記述例 2
式3
initial fork
fork ∼join の間の式は,シミュレーション開
始時点からの独自の遅延値に従って並行し
て実行され,式の間で遅延は累積しない.
0
0
100
0
100
0
100
0
100
同じ値を与えているので,なくても一緒
式2
図4
Verilog HDL による相対遅延の書式
遅延値
式2
式3
式4
join
Verilog HDL による絶対遅延を使ったテストベンチ
initial fork
SA = 0;
#100 SA = 1;
#200 SA = 0;
#300 SA = 1;
SB = 0;
#200 SB = 1;
#400 $finish;
join
遅延値
0
100
200
300
0
200
400
ns
ns
ns
ns
ns
ns
ns
シミュレーション時間
同じ
0
100
200
300
0
200
400
ns
ns
ns
ns
ns
ns
ns
累積
しない