У меня есть следующий интерфейс и 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
введите описание изображения здесь