Testbench_Testbench/Blocklevel

上一篇 / 下一篇  2018-09-10 16:39:12

        作为块级测试平台的一个例子,我们将考虑构建一个用于验证SPI Master DUT的测试平台。在这种例子里,UVM environment有两个agent - 一个用于处理其在APB slave端口上进行的总线传输,以及一个用于在其SPI端口上处理SPI协议传输的SPI agent。整个UVM验证环境的结构在框图中说明。我们将遍历测试平台的每一层,并描述它是如何从上到下组合在一起的。

        【此处需一副图】

        The Test Bench Module

        顶层测试平台模块用于封装SPI Master DUT并将其连接到apb_if和spi_if SystemVerilog接口。还有一个initia块,它为APB接口产生一个时钟和一个复位信号。在测试平台的initial块中,使用uvm_config_db :: set将APB,SPI和INTR(中断)虚拟接口的句柄传入UVM顶层配置空间。然后调用run_test()方法 - 这会导致指定的test被构造并开始启动处理UVM phases。

        module top_tb;

        `include "timescale.v"

        import uvm_pkg::*;

        import spi_test_lib_pkg::*;

        // PCLK and PRESETn
        //
        logic PCLK;
        logic PRESETn;

        //
        // Instantiate the interfaces:
        //
        apb_if APB(PCLK, PRESETn); // APB interface
        spi_if SPI(); // SPI Interface
        intr_if INTR(); // Interrupt

        // DUT
        spi_top DUT(
           // APB Interface:
           .PCLK(PCLK),
           .PRESETN(PRESETn),
           .PSEL(APB.PSEL[0]),
           .PADDR(APB.PADDR[4:0]),
           .PWDATA(APB.PWDATA),
           .PRDATA(APB.PRDATA),
           .PENABLE(APB.PENABLE),
           .PREADY(APB.PREADY),
           .PSLVERR(),
           .PWRITE(APB.PWRITE),
            // Interrupt output
           .IRQ(INTR.IRQ),
           // SPI signals
           .ss_pad_o(SPI.cs),
           .sclk_pad_o(SPI.clk),
           .mosi_pad_o(SPI.mosi),
           .miso_pad_i(SPI.miso)
        );

       // UVM initial block:
       // Virtual interface wrapping & run_test()
       initial begin
          uvm_config_db #(virtual apb_if)::set( null , "uvm_test_top" , "APB_vif" , APB);
          uvm_config_db #(virtual spi_if)::set( null , "uvm_test_top" , "SPI_vif" , SPI);
          uvm_config_db #(virtual intr_if)::set( null , "uvm_test_top" , "INTR_vif", INTR);
       run_test();

       end

       //
       // Clock and reset initial block:
       //
       initial begin
          PCLK = 0;
          PRESETn = 0;
          repeat(8) begin
               #10ns PCLK = ~PCLK;
          end
          PRESETn = 1;
          forever begin
              #10ns PCLK = ~PCLK;
          end
       end

       endmodule: top_tb


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-09-23  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

我的存档

数据统计

  • 访问量: 4336
  • 日志数: 31
  • 建立时间: 2018-09-03
  • 更新时间: 2018-09-21

RSS订阅

Open Toolbar
博评网