modelsim仿真时让状态机波形显示状态的名字

在使用Verilog编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示(如IDLE等)。当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进制编码的形式显示,如下面所示,这种显示形式不是很直观,但我们可以使用ModelSim提供的命令将状态机变量以“文本”形式的参数名显示,从而有利于调试。

下面以一个实例来说明。

代码来源:http://www.cnblogs.com/oomusou/archive/2011/06/05/fsm_coding_style.html

源文件:

 1 /*
 2 (C) OOMusou 2011 http://oomusou.cnblogs.com
 3
 4 Filename    : simple_fsm_moore_3_always_best.v
 5 Synthesizer : Quartus II 8.1
 6 Description : 3 always block for moore fsm (BEST)
 7 Release     : Jun.05,2011 1.0
 8 */
 9
10 module simple_fsm (
11   clk,
12   rst_n,
13   w_i,
14   z_o
15 );
16
17 input  clk;
18 input  rst_n;
19 input  w_i;
20 output z_o;
21
22 parameter IDLE = 2‘b00;
23 parameter S0   = 2‘b01;
24 parameter S1   = 2‘b10;
25
26 reg [1:0] curr_state;
27 reg [1:0] next_state;
28 reg z_o;
29
30 // state reg
31 [email protected](posedge clk or negedge rst_n)
32   if (~rst_n) curr_state <= IDLE;
33   else        curr_state <= next_state;
34
35 // next state logic
36 [email protected](*)
37   case (curr_state)
38     IDLE    : if (w_i) next_state = S0;
39               else     next_state = IDLE;
40     S0      : if (w_i) next_state = S1;
41               else     next_state = IDLE;
42     S1      : if (w_i) next_state = S1;
43               else     next_state = IDLE;
44     default :          next_state = IDLE;
45   endcase
46
47 // output logic
48 [email protected](*)
49   case (curr_state)
50     IDLE    : z_o = 1‘b0;
51     S0      : z_o = 1‘b0;
52     S1      : z_o = 1‘b1;
53     default : z_o = 1‘b0;
54   endcase
55
56 endmodule

simple_fsm

测试文件:

 1 /*
 2 (C) OOMusou 2011 http://oomusou.cnblogs.com
 3
 4 Filename : simple_fsm_tb.v
 5 Simulator : ModelSim SE 6.3e + Debussy 5.4 v9
 6 Description : testbench for FSM
 7 Release : Jun.05,2011 1.0
 8  */
 9
10  module simple_fsm_tb;
11
12  reg clk = 1‘b1;
13  reg rst_n = 1‘b1;
14  reg w_i = 1‘b0;
15  wire z_o;
16
17  // clk
18  always #10 clk = ~clk;
19
20  event after_rst;
21
22  // rst_n
23  initial begin
24   #6; // 6ns
25   rst_n = 1‘b0;
26   #30; // 36ns
27   rst_n = 1‘b1;
28   ->after_rst;
29  end
30
31  // w_i
32  initial begin
33   @(after_rst);
34   repeat(2)@(posedge clk); // 60ns
35   w_i <= 1‘b1;
36   @(posedge clk); // 80 ns
37   w_i <= 1‘b0;
38   @(posedge clk); // 100 ns
39   w_i <= 1‘b1;
40   repeat(2)@(posedge clk); // 140 ns
41   w_i <= 1‘b0;
42   @(posedge clk); // 160 ns
43   w_i <= 1‘b1;
44   repeat(3)@(posedge clk); // 220 ns
45   w_i <= 1‘b0;
46 end
47
48 initial begin
49   $fsdbDumpfile("simple_fsm.fsdb");
50   $fsdbDumpvars(0, simple_fsm_tb);
51 end
52
53 simple_fsm u_simple_fsm (
54   .clk (clk),
55   .rst_n (rst_n),
56   .w_i (w_i),
57   .z_o (z_o)
58 );
59
60 endmodule

simple_fsm_tb.v

编写run.do文件

 1 vlib work
 2 vlog -novopt simple_fsm.v simple_fsm_tb.v
 3 vsim -voptargs=+acc work.simple_fsm_tb
 4 add wave *
 5 virtual type { {0x00 IDLE} {0x01 S0} {0x02 S1} } FSM_TYPE
 6 virtual function {(FSM_TYPE)/simple_fsm_tb/u_simple_fsm/curr_state} state1
 7 add wave u_simple_fsm/curr_state
 8 add wave -color pink /simple_fsm_tb/u_simple_fsm/state1
 9 virtual function {(FSM_TYPE)/simple_fsm_tb/u_simple_fsm/next_state} state2
10 add wave u_simple_fsm/next_state
11 add wave -color pink /simple_fsm_tb/u_simple_fsm/state2
12 run 1000ns

编写run.bat

1 vsim -do run.do

在文件夹内双击run.bat即可。如果双击该批处理文件程序没有运行,说明vsim命令没有执行,解决方案请参考http://www.cnblogs.com/ZcsTech/p/3495578.html

运行结果如下:

				
时间: 2024-11-03 22:23:24

modelsim仿真时让状态机波形显示状态的名字的相关文章

modelSIM仿真时objects空白无显示问题

http://blog.csdn.net/yyywxk/article/details/68947172 笔者在做modelsIM实验时,在编译好相关文件后,准备进行相关仿真实验,此时意外发生了. 无论笔者怎么点击仿真界面,object页面下始终没有是空白没有任何东西.同时,下方的transcript页面底部一直显示loading.....在等待足够长的时间后,最终显示"failed to start simulation kernel". 对于这种状况,目前网络上的给出了两种方法.

Modelsim设置数据以模拟波形显示

选中希望以模拟波形显示的信号,右击选择format->Analog(automatic) 如果你的数据是用无符号数表示一个完整的波形的,那么可能显示出来的波形样子是下面的样子,不过不要紧,这是因为modelsim默认是按照有符号数据解析波形数据的缘故,我们可以再进行一次设置修改. 选中希望显示波形的信号,右击,选择Radix->Unsigned. 设置完成后,波形就如下所示了: 是不是发现虽然波形已经是完整的正弦波了,但是波形有部分却跑到其他信号的地盘去了呢?这也不要紧,是模拟波形的显示范围设

Keil MDK 5.14 仿真时System Viewer菜单显示空白和Peripherals菜单无外设寄存器

keil mdk5.14新建工程进行仿真时,进入Debug环境发现System Viewer菜单显示空白,Peripherals菜单没有外设寄存器.如图1和图2所示.打开Oprons for Target 查看System Viewer File选项没有勾选Use Custom File,系统默认的STM32F103xx.svd.如图3所示.查看Debug选项中的Dialog DLL一栏写着DCM.DLL.Parameter一栏写着-pCM3.如图4所示. 图1   System Viewer菜

五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整个重绘这些FWinControl子控件.那么什么时候才整个重绘全部FWinControls呢?这时候,就不是一个单纯的WM_PAINT来解决控件重绘的问题了,而是这个TWinControl.UpdateShowing函数: procedure TWinControl.UpdateShowing; v

用MOdelsim仿真出现STX状态的解决方法

module bbbb(clock,oo,ii); input clock; output [4:0]oo; output [4:0]ii; reg [4:0]ooo; reg [4:0]iii; [email protected](posedge clock) begin if(ooo>=16) begin ooo<=0; iii<=iii+1; if(iii>=16) iii<=0; end else ooo<=ooo+1; end assign oo=ooo; a

Quartus和Modelsim仿真ROM模块

新建一个工程 选择工程保存路径,为工程取一个名字 Page 2 of 5 直接点击next ? ? Page 4 of 5 直接点击next ? 下面为工程添加文件 ? 需要注意模块名和模块所在文件的文件名要一致,下面的代码保存在Wave.v这个文件中 module Wave( input i_clk, input i_rst_n, output reg[7:0] led ); ? parameter Delay500MS = 10; ? reg clk_led; reg[24:0] cnt;

ModelSim仿真入门 精讲

ModelSim仿真入门之一:软件介绍 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤都经过缜密的思考,做到了详细再详细的程度. 如果您是FPGA开发方面的初学者,那么这个教程一定能够帮助你在仿真技术上越过新人的台阶:如果您是FPGA开发的老手,这篇文档也并非对您没有帮助,您可以把教程发给其他刚入门的同事,免去您亲自上阵指导的麻烦,把主要的精力放在更有价值的地方. 一.FPGA设计仿真验证简介 严格来讲,FPGA设计验证包括功能仿真.时序仿真和电

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

在ModelSim波形图中以参数名显示变量 在使用Verilog HDL编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进制编码的形式显示,例如:4’h0.4’h1等.这种显示形式不是很直观,但我们可以使用ModelSim提供的命令将状态机变量以“文本”形式的参数名显示,从而有利于调试. 假如一个状态机有如下的编码: parameter  WAIT_INPUT1 = 2'b00,  // 状态机参数定义,表示4个状态

88.modelsim仿真do文件相关技巧

网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看.其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习.PS:写得有点乱   还有一个值得注意的是 我在看到这篇文章的时候我正在仿真一个verilog文件,文件中调用了一个ROM , 但是我怎么仿真 rom的输出文件都有问题, 经过一个QQ好友的指点,我发现竟然是我 QUARTUS 下考过来的库文件 有问题, 自此提醒遇到过此问题 但还没有解决的同学.. 一.DO文件的简介和工作方式 DO文