uvm_monitor - не правильно сэмплирует.Где я не прав? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующий интерфейс и uvm_monitor (run_phase, показанный ниже).

Сигналы проверяемого устройства иногда обозначаются буквой "х".Когда я печатаю сигналы, на моем мониторе они записываются как «х».Отлично.

Далее сигналы DUT показывают действительное значение (в первый раз).Когда я печатаю сигналы, на моем мониторе они записываются как с допустимыми значениями.Отлично.

Затем DUT обновляет все три сигнала до следующего значения, и на отметке времени 134 mirror_byte_wr_en остается равным 0, но ожидается, что оно будет равно 0xffff. .

Есть идеи, почему?Цените ваши мысли и вклад.

Пример выходных данных из журнала:

UVM_INFO snp_decomp_snpd_egress_monitor.sv (65) @ 122: uvm_test_top.m_snp_decomp_env.snpd_egress [0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_data = 0x00006c61776e694720616669617a7548

UVM_INFO snp_decomp_snpd_egress_monitor.sv (71) @ 122: uvm_test_top.m_snp_decomp_env.snpd_egress [0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_byte_wr_en = 0xffff

UVM_INFO snp_decomp_snpd_egress_monitor.sv (76) @ 122: uvm_test_top.m_snp_decomp_env.snpd_egress[0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_wr_addr = 0x00000

* * UVM_INFO тысяча двадцать-один snp_decomp_snpd_egress_monitor.sv (65) @ 134: uvm_test_top.m_snp_decomp_env.snpd_egress [0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_data = 0x3c10xxxxxxxxxxxxxxxx616c00000000 * * * тысяча двадцать два 1023 * UVM_INFOsnp_decomp_snpd_egress_monitor.sv (71) @ 134: uvm_test_top.m_snp_decomp_env.snpd_egress [0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_byte_wr_en =
0x0000 * ** 1026 тысячи двадцать пять * * * UVM_INFO тысячи двадцать-семь snp_decomp_snpd_egress_monitor.sv (76) @ 134: uvm_test_top.m_snp_decomp_env.snpd_egress [0] .m_monitor [snp_decomp_snpd_egress_monitor] mirror_wr_addr = 0x00010
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

введите описание изображения здесь

1 Ответ

0 голосов
/ 21 декабря 2018

Это правильное поведение, поскольку значения выборки в тактовом блоке были взяты из предыдущего тактового цикла.Это зависит от семантики шага времени SystemVerilog.

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.С наилучшими пожеланиями, Максим.

...