• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

验证环境中如何捕获后门路径信号的跳变

环境中后门获取DUT内部信号的3种方法:
信号的Hierarchy读取
interface连接
VPI访问
其中前两种方式,借助systemverilog种阻塞等待操作,可以精确地捕获信号的跳变,比如@和wait:

//信号Hierarchy读取
@(tb_top.dut.cnt) 
@(posedge dut.clk)

//interface连接
@(negedge vrf.clk)
@(posedge vrf.axi_bid)
wait(vrf.cnt==3)

而对于VPI接口,是通过信号的后门字符串路径获取信号值,则无法通过上述的方式捕捉到边沿跳变。VPI接口是一次性的函数的调用来获取信号值,但无法把一个变量和DUT信号"绑定",因此下述的代码是无法实现此目的。

bit[15:0] A;
void'(uvm_hdl_read("dut.sub_block.A",A));
@(posedge A);

如果需要获取信号的跳变,则需要使用封装task实现。以检测上升沿为例,该task的思路如下:

task at_poedge(string x_path);
    int t_value,delta;
    if(!uvm_hdl_check_path(x_path,t_value)) begin
        //report error
        return;
    end
    while(1) begin
        #delta;
        void'(uvm_hdl_read(x_path,t_value));
        if(t_value==0) break;
    end
    while(1) begin
        #delta;
        void'(uvm_hdl_read(x_path,t_value));
        if(t_value==1) break;
    end
endtask

上述函数种的delta延时,即使是使用时间精度级别的延时,则也无法精确捕获边沿,因为信号的频率不会总是和上述的延时对齐。
里面的delta可以换成时钟,这样对于时序电路来说,就可以精确捕捉到了。

posted on 2023-07-29 11:33  SOC验证工程师  阅读(383)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3