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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

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

4 X' U; A* m3 ZSituation: 我们平时使用Verilog进行状态机编码时,通常使用parameter对状态名进行定义,这样写Case语句的时候就不会对这一串10摸不着头脑。可是通常这样做的话,在Modelsim里看到的还是一串10,使排错非常困难,特别是在用OneHot编码的时候,就看到一串0中间的一个1 #_# 简直要疯掉。0 k$ o7 Y- i4 Y: _( Z
Question: 我们可不可以像VHDL一样,在仿真的时候看到状态名字,而不仅仅是状态编码呢?2 q+ ?3 k. D, Z3 J
答案当然是可以的拉,事在人为嘛!
0 ^; L7 q* `" K6 USolution1:
0 H& Y/ C* ^* ~+ R) E" w9 K2 k$ I另外定义一个reg: state_name,长度根据状态名称长度而改变(状态名称字符数x8);/ I2 U, T) A5 _4 X9 d# r0 \
在每个状态执行的语句中加入state_name <= "IDLE"; 类似的一句语句;
, ^- c& k5 L4 L0 ~& Q# c+ g/ P9 R仿真时添加state_name进行观察,使用ASCII Radix。
* k4 b/ x, n/ r! A( v- `( L5 ISolution2:
) o* Y& C) L7 c/ H使用如下语句:
( h" t2 G1 o9 d  A& j' G5 N6 \`ifdef SIMULATION * J0 _- ^- c1 E1 C
       parameter S_idle        = "idle  "; ; n0 G; `/ e4 C
       parameter S_decode      = "decode";
# s) I( l4 l. ^4 [: h6 P       parameter S_start       = "start ";
0 f# ^2 L8 u3 R  F4 }, H4 p       parameter S_wait        = "wait  ";
# k" Q( y4 G3 N! Z. H. Y: g1 Z       parameter state_wid_msb = 47; . g& a: _( c% ~
`else
* r9 Q+ u4 [/ o( l       parameter S_idle        = 4'b0001; 6 S3 V- j2 X( b# M, x# r6 D- K
       parameter S_decode      = 4'b0010; 8 A& o$ I! _; k* U* O
       parameter S_start       = 4'b0100;
9 @7 c' O, j0 p1 U- t       parameter S_wait        = 4'b1000;
$ y( t- T1 D) I2 [6 N" r: }) |7 M       parameter state_wid_msb = 3;
1 N8 q1 P$ x2 A/ A3 t3 C9 O`endif  G) S) I5 x# i3 l/ I0 i
reg    [state_wid_msb:0] state;  g" [, F' I' l& Z
只要在仿真的时候`define SIMULATION就可以了。一样用ASCII Radix查看。( D' e. T( p" {% V

, {/ v5 v2 n% c! X; R# i0 \

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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