UVM 1.0の例題のうち、examples/integratedディレクトリにあるものについて説明していきます。
今回は、code です。このディレクトリには、説明用のブロック図(block_diagram.pdf)があります。
DUTは、APBとVIPに接続されています。
APBは、examples/integrated/apbディレクトリのものを
VIPは、examples/integrated/codec/vipディレクトリのものを使います。
APBは、examples/integrated/apbディレクトリのものを
VIPは、examples/integrated/codec/vipディレクトリのものを使います。
トップテストベンチは、tb_top.svで、
module tb_top;
reg clk, sclk;
wire rst;
wire tx, rx;
wire intr;
tb_ctl_if ctl(clk, sclk, rst, intr);
apb_if apb0(clk);
vip_if vip0(sclk, rx, tx);
dut dut0(tx, rx, sclk, apb0, intr, clk, rst);
initial begin
// Clk & rst start at x
// Rst resolves first
#100 ctl.rst = 1'b1;
// then clocks
#200;
clk = 1'b0;
sclk = 1'b0;
// the clocks eventually toggles
// but it is up to the environment to release rst
#500;
fork
forever begin
#50 clk = 1'b1;
#50 clk = 1'b0;
end
#4 forever begin
#250 sclk = 1'b1;
#250 sclk = 1'b0;
end
join_none
end
endmodule
tb_ctl_if_ctlインターフェースのインスタンスctl、
apb_ifインターフェースのインスタンスapb0、
vip_ifインターフェースのインスタンスvip0、
と
dutモジュールのインスタンスdut0だけであり、
initial文内では、リセット(ctl.rst)とクロック(clk/sclk)の制御をしているだけです。
apb_ifインターフェースのインスタンスapb0、
vip_ifインターフェースのインスタンスvip0、
と
dutモジュールのインスタンスdut0だけであり、
initial文内では、リセット(ctl.rst)とクロック(clk/sclk)の制御をしているだけです。
では、どこで、run_test()が実行されているのでしょうか?
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology