uvm_predict_e kind = UVM_PREDICT_DIRECT, uvm_path_e path = UVM_FRONTDOOR, uvm_reg_map map = null, string fname = "", int lineno = 0 ) 更新模型中的镜像值。新的镜像值通过value参数传入。 当在DUT中实现一个计数器的时候,模型中的计数器是静止的。如果想在模型中得到DUT的技术值,这就需要...
predict()方法 适用场景: 验证环境的rgm中缺少mon or predictor 使用后门访问 不适用场景 出现其他一些sequence直接在总线层面对寄存器进行(跳过寄存器的write()/read()) 显示预测 定义 依赖于monitor从物理总线上捕捉总线事务,并将捕捉的事务给例化的predictor 预测步骤 拿到monitor从总线监测到的bus_trans...
5. 内建sequence与高级用法 内建sequence:用于检查寄存器模型和DUT状态。 高级用法:如driver驱动的自动预测和monitor监控的交易更新。6. Mirror与Predict操作 Mirror操作:用于同步DUT和模型。 Predict操作:用于设置参考模型的值,不影响实际DUT。7. 随机化与宏调整 随机化操作:UVM支持从reg_block、reg到...
1.3.3. reg.predict regm.thres.predict('h100); reg的predict本质就是依次去调用其中所有reg_field的predict函数,然后将reg predict参数中的寄存器值分别拆成对应field的predict,传给reg_field.predict。针对UVM_DIRECT_PREDICT,也是一般验证中常用的predict,无论reg的access为甚么类型,都能够直接修改value,m_desired和...
rm.default_map.set_auto_predict(1),如果想要关掉就设置为0。 上图中的左面使用driver的的返回值更新寄存器模型外,还存在另外一种形式,上面右图的形式,这种形式是由monitor将从总线上收集到的transaction交给寄存器模型,后者更新相应寄存器的值。 要使用这种方式更新数据,需要实例化一个reg_predictor,并为这个reg_pred...
7.7 寄存器模型的高级用法 此前曾介绍过寄存器模型通过driver完成前门访问读操作的方式,当driver将读取值返回后,寄存器模型会更新寄存器的镜像值和期望值,这个功能被称为寄存器模型的auto predict功能,可以在建立寄存器模型时使用如下的语句打开 rm.default_map.set_auto_predict(1); ...
使用显式预测,用户必须创建uvm_reg_predictor类的句柄,该类是RAL模型的基类。该预测器类需要与监视器类相连。监视器对发生在接口上的寄存器写/读操作进行采样,并将捕捉到的事务传递给预测器。Predictor类借助适配器将总线事务转换为寄存器事务,然后调用该寄存器的predict方法。
自动预测 (auto prediction):如果读者没有在环境中集成独立的 predictor, 而是利用寄存器的操作来自动记录每一次寄存器的读写数值, 并在后台自动调用 predict()方法的话, 则这种方式称为自动预测。这种方式简单有效, 然而需要注意, 如果出现其他一些sequence 直接在总线层面上,对寄存器进行操作(跳过寄存器级别的 write(...
predict操作会更新镜像值和期望值。 当然可以,以下是两个使用UVM中mirror操作的例子: 1.在仿真中不断调用mirror,使寄存器模型的值和DUT的值一样: 复制代码 class my_test extends uvm_test; my_dut dut; my_reg_model model; `uvm_component_utils(my_test) function new(string name, uvm_component parent)...