verilog之编程应该注意的事项

17 篇文章 16 订阅

一、综合的一般原则

1) 综合之前一定要进行仿真,这是因为仿真会暴露逻辑错误,所以建议大家这样做。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。
2) 每一次布局布线之后都要进行仿真,在器件编程或流片之前要做最后的仿真。
3) 用Verilog HDL描述的异步状态机是不能综合的,因此应该避免用综合器来设计,如果一定要设计异步状态机则可用电路图输入的方法来设计。
4) 如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。

二、always块指导原则

1) 每个always块只能有一个事件控制"@(event-expression)",而且要紧跟在always关键字后面。
2) always块可以表示时序逻辑或者组合逻辑,也可以用always块既表示电平敏感的透明锁存器又同时表示组合逻辑。但是不推荐使用这种描述方法,因为这容易产生错误和多余的电平敏感的透明锁存器。
3) 带有posedge 或 negedge 关键字的事件表达式表示沿触发的时序逻辑,没有posedge 或negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两种都表示。在表示时序和组合逻辑的事件控制表达式中如有多个沿和多个电平,其间必须用关键字 “ or ” 连接 。
4) 每个表示时序always块只能由一个时钟跳变沿触发,置位或复位最好也由该时钟跳变沿触发。
5) 每个在always块中赋值的信号都必需定义成reg型或整型。整型变量缺省为32bit,使用Verilog操作符可对其进行二进制求补的算术运算。综合器还支持整型量的范围说明,这样就允许产生不是32位的整型量。句法结构: integer[<msb>:<lsb>]。
6) always块中应该避免组合反馈回路。每次执行always块时,在生成组合逻辑的always块中赋值的所有信号必需都有明确的值;否则,需要设计者在设计中加入电平敏感的锁存器来保持赋值前的最后一个值,只有这样综合器才能正常生成电路。如果不这样做综合器会发出警告提示设计中插入了锁存器。如果在设计中存在综合器认为不是电平敏感锁存器的组合回路时,综合器会发出
错误信息(例如设计中有异步状态机时)。

赋值:
1) 对一个寄存器型(reg)和整型(integer)变量给定位的赋值只允许在一个always块内进行,如在另一always块也对其赋值,这是非法的。
2) 把某一信号值赋为'bx,综合器就把它解释成无关状态,因而综合器为其生成的硬件电路最简洁。

三、异步、同步置位与复位

(1)异步置位与复位是与时钟无关的.当异步置位与复位到来时它们立即分别置触发器的输出为1或0,不需要等到时钟沿到来才置位或复位。把它们列入always块的事件控制括号内就能触发always块的执行,因此,当它们到来时就能立即执行指定的操作。

(2)同步置位与复位是指只有在时钟的有效跳变沿时刻置位或复位信号才能使触发器置位或复位(即,使触发器的输出分别转变为逻辑1或0)。

四、阻塞与非阻塞赋值

 在描述组合逻辑的 always 块中用阻塞赋值,则综合成组合逻辑的电路结构。
 在描述时序逻辑的 always 块中用非阻塞赋值,则综合成时序逻辑的电路结构。

 

五、模块编程要点

1) 时序电路建模时,用非阻塞赋值。
2) 锁存器电路建模时,用非阻塞赋值。
3) 用 always 块建立组合逻辑模型时,用阻塞赋值。
4) 在同一个 always 块中建立时序和组合逻辑电路时,用非阻塞赋值。
5) 在同一个 always 块中不要既用非阻塞赋值又用阻塞赋值。
6) 不要在一个以上的 always 块中为同一个变量赋值。
7) 用$strobe 系统任务来显示用非阻塞赋值的变量值
8) 在赋值时不要使用 #0 延迟
 

 


未完持续....................

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值