首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uvm_monitor -没有正确的样本。我哪里错了?

uvm_monitor -没有正确的样本。我哪里错了?
EN

Stack Overflow用户
提问于 2018-10-22 02:51:18
回答 1查看 317关注 0票数 0

我有下面的接口和uvm_monitor (run_phase如下所示)。

DUT信号有一段时间是"x“。当我在显示器上打印信号时,它们被捕获为"x“。太棒了。

接下来,DUT信号显示一个有效值(第一次)。当我在显示器上打印信号时,它们会被捕获为有效值。太棒了。

接下来,DUT将所有三个信号更新为下一个值,在时间戳134时,mirror_byte_wr_en 仍为0,但预期为0 0xffff.

知道吗,为什么?感谢你的想法和投入。

日志的示例输出:

uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor UVM_INFO snp_decomp_snpd_egress_monitor.sv(65) @ 122: snp_decomp_snpd_egress_monitor mirror_data = 0x00006c61776e694720616669617a7548 uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor UVM_INFO snp_decomp_snpd_egress_monitor.sv(71) @ 122: snp_decomp_snpd_egress_monitor mirror_byte_wr_en = 0xffff uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor UVM_INFO snp_decomp_snpd_egress_monitor.sv(76) @ 122: snp_decomp_snpd_egress_monitor mirror_wr_addr = 0x00000 uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor UVM_INFO snp_decomp_snpd_egress_monitor.sv(65) @ 134: snp_decomp_snpd_egress_monitor mirror_data =0x3c10xxxxxxxxxxxx616c00000000 uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor UVM_INFO snp_decomp_snpd_egress_monitor.sv(71) @ 134: snp_decomp_snpd_egress_monitor mirror_byte_wr_en = 0x0000 uvm_test_top.m_snp_decomp_env.snpd_egress.m_monitor snp_decomp_snpd_egress_monitor.sv(76) @ 134: UVM_INFO snp_decomp_snpd_egress_monitor mirror_wr_addr = 0x00010

代码语言:javascript
复制
enter code here
task run_phase(uvm_phase phase);
    snp_decomp_snpd_egress_transaction tr; 
    tr = snp_decomp_snpd_egress_transaction ::type_id::create("tr");
    forever begin
      @(vif.egress.egress_cb);
      fork
        begin
//          @ (vif.egress.egress_cb);
          tr.mirror_data = vif.egress.egress_cb.mirror_wr_data;
          `uvm_info(get_type_name(),$sformatf("mirror_data = 0x%x\n", vif.egress.egress_cb.mirror_wr_data),UVM_LOW); 
        end

        begin
//          @ (vif.egress.egress_cb);
          tr.mirror_wr_byte_en = vif.egress.egress_cb.mirror_byte_wr_en;
          `uvm_info(get_type_name(),$sformatf("mirror_byte_wr_en = 0x%x\n", vif.egress.egress_cb.mirror_byte_wr_en),UVM_LOW); 
    end
    begin
//          @ (vif.egress.egress_cb);
          tr.mirror_wr_addr = vif.egress.egress_cb.mirror_wr_addr;
          `uvm_info(get_type_name(),$sformatf("mirror_wr_addr = 0x%x\n", vif.egress.egress_cb.mirror_wr_addr),UVM_LOW); 
    end
      join
   end
endtask : run_phase




interface snp_decomp_snpd_egress_intf(input logic clock, input logic reset);



  logic [127:0] mirror_wr_data;
  logic [15:0]  mirror_byte_wr_en;
  logic  [18:0] mirror_wr_addr;


  modport DUT (

    input   clock,
    input   reset,          


    output  mirror_wr_data,
    output  mirror_byte_wr_en,
    output  mirror_wr_addr

    );  // modport DUT

  clocking  egress_cb @(posedge clock);


    input  mirror_wr_data;
    input  mirror_byte_wr_en;
    input  mirror_wr_addr;


  endclocking:  egress_cb

  modport  egress(clocking  egress_cb);

endinterface : snp_decomp_snpd_egress_intf

在这里输入图像描述

EN

回答 1

Stack Overflow用户

发布于 2018-12-21 11:38:15

这是正确的行为,因为时钟块中的样本值是从前一个时钟周期中提取的。它依赖于SystemVerilog的时间步长语义。

代码语言:javascript
复制
begin
  @(vif.egress.egress_cb);
  `uvm_info(get_type_name(), $sformatf("mirror_byte_wr_en: value from previous cycle - 'h%0h, value from current cycle - 'h%0h",
                                        vif.egress.egress_cb.mirror_byte_wr_en, vif.egress.mirror_byte_wr_en), UVM_LOW)
end

为了充分理解- LRM 14.13。向你问好马克西姆。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52921811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档