ime2224的个人空间 https://blog.eetop.cn/?1101565 [收藏] [复制] [分享] [RSS]

日志

关于verilog写状态机注意事项

已有 1660 次阅读| 2014-10-22 17:00 |个人分类:IC

a.状态机的定义可以用parameter定义,但是不推荐使用`define宏定义的方式,因为'define宏定义在编译时自动替换整个设计中所定义的宏,而parameter仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。
b.
设计时序always模块时一定要使用"=>"非阻塞赋值方式。采用非阻塞赋值方式消除了很多竞争冒险的隐患。
引申讨论一个问题:在使用非阻塞赋值的时候,很多设计者采用"intra-assignment timing delay"(在非阻塞赋值前人为加入一个很小单位的延时)。

如下例:

 always (posedge clk or posedge rst)
   if (rst)
state <= #1 IDLE;
   else
state <= #1 nextstate;
关于这种写法的阐释有下面几点:
I.
首先,这种描述是行为级描述方式,仅仅在仿真时起作用,在综合时会自动被综合器忽略。也就是通常所说的延时描述是不可综合的。
II.
这种描述的好处之一是:它简单模拟了赋值过程寄存器内部的clock-to-output的延时,在做行为级功能仿真的时候,也可以发现一些由于寄存器固有延迟造成的时序和功能问题。
III.
避免了由RTL级代码向门级描述转变过程中的一些潜在错误。
models from an RTL model.
这种方式很好的避免了由RTL级代码向门级代码转换的过程中的hold时间带来的问题。
IV.
使用这种用法必须明确,综合是延时是被忽略的,所有同步时序的赋值仍然是按照非阻塞方式进行的

 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 2

    关注
  • 1

    粉丝
  • 0

    好友
  • 2

    获赞
  • 0

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 ) |网站地图

GMT+8, 2025-10-19 05:16 , Processed in 0.025567 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部