#UVM# 利用 uvm 后门访问硬件代码中的信号

        在老的基于存SV 搭建的验证平台中,testbentch 和 RTL 代码是统一包含在同一个顶层之下,这就方便了我们随时随地的可以操作硬件代码中的信号,读取、赋值、force、@等操作。然而,随着UVM的横空问世,基于UVM 的验证平台成为主流。在基于UVM 的验证case 中,我们难免需要用到读取或者监控RTL 信号的行为,此时,我们就要动动脑筋,到底采取哪种方式,来达到目的。道路千万条,根据不同场合,灵活选取适当方式,会提高代码质量,达到验证目的。

        UVM提供了一种机制,后门访问。它可以方便我们直接对RTL中的信号进行操作,比如赋值,force,release等操作。

在uvm_hdl.svh文件中提供了相关的操作RTL信号函数:

函数

说明

int uvm_hdl_check_path(string path)

path指定的信号,是否存在

返回值:

0:不存在

1:存在

int uvm_hdl_deposit(string path,

uvm_hdl_data_t value)

将path指定的信号,设置为value值

返回值

1:设置成功

0:设置失败

int uvm_hdl_force(string path,

uvm_hdl_data_t value)

将path指定的信号,force成value值

返回值

1:force成功

0:force失败

int uvm_hdl_release(string path)

将path指定的信号,release

返回值

1: release成功

0: release失败

int uvm_hdl_read(string path,

output uvm_hdl_data_t value)

读取path指定的信号值,保存在value中

返回值

1: 读取成功

0: 读取失败

int uvm_hdl_release_and_read(string path,

inout uvm_hdl_data_t value)

将path指定的信号,release掉,并且读取release之后的值,保存在value中

返回值

1: 成功

0: 失败

如果信号是reg,那么读取的值是之前force的值,如果信号是wire,那么读取的值是当前被驱动的值。

另外,还有一个task,uvm_hdl_force_time,将指定的信号,force一段指定的时间,force完成后,读取信号的值,保存在value中。

通过uvm本身提供的这些DPI,我们就可以在环境中,通过灵活使用这些DPI,从而对RTL中信号的值进行操作。

UVM (Universal Verification Methodology) ,寄存器模型通常用于模拟硬件设计的寄存器行为。当涉及到后门访问路径(Backdoor Access Path)设置时,这主要是为了测试或调试目的,允许从高级模块直接访问底层寄存器,而不需要经过正常的验证流程。 在UVM的寄存器模型后门访问路径通常是通过以下步骤来配置的: 1. **创建后门接口**:首先,你需要在UVM测试框架定义一个特殊的后门接口(如`RegBlockBackdoor`),这个接口包含用于读取、写入寄存器的方法。 ```python class RegBlockBackdoor(uvm_reg_block#(T), uvm_analysis_port): // ... 定义读写方法 ... ``` 2. **关联到寄存器模块**:在具体的寄存器模块(如`RegBlock`),需要添加对后门接口的支持,并将其实例化。这通常在构造函数完成。 ```cpp RegBlockBackdoor#(T)::type my_backdoor = new(this, "my_backdoor"); ``` 3. **启用后门访问**:在测试环境,你可以选择何时启用这个后门,比如在特定的测试阶段或者在调试模式下。这通常通过环境变量、配置文件或者测试方法的控制来实现。 ```cpp if (uvm_config_db::get().get_int("TEST", "use_backdoor", 0)) { reg_block.set_backdoor(my_backdoor); } ``` 4. **使用后门访问**:在测试脚本或自定义宏,你可以通过这个后门接口直接操作寄存器,而不必遵守常规的验证序列。 ```cpp backdoor.write(0x10, 0xFF); // 直接写入地址0x10的值 backdoor.read(); // 直接读取寄存器值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那么菜

你的鼓励和批评是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值