找回密码
 注册
关于网站域名变更的通知
查看: 232|回复: 1
打印 上一主题 下一主题

让Verilog仿真状态机时可以显示状态名

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-31 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2019-5-31 16:13 | 只看该作者
这个方法好啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 11:16 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表