搜索
bottom↓
回复: 0

在modesim中显示状态机变量参数名的两种方法及比较

[复制链接]

出0入0汤圆

发表于 2015-7-14 19:25:50 | 显示全部楼层 |阅读模式
本帖最后由 fakeCode 于 2015-7-14 19:27 编辑

在modesim中显示状态机变量参数名的两种方法及比较
2015年6月24日 by shawge
对于VHDL,modelsim是直接支持的,对于verilog我们则需要动些小脑筯。我在网上搜罗了一下,主要包括以下两种方法:
1.通过modelsim的virtual type命令来实现。
2.通过条件编译指令来实现。

通过modelsim的virtual type命令实现状态名显示的具体操作
用virtual type命令定义一个新的枚举类型(FSM_TYPE);
在sim.do(或者你自己的.do脚本)中添加以下代码(以下代码都可以直接在modsim的Transcrip窗口中作为命令输入,如果你不嫌麻烦的话,当然我不建议你这么做 :-):
# 使用ModelSim的virtual type命令定义一个新的枚举类型(FSM_TYPE)
# 注意:状态变量之间需要一个空格,注意4'b0001不能像verilog里面一样写成4'b00_01
virtual type {{4'b0001 STATE1} {4'b00010 STATE2} {4'b0100 STATE3} {4'b1000 STATE4}} FSM_TYPE
注意:状态变量之间需要一个空格,注意4’b0001不能像verilog里面一样写成4’b00_01
2. 然后我们将需要显示的信号state_cur、state_next分别进行类型转换,转换成两个新的信号state_curNew、state_nextNew。在sim.do(或者你自己的.do脚本)中添加以下代码:

# 将需要显示的信号(/testbench/fsm/state_cur,注意信号在wave窗口中的完整名字)进行类型转换,
#转换成一个新的信号state_curNew
virtual function {(FSM_TYPE)/testbench/fsm/state_cur} state_curNew
#同样处理state_next信号
virtual function {(FSM_TYPE)/testbench/fsm/state_next} state_nextNew
最后我们将新sate_curNew、state_nextNew的信号加入到wave窗口中。
#将新信号加入wave窗口
add wave testbench/fsm/sate_curNew
add wave testbench/fsm/sate_nextNew
或者直接在modsim的Transcrip窗口中输入以上命令。
缺点:
1. 在波形窗口中将会同时出现原来以数字显示的状态机变量和以参数名显示新的状态机变量,如下图

(图中的state1即为curr_state转化后的新信号,state2即为next_state转化后的新信号)
当然也可以在脚本中加入命令删除原来的状态变量波形。
2. 操作麻烦,当把以上脚本代码应用到新项目中时要修改的地方比较多(如果让你从Transcrip窗口一条条输入命令,那会蛋疼得生不如死)显得很多不通用也不便于维护,所以我更愿意使用和推荐下面这种方法。

通过条件编译指令实现状态名显示的具体操作
添加条件编译指令,即存在`SIM定义时将每一个状态定义为字符串,这里需要注意stateCur、stateNxt在定义为字符串时需要给予足够的长充,否则波形显示时字符串将会不完整。

`ifdef SIM
    localparam STATE1   =   "STATE1";
    localparam STATE2   =   "STATE2";
    localparam STATE3   =   "STATE3";
    localparam STATE4   =   "STATE4";
    localparam STATE5   =   "STATE5";
    localparam STATE6   =   "STATE6";
    localparam STATE7   =   "STATE7";
    localparam STATE8   =   "STATE8";
    localparam STATE9   =   "STATE9";
    localparam STATE10  =   "STATE10";

    reg [255:0] stateCur;
    reg [255:0] stateNxt;
`else
    localparam STATE1   =   10'b00_0000_0001;
    localparam STATE2   =   10'b00_0000_0010;
    localparam STATE3   =   10'b00_0000_0100;
    localparam STATE4   =   10'b00_0000_1000;
    localparam STATE5   =   10'b00_0001_0000;
    localparam STATE6   =   10'b00_0010_0000;
    localparam STATE7   =   10'b00_0100_0000;
    localparam STATE8   =   10'b00_1000_0000;
    localparam STATE9   =   10'b01_0010_0000;
    localparam STATE10  =   10'b10_0010_0000;

    reg [9:0] stateCur;
    reg [9:0] stateNxt;
`endif
在testbench中加入以下定义:

`define SIM
在modelsim中以ASCII Radix方式查看stateCur、stateNxt信号,当然也可以直接在.do脚本中添加代码,以实现sateCur、stateNxt以ASCII显示。

优点: 1. 操作方便,直接在代码中书写便于维护。2. 在modelsim波形窗口中不会显示多余波形。

最后打打广告吧,我的个人博客 http://www.hex55.com

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-7 21:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表