Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514534
  • 博文数量: 484
  • 博客积分: 10145
  • 博客等级: 上将
  • 技术积分: 5805
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 18:34
文章分类

全部博文(484)

文章存档

2011年(52)

2010年(107)

2009年(287)

2008年(38)

我的朋友

分类:

2011-08-03 13:55:24

http://blog.163.com/qipeihong@126/blog/static/2048097020084138117439/


在ModelSim波形图中以参数名显示变量

2008-05-13 20:01:17| 分类: 学习笔记 | 标签: |字号

昨天让王师兄帮我检查代码的时候才知道原来在modelsim波形中可以用参数名显示状态机,这样就给调试带来很大的方便,不用去代码中查找状态值是哪个状态,不过由于师兄用的是VHDL,modlesim对VHDL好像自动有这个功能,但我用verilog好像不行。如果对verilog也支持就好了。

就是说,在verilog编写有限状态机的时候,状态的定义是以参数形式表示的,当用modelsim仿真时候,在wave波形中则以数字形式显示状态,这样显示不是很直观,如果可以在modelsim仿真中,状态的定义直接以“文本”形式的参数显示出来,调试起来就会方便很多。

今天在网上查找了相关的资料,果然有这样的介绍。下边简单说一下(以下内容是整合我看过的帖子)。

// ===========================

假如一个状态机有如下的编码:

parameter WAIT_INPUT1 = 2'b00, // 状态机参数定义,表示4个状态

DELAY1 = 2'b01,

DELAY2 = 2'b10,

WAIT_INPUT2 = 2'b11;

reg [1:0] current_state;

缺省情况下,状态机current_stateModelSimwave窗口中以二进制编码的形式显示。如果想让其显示定义的参数,例如WAIT_INPUT1等,我们需要利用Modlesim给我们提供的virtual type命令来实现。

1. 用virtual type命令定义一个新的枚举类型(FSM_TYPE);

virtual type {

{2'b00 WAIT_INPUT1}

{2'b01 DELAY1}

{2'b10 DELAY2}

{2'b11 WAIT_INPUT2}

} FSM_TYPE;

关于virtual type的格式,暂时还不能确定是不是非要一行一个参数,但我在modelsim 6.2b中将上述定义输入到一行中,是不行的,只能一行一个参数,由于modelsim中将回车作为输入结束标识,如果换行的话就用shift+回车(不知道是不是这样)。

2. 然后我们将需要显示的信号(current_state)进行类型转换,转换成一个新的信号(CState);

virtual function {(FSM_TYPE)/current_state} CState;

注:上述语句只能加入当前仿真模块的状态机,如果说想要看底层模块的状态,则只需要将(FSM_TYPE)后边替换为/UUT/模块实例名/current_state

3. 最后我们将新的信号加入到wave窗口中。

add wave -hex -color pink current_state_new;

当然也可以直接在在相应的模块中找到刚替换的CState,鼠标添加,但命令添加有一个好处,就是可以控制添加进去波形的颜色。

// ===========================

(全文完)


阅读(1451) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~