searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

verdi的调试技巧

2023-03-29 09:01:21
198
0

目录

  1. 总线操作
  2. 信号值查找和marker添加
  3. EVENT使用
  4. 状态机状态显示
  5. 次数统计
  6. 逻辑运算
  7. stuct联合结构体在波形中显示
  8.  

1、总线操作

通常一些位宽较大的信号,是由一些位宽的较小的信号按域段拼接在一起组成的。在debg过程中,我们需要把位宽较大的信号按要求拆分成位宽较小的信号。这种拆分有多种方法:

1)将位宽较大的信号直接拆分成多组相同位宽的信号。比如把一个64位宽的信号平均拆分成8组8位宽的信号,如下图:

    123      

   2)直接截取大位宽信号的某些位,或者高低位取反等等生成一个新的信号,如下图:

  45

 大家可以根据自己的需要去尝试上图的那些选项

 

2、信号值查找和marker添加

  将某个信号在整个波形上取某个特定值的位置标记出来方便查看,第一步先查找想标记的信号的值:如图:

6

上述信号查找支持模糊匹配,不关心的值可以用*号替代,输入值之后回车,标记线就会跳转到对应值的位置,然后再用marker做标记。如下图:

7

name可以取一个方便标识的名字,点击黄色箭头,再点击添加

8

 最后波形上就会在刚刚查找到的信号对应值的位置打上标记。

9

如果想把该信号所有这个值所在的地方都标记出来,那就采用第三种event方法

 

3event使用

event的使用有简单和复杂两种,大家经常使用的都是简单的,这里只介绍简单的event使用方法,如下图:

101112

    

4、状态机状态显示

 通常我们把状态机信号添加到波形中时,显示的是信号的数值,而代码里状态通常用字符表示,这时如果想在波形里,状态机信号也显示字符,可以采用如下图方式:

131415

这样就能实现将状态机的数值转变成字符,可以参考rtl代码进行状态机跳转的debug

 

5、次数统计

次数统计就是统计某个信号的某个值出现的次数或者上升沿下降沿跳变的次数,简单又好用。例如统计write信号写了几次,可以通过统计write信号上升沿的方式进行统计,如图:

16

这对于仿真时间较久,出现次数较多,不方便肉眼观察的时候采用,非常方便

 

6、逻辑运算

这个时verdi调试技巧里经常用到也非常好用的技巧。有多步操作组合来实现。

第一步可以通过将信号在时间线上前移或者后移,为的是方便信号对齐,操作如下,

171819

 

如果想向前移,则输入的值为负值就行。

20

如果不用信号不用提前或者延后,则不用此操作。

第二步,将多个信号做逻辑运算生成新的信号

在一个频繁变化的信号、尤其是多比特的bus信号中观察是否出现了某个值,有时候可以通过搜索来追踪。也可以通过对现有信号执行的逻辑操作创建新信号,或者搜索信号值。但是如何一目了然地看到呢?右键/Signal -> Logical Operation,通过新建一个信号,该信号是待观察信号的某种逻辑表达式。

逻辑操作

例如:多个信号进行与运算,也可以进行其他运算。

21

相与之后结果:

22

 

7struct联合结构体在波形中显示

该方法主要是为了直接把一些复杂的包含多个域段的信号直接不用做逻辑运算或者拆分,而直接在波形中显示,具体做法如下:

第一步:先在验证环境中定义好一个结构体,然后和需要观察的信号相连,如下图:

2324

最后仿真出来,把刚刚定义的结构体拉到波形上双击就可以直接看到定义的每个域段。这样就不需要再取拆分总线。比较直观方便观察。

25

0条评论
0 / 1000
f****n
1文章数
0粉丝数
f****n
1 文章 | 0 粉丝
f****n
1文章数
0粉丝数
f****n
1 文章 | 0 粉丝
原创

verdi的调试技巧

2023-03-29 09:01:21
198
0

目录

  1. 总线操作
  2. 信号值查找和marker添加
  3. EVENT使用
  4. 状态机状态显示
  5. 次数统计
  6. 逻辑运算
  7. stuct联合结构体在波形中显示
  8.  

1、总线操作

通常一些位宽较大的信号,是由一些位宽的较小的信号按域段拼接在一起组成的。在debg过程中,我们需要把位宽较大的信号按要求拆分成位宽较小的信号。这种拆分有多种方法:

1)将位宽较大的信号直接拆分成多组相同位宽的信号。比如把一个64位宽的信号平均拆分成8组8位宽的信号,如下图:

    123      

   2)直接截取大位宽信号的某些位,或者高低位取反等等生成一个新的信号,如下图:

  45

 大家可以根据自己的需要去尝试上图的那些选项

 

2、信号值查找和marker添加

  将某个信号在整个波形上取某个特定值的位置标记出来方便查看,第一步先查找想标记的信号的值:如图:

6

上述信号查找支持模糊匹配,不关心的值可以用*号替代,输入值之后回车,标记线就会跳转到对应值的位置,然后再用marker做标记。如下图:

7

name可以取一个方便标识的名字,点击黄色箭头,再点击添加

8

 最后波形上就会在刚刚查找到的信号对应值的位置打上标记。

9

如果想把该信号所有这个值所在的地方都标记出来,那就采用第三种event方法

 

3event使用

event的使用有简单和复杂两种,大家经常使用的都是简单的,这里只介绍简单的event使用方法,如下图:

101112

    

4、状态机状态显示

 通常我们把状态机信号添加到波形中时,显示的是信号的数值,而代码里状态通常用字符表示,这时如果想在波形里,状态机信号也显示字符,可以采用如下图方式:

131415

这样就能实现将状态机的数值转变成字符,可以参考rtl代码进行状态机跳转的debug

 

5、次数统计

次数统计就是统计某个信号的某个值出现的次数或者上升沿下降沿跳变的次数,简单又好用。例如统计write信号写了几次,可以通过统计write信号上升沿的方式进行统计,如图:

16

这对于仿真时间较久,出现次数较多,不方便肉眼观察的时候采用,非常方便

 

6、逻辑运算

这个时verdi调试技巧里经常用到也非常好用的技巧。有多步操作组合来实现。

第一步可以通过将信号在时间线上前移或者后移,为的是方便信号对齐,操作如下,

171819

 

如果想向前移,则输入的值为负值就行。

20

如果不用信号不用提前或者延后,则不用此操作。

第二步,将多个信号做逻辑运算生成新的信号

在一个频繁变化的信号、尤其是多比特的bus信号中观察是否出现了某个值,有时候可以通过搜索来追踪。也可以通过对现有信号执行的逻辑操作创建新信号,或者搜索信号值。但是如何一目了然地看到呢?右键/Signal -> Logical Operation,通过新建一个信号,该信号是待观察信号的某种逻辑表达式。

逻辑操作

例如:多个信号进行与运算,也可以进行其他运算。

21

相与之后结果:

22

 

7struct联合结构体在波形中显示

该方法主要是为了直接把一些复杂的包含多个域段的信号直接不用做逻辑运算或者拆分,而直接在波形中显示,具体做法如下:

第一步:先在验证环境中定义好一个结构体,然后和需要观察的信号相连,如下图:

2324

最后仿真出来,把刚刚定义的结构体拉到波形上双击就可以直接看到定义的每个域段。这样就不需要再取拆分总线。比较直观方便观察。

25

文章来自个人专栏
验证技术
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0