2014-01-27 4 views
1

В мониторе UVM, когда нижеуказанные два оператора добавляются в run_phase, как показано ниже, значение, отобранное в tr.pkt, соответствует data_in. Но если порядок высказывания обратный, tr.pkt выборки неверны ('h0). Кто-нибудь видел это раньше?Монитор UVM ведет себя по-разному на основе последовательности из двух утверждений

tr.pkt.push_back(this.wr_if.mon_clk_blk.data_in); 
`uvm_info("",$sformatf("Write Monitor data = %0h", this.wr_if.mon_clk_blk.data_in), UVM_NONE) 

ответ

0

Скорее всего data_in обновляется в то же время, как шаг казни УВМ montitor в. В планировщике push_back() выполняется в активной области и `uvm_info() происходит в наблюдаемой области. Другой процесс должен был бы обновить data_in в реактивной области или последней запланированной активной области. Реверсированием заказа .push_bach()/`uvm_info() дает возможность другой теме назначить data_in перед повторным входом в активную область для выполнения .push_bach(). Ошибки нулевого времени (например, #0 в дизайне) также могут относиться к неожиданным значениям.

Один из способов гарантировать как .push_bach(), так и `uvm_info() получить такое же значение, чтобы создать временную переменную, которая производит образцы data_in. Пример:

sampled_data = this.wr_if.mon_clk_blk.data_in; 
tr.pkt.push_back(sampled_data); 
`uvm_info("",$sformatf("Write Monitor data = %0h", sampled_data), UVM_NONE) 
+0

Спасибо. Все назначение в дизайне без задержки на позыве часов. Я также попытаюсь добавить интерфейс настройки/удержания в интерфейс, чтобы узнать, помогает ли он. – user3242374

+0

@ Tudor, спасибо за исправление этих опечаток – Greg