上传者: 26717681
|
上传时间: 2022-05-21 11:18:47
|
文件大小: 4.72MB
|
文件类型: PDF
18.2、模型的建立
454 如果发现错误,或有建议,请联系 zhangqiang1227@gmail.com
18.2. 模型的建立
18.2.1. 把 uvm_reg_field 加入到 uvm_reg 中
以例子来进行介绍当把 uvm_reg_field 加入到 uvm_reg 中时,系统内部都做了哪
些工作:
class my_reg extends uvm_reg;
rand uvm_reg_field data;
virtual function void build();
data = uvm_reg_field::type_id::create("data");
// parameter: parent, size, lsb_pos, access, volatile, reset value, has_reset, is_rand, indivi
dually accessible
data.configure(this, 16, 0, "RW", 1, 0, 1, 1, 0);
endfunction
`uvm_object_utils(my_reg)
function new(input string name="unnamed_my_reg");
//parameter: name, size, has_coverage
super.new(name, 16, UVM_NO_COVERAGE);
endfunction
endclass
这个例子是前面中出现的一个例子,首先来看 new函数,调用了 uvm_reg的 new,
传入了三个参数,分别是 name,16 和 UVM_NO_COVERAGE。uvm_reg 的 new 函
数为:
文件:src/reg/uvm_reg.svh
类:uvm_reg
函数/任务:new
1151 function uvm_reg::new(string name="", int unsigned n_bits, int has_coverage);
1152 super.new(name);
1153 if (n_bits == 0) begin
1154 `uvm_error("RegModel", $sformatf("Register \"%s\" cannot have 0 bits", get_name
()));
1155 n_bits = 1;
1156 end
1157 m_n_bits = n_bits;
1158 m_has_cover = has_coverage;
1159 m_atomic = new(1);
1160 m_n_used_bits = 0;
1161 m_locked = 0;
1162 m_is_busy = 0;
1163 m_is_locked_by_field = 1'b0;