简单理解Verilog中的阻塞赋值和非阻塞赋值

本文介绍了Verilog硬件描述语言中阻塞赋值(=)和非阻塞赋值(<=)的概念及其使用。阻塞赋值在组合逻辑中使用,等待表达式计算完成后才进行赋值;而非阻塞赋值则用于时序逻辑,先计算表达式,再在下一个时钟周期更新变量值。在实际设计中,组合电路用阻塞赋值,时序电路用非阻塞赋值。同时强调了在编写always块时的注意事项,如触发条件要完整,if-else语句要匹配等。
摘要由CSDN通过智能技术生成

在做芯片设计写硬件描述语言时,对于初学者必然面对的一个问题是,该如何使用阻塞赋值和非阻塞赋值。对于个问题,首先要理解什么是阻塞赋值?什么是非阻塞赋值?

阻塞赋值

从形式上来看,阻塞赋值用等号(=)表示。从字面意思上来看,赋值时被阻塞了。比如a=b,意思是把b值赋给a,从表达上来看a永远和b的值是相等的。但是如果b是一个表达式,比如b=c+d+e,或者其他复杂表达形式,那么要想让b值赋到a上,那么b必须完成c+d+e计算。那么这样a被赋值是有一个阻塞的过程。

非阻塞赋值

从形式上来看,非阻塞赋值用小于等于号(<=)表示。同样从字面意思上来看,赋值过程是没有阻塞的。为什么没有阻塞呢?因为非阻塞赋值用于时序电路,综合出来的是寄存器。对于a<=b,可以看作2个过程(1)在赋值开始时,计算非阻塞赋值b;(2)在赋值结束时,把a更新为b。

实际使用

在实际使用中,对于可综合电路,只要记住一点,组合电路要使用阻塞赋值,时序电路使用非阻塞赋值。

对于组合电路,需要注意,1.always块的触发条件要写全,或者用always @(*);2. always块中的if else要匹配全。只有if 而没有else与其匹配。或者if ... else if ... 没有else了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值