让Verilog仿真状态机时可以显示状态名
时间:02-28
来源:互联网
点击:
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:
使用如下语句:
我们平时使用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查看。
FPGA IP 嵌入式 PLD CPLD SoC 数字信号处理 消费电子 相关文章:
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)
- 3DES算法的FPGA高速实现(06-21)
- 用FPGA实现FFT算法(06-21)
- FPGA的DSP性能揭秘(06-16)