ee_king的个人空间 https://blog.eetop.cn/1494617 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Testbench_Testbench/Blocklevel

已有 884 次阅读| 2018-9-10 16:39 |系统分类:芯片设计

        作为块级测试平台的一个例子,我们将考虑构建一个用于验证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


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-16 04:04 , Processed in 0.016983 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部