1. 在filed的configure第八个参数设为1. 2. filed为rand类型。 3. filed的读写类型为可写的。 2. 任务 2.1 update 1 2 3 4 5 6 7 8 virtual task update( output uvm_status_e status, input uvm_path_e path = UVM_DEFAULT_PATH, input uvm_reg_map map = null, input uvm_sequence_base ...
通过后门访问方式写入寄存器的值,不关心DUT的行为,即使寄存器的读写类型是不能写,也可以将值写进去。 对于write clear类型的filed,poke操作不会clear,所以有的时候poke和write操作结果不一样。
其中field automatic常用函数如下:(其中最长用的有print、copy、compare) 与factory机制类似,filed机制也需要先注册,再使用。但是与factory不同的是,filed机制需要被一组begin...end的宏包起来。 Object `uvm_object_utils_begin `uvm_object_utils_end Component `uvm_component_utils_begin `uvm_component_utils_end...
也就是说当uvm_object/uvm_component中中包含了uvm_component类型的对象时,如果使用了`uvm_filed_object宏注册该对象,由于uvm中copy默认做的都是深拷贝(uvm_object_defines.svh的720行),那么该uvm_component对象在copy的时候就会被深拷贝一份新的内容,这个在uvm中是不允许的,因为我们将uvm树形结构时讲到了每个树型...
`uvm_filed_enum(color_t, color, UVM_ALL_ON) `uvm_filed_string(name, UVM_ALL_ON) `uvm_object_utils_end //域的自动化的相关宏都是'uvm_field_{int, object, string, enum, event, real...}(ARG, FLAG), ARG表示成员变量,FLAG表示用来标记的数据操作。
uvm_object中实现了print,sprint等函数,实现调度接口,调度status_container和do_function; status_container中的function在进行filed注册的时候,被实现出来; do_print等函数,留下对用户的hook; 不调用filed macros的class,需要在自己内部实现; 这样所有的extend的class,都包含这些general的一些function; ...
一般设置default_map.set_auto_predict(1);,这样当寄存器访问结束时,会调用do_predict,自动更新uvm_reg_filed中的三个变量值。 // uvm_reg.svh // do_write task uvm_reg::do_write (uvm_reg_item rw); ... // EXECUTE WRITE... case(rw.path) /...
do_print – 该方法是用户可自定义的钩子,print和sprint里调用了这个钩子,允许用户来定制,除`uvm_filed_*宏提供的域信息之外,还要打印哪些信息。printer参数是策略对象,决定输出的格式和内容。为确保print和sprint正确执行,确保输出格式统一,所有do_print实现中都必须使用printer参数。也就是说,跟使用$display或者直接拼...
ralgen不会生成field的抽象类。 每个field对应一个uvm_ral_field类的实例。 这个类的实例(对象)在它所属的register和这个register所属的block里 filed类的实例存储在对filed类进行例化的reg类和对这个reg进行例化的block类的属性中。 Registers 对每个定义的reg生成一个抽象类: ...
虚拟filed和虚拟register可以通过在一个RAL memory上逻辑覆盖来创建,使得它们可以被访问,就好像他们是物理上真正存在的field和register一样。memory本身的RAL模型仍然可用于直接访问,而不管它是否包含了虚拟结构。 这里有个图 虚拟register总是数组并与memory关联:静态(比如 在RALF文件里指定)或者动态(比如 通过用户的代码...