Testbench/IntegrationLevel

上一篇 / 下一篇  2018-09-11 19:48:44

        该测试平台示例采用两个块级验证环境,并说明如何在更高的集成级重用它们。示例中说明的原则适用于多次重复的垂直重用。
       该示例采用SPI块级示例,并将其与GPIO DUT的另一个块级验证环境集成。这两个blocks的硬件已集成到外设子系统(PSS)中,该子系统使用AHB到APB总线桥接器与SPI和GPIO block上的APB接口连接。来自块级的环境由pss_env封装,pss_env还包括用于驱动外部的AHB总线接口的AHB agent。在此配置中,不再公开块级APB总线接口,因此APB agent被置于passive模式以监视APB 传输。激励需要驱动AHB接口,并且寄存器分层使得能够在集成级别重用块级激励。

       【此处需一幅图】

        我们现在将从顶层向下完成测试平台和构建过程,从顶层测试module开始。

        Top Level Test Bench Module

       与块级测试平台示例一样,顶层测试平台模块用于封装DUT,且将接口连接到DUT信号引脚,然后在调用run_test()之前将虚拟接口容器设置在配置空间中。此代码与块级测试平台代码之间的主要区别在于有了澳门皇冠APP接口,还需要绑定到某些内部信号以监控APB总线。DUT由一个模块包含着,该模块将其I / O信号连接到UVM测试平台中使用的接口。使用binder模块将内部信号绑定到APB接口:

        module top_tb;

        import uvm_pkg::*;
        import pss_test_lib_pkg::*;

        // PCLK and PRESETn
        //
        logic HCLK;
        logic HRESETn;

        //
        // Instantiate the interfaces:
        //
        apb_if APB(HCLK, HRESETn); // APB interface - shared between passive agents
        ahb_if AHB(HCLK, HRESETn); // AHB interface
        spi_if SPI(); // SPI Interface
        intr_if INTR(); // Interrupt
        gpio_if GPO();
        gpio_if GPI();
        gpio_if GPOE();
        icpit_if ICPIT();
        serial_if UART_RX();
        serial_if UART_TX();
        modem_if MODEM();

        // Binder
        binder probe();

        // DUT Wrapper:
        pss_wrapper wrapper(.ahb(AHB),
                                            .spi(SPI),
                                            .gpi(GPI),
                                            .gpo(GPO),
                                            .gpoe(GPOE),
                                            .icpit(ICPIT),
                                            .uart_rx(UART_RX),
                                            .uart_tx(UART_TX),
                                            .modem(MODEM));

         // 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 ahb_if)::set( null , "uvm_test_top" , "AHB_vif" , AHB);
             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);
             uvm_config_db #(virtual gpio_if)::set( null , "uvm_test_top" , "GPO_vif" , GPO);
             uvm_config_db #(virtual gpio_if)::set( null , "uvm_test_top" , "GPOE_vif" , GPOE);
             uvm_config_db #(virtual gpio_if)::set( null , "uvm_test_top" , "GPI_vif" , GPI);
             uvm_config_db #(virtual icpit_if)::set( null , "uvm_test_top" , "ICPIT_vif" , ICPIT);
             uvm_config_db #(virtual serial_if)::set( null , "uvm_test_top" , "UART_RX_vif" , UART_RX);
             uvm_config_db #(virtual serial_if)::set( null , "uvm_test_top" , "UART_TX_vif" , UART_TX);
             uvm_config_db #(virtual modem_if)::set( null , "uvm_test_top" , "MODEM_vif" , MODEM);
             run_test();
        end

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

       // Clock assignments:
       assign GPO.clk = HCLK;
       assign GPOE.clk = HCLK;
       assign GPI.clk = HCLK;
       assign ICPIT.PCLK = HCLK;

       endmodule: top_tb


TAG:

 

评分:0

我来说两句

显示全部

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

日历

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

我的存档

数据统计

  • 访问量: 3343
  • 日志数: 25
  • 建立时间: 2018-09-03
  • 更新时间: 2018-09-19

RSS订阅

Open Toolbar
博聚网