UVM:7.6.1 检查后门访问中hdl 路径的sequence

177 篇文章 139 订阅

1.UVM 提供了一系列sequence用于检查寄存器模型及DUT 的寄存器。其中uvm_reg_mem_hdl_paths_seq 检查hdl 路径的正确性。原型为:


此sequence 的运行依赖于在基类uvm_sequence 中定义的一个变量:



2.启动此sequence 时必须给model 赋值。在任意的sequence 中,可以启动此sequence:


1)start 传入的sequencer 为null。因为不依赖这个sequencer,而依赖于model 变量。

2)这个sequence 会试图读取hdl 所指向的寄存器,如果无法读取,报错。

3)还可以检查存储器。

4)如果某个寄存器,存储器在加入寄存器模型时没有指定其hdl 路径,那么检查时会跳过这个寄存器,存储器。


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UVM,如果不使用寄存器模型,可以通过使用UVM提供的其他功能来扫描寄存器。一种常见的方法是使用UVM提供的register_sequence来实现寄存器的扫描操作。 首先,你需要创建一个继承自uvm_sequence类的自定义sequence类,用于定义寄存器扫描的操作序列。在这个自定义sequence,你可以使用UVM提供的register_sequence_item类来定义每个寄存器的扫描操作。 接下来,在你的测试,你需要创建一个继承自uvm_test类的自定义test类,并在其实例化你之前定义的自定义sequence类。然后,你可以在test的run_phase使用uvm_do_with方法来执行寄存器扫描操作。 下面是一个示例代码,演示了如何在UVM实现寄存器的扫描操作: ```systemverilog class my_register_sequence extends uvm_sequence #(uvm_sequence_item); `uvm_object_utils(my_register_sequence) virtual task body(); // 定义寄存器扫描操作 my_register_sequence_item scan_item; scan_item.operation = SCAN; scan_item.address = 0; // 设置寄存器地址 scan_item.data = 0; // 设置扫描数据 // 执行寄存器扫描操作 uvm_do_with(scan_item, {repeat = 10;}); endtask endclass class my_test extends uvm_test; `uvm_component_utils(my_test) my_register_sequence reg_sequence; function new(string name, uvm_component parent); super.new(name, parent); reg_sequence = my_register_sequence::type_id::create("reg_sequence"); endfunction virtual task run_phase(uvm_phase phase); // 执行寄存器扫描操作 reg_sequence.start(null); reg_sequence.wait_for_sequence_state(UVM_FINISHED); endtask endclass // 在你的测试环境实例化my_test类,并运行测试 initial begin my_test test = my_test::type_id::create("test"); run_test("test"); end ``` 通过以上代码,你可以在UVM实现寄存器的扫描操作,而不使用寄存器模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值