|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
让Verilog仿真状态机时可以显示状态名 7 m! N; ]5 F0 }6 J" A8 e5 D
Situation: 我们平时使用Verilog进行状态机编码时,通常使用parameter对状态名进行定义,这样写Case语句的时候就不会对这一串10摸不着头脑。可是通常这样做的话,在Modelsim里看到的还是一串10,使排错非常困难,特别是在用OneHot编码的时候,就看到一串0中间的一个1 #_# 简直要疯掉。( T! y3 P+ Z$ z7 g0 i0 h
Question: 我们可不可以像VHDL一样,在仿真的时候看到状态名字,而不仅仅是状态编码呢?2 z" |- j ^9 d+ ?% u9 I$ M# w
答案当然是可以的拉,事在人为嘛!$ @- f5 y& b, d5 T! H% A
Solution1:
- s% K) h" ?: V4 c3 c# F另外定义一个reg: state_name,长度根据状态名称长度而改变(状态名称字符数x8);
/ r- W7 d- w5 o& E0 t2 s在每个状态执行的语句中加入state_name <= "IDLE"; 类似的一句语句;& F6 X1 X& z; D
仿真时添加state_name进行观察,使用ASCII Radix。# W s( d4 r9 E# N% {. i
Solution2:
+ k0 ~; Q, }) g) j$ C使用如下语句:0 {& m1 A( i5 G ^7 P5 @/ d
`ifdef SIMULATION
, \4 Z+ u/ P& w* j parameter S_idle = "idle "; 3 v/ v: S# F( _5 _8 L
parameter S_decode = "decode";
) ~- j9 H/ `, Y7 M parameter S_start = "start ";
. d Z; y/ S2 K H2 z+ x parameter S_wait = "wait ";
2 E& h2 g+ @: P5 b c parameter state_wid_msb = 47; & t# V4 S4 w2 M% y! w6 e
`else [$ z! s# n; M* g9 d4 R3 y& H; W
parameter S_idle = 4'b0001; 1 R; Q' x' h! a) E+ [1 J; Z7 T
parameter S_decode = 4'b0010; 3 O$ _% I4 t" w4 U4 A H
parameter S_start = 4'b0100;
9 S, l. I. D9 M# ~1 G parameter S_wait = 4'b1000; / e6 X4 f9 U4 s- C% J1 |' C# J
parameter state_wid_msb = 3; % m) Y( Y) C3 }2 Z3 c
`endif1 I0 Q2 S4 O. E+ I
reg [state_wid_msb:0] state;& Y! l# j: A3 A7 I* K L
只要在仿真的时候`define SIMULATION就可以了。一样用ASCII Radix查看。
I8 h0 _, Q4 s' y! F
$ J* b0 [) x' s |
|