在soc验证中,缩短通过总线配置subsys寄存器时间的方法

使用场景:在soc验证中,很多需要通过cpu通过总线路由去配制寄存器,这个过程非常耗时,特别是当subsys有很多寄存器需要配置的时候,非常痛苦。下面介绍一种大大缩短配置寄存器时间的方法:

task apb_force_write(input reg [31:0] paddr, input reg [31:0] pwdata);

    // force apb signals
    @(posedge p_sequencer.vc0_vpss_aclk);
    uvm_hdl_force("SUBSYS_PATH.psel_s0`", 1);
    uvm_hdl_force("SUBSYS_PATH.pwrite_s0`", 1);
    // uvm_hdl_force("SUBSYS_PATH.pstrb_s0`", 4'hf);
    uvm_hdl_force("SUBSYS_PATH.paddr_s0`", paddr);
    uvm_hdl_force("SUBSYS_PATH.pwdata_s0`", pwdata);
    @(posedge p_sequencer.vc0_vpss_aclk);
    uvm_hdl_force("SUBSYS_PATH.penable_s0`", 1);
    // wait for pready
    do begin
        @(posedge p_sequencer.vc0_vpss_aclk);
    end while (p_sequencer.vc0_vpss_pready == 0);
    // release apb signals
    uvm_hdl_release("SUBSYS_PATH.psel_s0`");
    uvm_hdl_release("SUBSYS_PATH.pwrite_s0`");
    uvm_hdl_release("SUBSYS_PATH.pwdata_s0`");
    uvm_hdl_release("SUBSYS_PATH.penable_s0`");
    uvm_hdl_release("SUBSYS_PATH.paddr_s0`");
    $display("[WRITE_REG], addr = %h, data = %h",paddr,pwdata);

endtask

task apb_force_read(input reg [31:0] paddr, output reg [31:0] prdata);
    @(posedge p_sequencer.vc0_vpss_aclk);
    uvm_hdl_force("SUBSYS_PATH.paddr_s0`",paddr);
    uvm_hdl_force("SUBSYS_PATH.pwrite_s0`",0);
    uvm_hdl_force("SUBSYS_PATH.psel_s0`"  ,1);
    @(posedge p_sequencer.vc0_vpss_aclk);
    uvm_hdl_force("SUBSYS_PATH.penable_s0`",1);
    @(posedge p_sequencer.vc0_vpss_aclk);
    while(p_sequencer.vc0_vpss_pready==0)begin
        @(posedge p_sequencer.vc0_vpss_aclk);
    end
    uvm_hdl_force("SUBSYS_PATH.paddr_s0`"  ,0);
    uvm_hdl_force("SUBSYS_PATH.psel_s0`"   ,0);
    uvm_hdl_force("SUBSYS_PATH.penable_s0`",0);
    prdata = p_sequencer.vc0_vpss_prdata;
    uvm_hdl_release("SUBSYS_PATH.paddr_s0`"  );
    uvm_hdl_release("SUBSYS_PATH.psel_s0`"   );
    uvm_hdl_release("SUBSYS_PATH.penable_s0`");
    uvm_hdl_release("SUBSYS_PATH.pwdata_s0`");
    uvm_hdl_release("SUBSYS_PATH.pwrite_s0`");
    $display("[READ_REG], addr = %h, data = %h",paddr,prdata);
end

只需要将信号按照apb的时序force到寄存器的入口就可以,可以缩短99%的时间,这里的SUBSYS.PATH 就是subsys寄存器入口的hierarchy。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值