【转】Verilog仿真状态机时显示状态名

本文介绍了两种在Verilog中实现状态机时提高调试效率的方法。一种是在每个状态中定义状态名称并显示,另一种是通过预处理指令在仿真环境下直接使用状态名而非编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【转】http://www.fpganotes.com/post/31/

Situation: 我们平时使用Verilog进行状态机编码时,通常使用parameter对状态名进行定义,这样写Case语句的时候就不会对这一串10摸不着头脑。可是通常这样做的话,在Modelsim里看到的还是一串10,使排错非常困难,特别是在用OneHot编码的时候,就看到一串0中间的一个1 #_# 简直要疯掉。

Question: 我们可不可以像VHDL一样,在仿真的时候看到状态名字,而不仅仅是状态编码呢?

答案当然是可以的拉,事在人为嘛!

Solution1:
另外定义一个reg: state_name,长度根据状态名称长度而改变(状态名称字符数x8);
在每个状态执行的语句中加入state_name <= "IDLE"; 类似的一句语句;
仿真时添加state_name进行观察,使用ASCII Radix。

Solution2:
使用如下语句:


  
`ifdef SIMULATION
parameter S_idle = " idle " ;
parameter S_decode = " decode " ;
parameter S_start = " start " ;
parameter S_wait = " wait " ;
parameter state_wid_msb = 47 ;
`
else
parameter S_idle = 4 ' b0001;
parameter S_decode = 4 ' b0010;
parameter S_start = 4 ' b0100;
parameter S_wait = 4 ' b1000;
parameter state_wid_msb = 3 ;
`endif

reg [state_wid_msb: 0 ] state;

 

 



只要在仿真的时候`define SIMULATION就可以了。一样用ASCII Radix查看。

转载于:https://www.cnblogs.com/zzjjhh250/archive/2010/12/22/1914126.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值