0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊使用Verdi去分析NBA Delay的问题

冬至子 来源:icsoc 作者:韩京飞 2023-06-09 16:28 次阅读

在学习和使用 Verilog 的过程中,难免会碰到需要深入理解仿真器调度的问题。今天这篇聊聊使用 Verdi 去分析 NBA Delay 的问题。

NBA 就是 NonBlocking Assignment,非阻塞赋值 的缩写。它通常用来描述一个用时钟沿触发的寄存器。在 Verilog 普及早期,人们通常会在 NBA 的<= 之后加个单位延时#1来解决早期仿真器行为不一致的问题。

所谓习惯成自然,NBA Unit Delay 在某些设计中一直沿用下来,那么如何去理解这个延时的作用呢?SNUG 上的知名作者 Clifford E. Cummings 在 2002 年有篇文章阐述的挺详细,感兴趣的朋友可以搜来研究,不再赘述。

下面给出一些代码片断,同样感兴趣的朋友可以自己完善并用 VCS 仿真生成波形,然后用 Verdi 打开。

首先创建三个时钟,注意两个二分频时钟的创建方式不同。

always #(10/2) clk = ~clk;
  always #(20/2) clk_div2_direct = ~clk_div2_direct;
  
  always @ ( posedge clk or negedge rst_n ) begin
    if ( ~ rst_n ) begin
      clk_div2  <= 1'b0;
    end
    else begin
      clk_div2  <= ~clk_div2;
    end
  end

然后用 clk 触发一个不停翻转的寄存器 d1,再分别用两个二分频时钟去采样,保存在 d5 和 d6 中。

always @ ( posedge clk or negedge rst_n ) begin
    if ( ~ rst_n ) begin
      d1  <= 1'b0;
    end
    else begin
      d1  <= ~d1;
    end
  end
  
  always @ ( posedge clk_div2 or negedge rst_n ) begin
    if ( ~ rst_n ) begin
      d5 <= 1'b0;
    end
    else begin
      d5 <= d1;
    end
  end

  always @ ( posedge clk_div2_direct or negedge rst_n ) begin
    if ( ~ rst_n ) begin
      d6 <= 1'b0;
    end
    else begin
      d6 <= d1;
    end
  end

用 VCS 仿真的时候,加上编译时选项+fsdb+region和运行时选项+fsdb+delta

然后用 Verdi 打开生成的 fsdb 波形。正常的话,可以看到 d5 和 d6 的波形是完全不同的,一个是常0,一个是常1。

图片

只从上图分析的话,两个二分频时钟的波形是完全一致的,被采样的数据是同一个,那么采到的数据也应该是相同的。但我们知道这两个二分频时钟的生成方式是不同的,那么不同在什么地方呢?

在 Verdi 的 nWave 窗口中选中 View - Expand Delta - Region Mode,把 Cursor 移动到二分频时钟的上升沿,然后点击 Expand/Collapse Time at Cursor,简单点的话直接按 w 键。

图片

然后就可以看到这个仿真时刻的 Simulation Region,里面展示了各个 Event 和 Region 的关系。

图片

这个例子中,只存在绿色的 Active Region 和 红色的 NBA Region。在某些 glitch debug 的例子中,还能看到 Re-Active Region 和 Re-NBA Region。

Region 的展示可以帮助我们很好的理解 Verilog 规范中的定义的信号调度。

此外,Verdi 还可以通过点击 Tools - Event Sequence 来显示图形化的 Event 序列。

图片

图片

Verdi 真得是很好很强大。

不过随着工具的逐渐强大,站在工具背后的人呢?是在逐渐退化还是改变了进化方向?欢迎留言说说你的看法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5033

    浏览量

    117746
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82997
  • VCS
    VCS
    +关注

    关注

    0

    文章

    78

    浏览量

    9497
  • Verdi
    +关注

    关注

    0

    文章

    21

    浏览量

    8694
  • CLK
    CLK
    +关注

    关注

    0

    文章

    122

    浏览量

    16912
收藏 人收藏

    评论

    相关推荐

    请教VCS和verdi怎么联合使用

    最近要用到VCS仿真后生成FSDB文件,然后在Verdi中进行自动侦错,请问我怎么安装Verdi这个软件以及如何启动license,并且怎么写testbench文件才可以产生FSDB文件。请懂得人给我支支招,我也是刚开始学习这个软件的使用。
    发表于 01-22 14:53

    NBA球员年薪影响因素分析方案

    利用可视化对NBA球员年薪影响因素进行分析
    发表于 08-08 10:35

    怎样使用Makefile+VCS+Verdi做个简单的Test Bench?

    怎样使用Makefile+VCS+Verdi做个简单的Test Bench?有哪些操作步骤?
    发表于 06-18 06:28

    Verdi工具怎么安装?如何破解?

    本文介绍Verdi工具的安装及破解过程
    发表于 06-21 07:15

    VCS+Verdi如何安装?怎么破解?

    VCS+Verdi如何安装?怎么破解?
    发表于 06-21 06:11

    VCS仿真卡住,为什么无法生成verdi波形文件呢?

    在make com编译成功后,terminal卡住了一直没有反应,这是什么情况有大佬知道吗?VCS仿真卡住,为什么无法生成verdi波形文件呢?
    发表于 06-21 08:14

    Verdi 54v7 LINUX

    Verdi 54v7 LINUX
    发表于 03-25 13:19 9次下载

    乌拉戒指:助力NBA抗疫,争取NBA复赛

    对很多人来说,没有NBA的夏天是不完整的。好消息是,NBA在竭尽全力重启停摆了将近4个月的2019-2020赛季;坏消息是,美国疫情再次加重,NBA多位球员的病毒检测成阳性,复赛举办地奥兰多的感染人数也在反弹,复赛有可能取消。
    的头像 发表于 07-03 15:42 3044次阅读

    分享《verdi用法小结》的pdf

    分享Verdi用法小结的pdf文档
    的头像 发表于 02-18 20:21 829次阅读
    分享《<b class='flag-5'>verdi</b>用法小结》的pdf

    Verdi使用技巧(三)

    前一段时间IC君比较忙,没有更新文章,最近稍微闲下来点,继续更新Verdi相关的文章。
    的头像 发表于 04-25 14:44 3308次阅读
    <b class='flag-5'>Verdi</b>使用技巧(三)

    全网最实用的Verdi教程1

    Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用VCS+Verdi或者Xcelium/xrun+Verdi的方式进行代码的仿真与检查。Verdi
    的头像 发表于 05-05 14:49 1.4w次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程1

    全网最实用的Verdi教程2

    Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用VCS+Verdi或者Xcelium/xrun+Verdi的方式进行代码的仿真与检查。Verdi
    的头像 发表于 05-05 14:53 4956次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程2

    全网最实用的Verdi教程3

    Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用VCS+Verdi或者Xcelium/xrun+Verdi的方式进行代码的仿真与检查。Verdi
    的头像 发表于 05-05 14:53 3749次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程3

    Verdi环境配置、生成波形的方法

    Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用的就是VCS+Verdi或或者Xcelium(xrun)+Verdi的方式进行代码的仿真与检查
    的头像 发表于 05-29 09:48 2315次阅读
    <b class='flag-5'>Verdi</b>环境配置、生成波形的方法

    Verdi连续波激光器-Coherent

    描述: Verdi系列激光器,是基于OPSL专利技术,是高功率的532nm绿光激光器。常用于钛宝石激光器泵浦、全息、干涉、冷原子等领域。 Verdi系列激光器,是久负盛名的激光器,具有非常出色
    的头像 发表于 06-30 09:47 275次阅读
    <b class='flag-5'>Verdi</b>连续波激光器-Coherent