我已经在sequencer上启动了一个seq项来生成具有随机约束的seq项,但是生成的项有很多" X"值。这背后的原因可能是什么?
以下是代码:
virtual task run_phase(uvm_phase phase);
begin
uvm_test_done.raise_objection(this,"started sequence");
`uvm_info(get_type_name(),"inside run_phase of base test:\n", UVM_LOW)
fork
#10;
spi_m_seq.start(spi_env_inst.spi_master.spi_sequencer);
#300;
join
uvm_test_done.drop_objection(this,"sequence finished");
end
endtask:run_phase
答案 0 :(得分:2)
SystemVerilog LRM声明约束求解只能处理2值逻辑。这意味着您拥有的任何X都是由于您的类中未初始化的4态逻辑类型。这是我的意思和例子:
package some_package;
class some_class;
rand logic[15:0] field1;
logic[15:0] field2;
function void print();
$display("field1 = %x", field1);
$display("field2 = %x", field2);
endfunction
endclass
endpackage
module top;
import some_package::*;
initial begin
some_class my_obj = new();
my_obj.randomize();
my_obj.print();
end
endmodule
在上面的示例中,两个字段都是逻辑类型(4状态),但只有field1声明为rand。这意味着当my_obj随机化时,约束求解器仅分配此字段。 field2的值将保持16'bx(4状态类型的初始值)。