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

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

3天内不再提示

Verdi查看task内部变量

CHANBAEK 来源:数字IC与好好生活的两居室 作者:除夕之夜啊 2023-03-26 16:08 次阅读

任务(task)可以用来描述共同的代码段,并在模块内任意位置被调用,让代码更加的直观易读。task 更像一个过程,过程内一般按顺序执行,完成各种逻辑控制。

调试 testbench 中的 task 时,新手可能会遇到一些问题。典型的问题有两个,一个是 task 内部声明使用的变量为什么不能在 Verdi 波形中查看,另一个是 task 输出端连接的信号为什么不随 task 内部赋值变量的变化而变化。本节将对这两个问题进行讲解说明。

Verdi 查看 task 内部变量

创建一个简单的 task,包含内部变量 reg 和 output,如下所示。

//varialbes in task
       task reg_in_task  ;
              output [7:0]       data_test1 ;
              reg [7:0]              data_test2 ;
              begin
                     #100 ;
                     data_test1 = 8'h13 ;
                     data_test2 = 8'h24 ;
                     #100 ;
                     data_test1 = 8'h1a ;
                     data_test2 = 8'h2b ;
              end
       endtask

在 testbench 的 initial 语句中调用该task,并定义变量 data_test1_t,连接到该 task 输出端,如下所示。

`timescale 1ns/1ps
module test ;
   ......
       reg [7:0]       data_test1_t ;
       initial begin
              reg_in_task(data_test1_t) ;
       end
endmodule

使用 simv 进行仿真,不用添加特殊选项,如下所示。

./simv -ucli -i wave_gen.tcl -l sim.log

打开 Verdi 和 fsdb 波形文件,添加 task 内部的变量 data_test1 和输出端 data_test2 时,会提示相关信号无法找到。

图片

为解决上述问题,使用 simv 进行仿真时需要添加特殊选项 +fsdb+functions,如下所示。

./simv +fsdb+functions -ucli -i wave_gen.tcl -l sim.log

此时再在 Verdi 中添加 task 内部的变量 data_test2 和输出端 data_test1,其变化过程会在波形上显示,如下所示。

图片

◆ 小结:VCS 仿真时,需要在 simv 仿真时添加 fsdb+functions 参数,才可在 Verdi 中打开 fsdb 波形并查看 task 内部变量的变化情况。

TASK 操作全局变量

上述仿真波形中,细心的读者可能会看到,虽然连线信号 data_test1_t 连接的是 task 输出端,但是 data_test1_t 并不随 task 输出端的变化而变化。

图片

这是因为 testbench 中的代码一般是顺序执行,并没有对应的实际硬件结构。所以 task 输出端连接的对应信号不可以理解为连续赋值,而是理解为一个返回值。即 task 执行完毕时,只返回输出端连接的信号一个最终结果。所以,data_test1_t 只会在 task 结束时 (对应200ns) 被赋值为 8'h1a,并不会体现中间的变化过程。

如果一个信号在 task 中的变化能够体现在 task 外部,则该信号需要定义为全局变量。即信号需要定义在 task 外部,但是在 task 内部中驱动。

上述示例中,删除输出端 data_test1,并在 task 中直接对全局变量 data_test1_t 进行赋值驱动。

`timescale 1ns/1ps
module test ;


    reg [7:0]       data_test1_t
    //varialbes in task
    task reg_in_task  ;
        reg [7:0]              data_test2 ;
        begin
           #100 ;
           data_test1_t = 8'h13 ;
           data_test2   = 8'h24 ;
           #100 ;
           data_test1_t = 8'h1a ;
           data_test2   = 8'h2b ;
       end
    endtask


    initial begin
       reg_in_task ;
    end
endmodule

仿真结果如下。此时全局变量 data_test1_t 的变化过程并不局限于 task 内部。

图片

testbench 不用“Think In Hardware”,写法比较自由。在多个 task 中对同一个全局变量信号进行多驱动也是没有问题的,只要时间轴上分开驱动事件的先后顺序即可。

上述示例中再增加一个 task ,用以驱动全局信号 data_test1_t,则代码和仿真结果如下。这里不再分析。

task task_mult_drive  ;
        begin
            #150 ;
            data_test1_t = 8'hc8 ;
        end
    endtask


    initial begin
        task_mult_drive ;
    end

图片

小结:task 执行完毕时,只返回输出端连接的信号一个最终结果。如果 task 中信号的变化过程能够在 task 外部实时体现,则该信号也需要定义在 task 外部。

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

    关注

    7

    文章

    2707

    浏览量

    47477
  • 信号
    +关注

    关注

    11

    文章

    2791

    浏览量

    76772
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68617
  • Verdi
    +关注

    关注

    0

    文章

    22

    浏览量

    8782
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28371
收藏 人收藏

    评论

    相关推荐

    高速接口MIPI DPHY配置task函数

    景芯SoC训练营有同学问Verdi如何加载task函数里面的波形,这里以高速图像接口MIPI为例,给大家介绍下吧。
    的头像 发表于 11-18 16:59 966次阅读
    高速接口MIPI DPHY配置<b class='flag-5'>task</b>函数

    请教VCS和verdi怎么联合使用

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

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

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

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

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

    IAR 在线调试查看各种变量的不同方法

    IAR在线调试查看各种变量的不同方法
    的头像 发表于 03-12 10:00 1.3w次阅读

    如何通过自动化脚本实现Questasim和Verdi的联合仿真

    : 《VERDI_HOME》/share/PLI/MODELSIM/${PLATFORM}。 首先需要把上面的库文件路径添加到系统的环境变量LD_LIBRARY_PATH 中,如下:
    的头像 发表于 06-13 17:00 4583次阅读
    如何通过自动化脚本实现Questasim和<b class='flag-5'>Verdi</b>的联合仿真

    分享《verdi用法小结》的pdf

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

    全网最实用的Verdi教程1

    过程中,常常用来调试(debug)一些错误的情况。Verdi既可以阅读调试代码,又可以查看波形,包括数字设计的波形和模拟设计的波形。
    的头像 发表于 05-05 14:49 1.7w次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程1

    全网最实用的Verdi教程2

    过程中,常常用来调试(debug)一些错误的情况。Verdi既可以阅读调试代码,又可以查看波形,包括数字设计的波形和模拟设计的波形。
    的头像 发表于 05-05 14:53 8657次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程2

    全网最实用的Verdi教程3

    过程中,常常用来调试(debug)一些错误的情况。Verdi既可以阅读调试代码,又可以查看波形,包括数字设计的波形和模拟设计的波形。
    的头像 发表于 05-05 14:53 5751次阅读
    全网最实用的<b class='flag-5'>Verdi</b>教程3

    如何用vcs+verdi仿真Verilog文件并查看波形呢?

    我们以一个简单的加法器为例,来看下如何用vcs+verdi仿真Verilog文件并查看波形。
    的头像 发表于 05-08 16:00 6465次阅读
    如何用vcs+<b class='flag-5'>verdi</b>仿真Verilog文件并<b class='flag-5'>查看</b>波形呢?

    如何用vcs+verdi仿真Verilog文件

    我们以一个简单的加法器为例,来看下如何用vcs+verdi仿真Verilog文件并查看波形。 源文件内容如下:
    的头像 发表于 05-11 17:03 1927次阅读
    如何用vcs+<b class='flag-5'>verdi</b>仿真Verilog文件

    如何用Verdi查看UVM环境中的变量

    我们常用的debug UVM的方法是通过打印log实现。有没有办法像 debug RTL代码一样将 UVM 中变量拉到波形上看呢?答案是有的,下面让我们看看是怎么做到的。
    的头像 发表于 06-25 16:01 1744次阅读
    如何用<b class='flag-5'>Verdi</b><b class='flag-5'>查看</b>UVM环境中的<b class='flag-5'>变量</b>?

    GDB调试如何进行变量查看

    变量查看 变量查看: 最常见的使用便是使用print(可简写为p)打印变量内容。 以上述程序为例: gdb helloworld break
    的头像 发表于 09-26 16:17 1958次阅读

    verilog task和function区别

    verilog中的task和function都是用于实现模块中的可重复的功能,并且可以接收参数和返回结果。但是它们在编写和使用上有一些区别。下面将详细介绍task和function的区别。 语法结构
    的头像 发表于 02-22 15:53 1093次阅读