Aug 28

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

RickySu , 15:07 , 技术经验 , 评论(0) , 引用(0) , 阅读(749) , Via 本站原创 | |
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查看。

参考资料:
Google Group
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]