Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

UVM 1.0 : examples/integrated/codec (その1)


UVM 1.0の例題のうち、examples/integratedディレクトリにあるものについて説明していきます。

今回は、code です。このディレクトリには、説明用のブロック図(block_diagram.pdf)があります。

DUTは、APBと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)の制御をしているだけです。

では、どこで、run_test()が実行されているのでしょうか?

検証、Verification、SystemVerilog、UVM、Unified Verification Methodology