学习Verilog HDL语言过程中关于三种常用赋值语句的困惑!

正在学习VerilogHDL语言,学习过程中遇到困惑,就是在Verilog中讲到了有三种常用的赋值语句,一个是连续赋值语句assign,一个是阻塞赋值语句=,一个是非阻塞... 正在学习Verilog HDL语言,学习过程中遇到困惑,就是在Verilog 中讲到了有三种常用的赋值语句,一个是连续赋值语句assign,一个是阻塞赋值语句=,一个是非阻塞赋值语句<=,请问这三个到底有什么区别,在实际编程中,各应该怎样使用?
什么情况下,用“assign”连续赋值语句?
什么情况下,用“=”阻塞赋值语句?
什么情况下,用“<=”非阻塞赋值语句?

最好每个都用实例来说明,谢谢!
展开
 我来答
leehyfer
2010-09-13 · TA获得超过1517个赞
知道小有建树答主
回答量:576
采纳率:100%
帮助的人:221万
展开全部
assign 只能给wire类型的变量赋值,而且它只能用来实现组合逻辑,它的赋值必须用=号。assign赋值语句不能放在alway里面。

对一个变量赋值,如果在always外面,只能用“assign wire_name = ……”或者parameter的格式。如果在always里面,有两种情况。
(1)如果多个变量被赋值的时候,是需要同时的,那么就用<=
(2) 如果多个变量被赋值的时候,需要有先后次序,那么就用=

通俗来讲,就像是3个人到ATM取钱的时候,(1)是有3台ATM,这三个人同时开始,同时取完;(2)是这3个人排队一个一个取。
但是对rtl仿真来讲,可以认为(1)和(2)的执行是“瞬间”完成的,即它们计算的时间为0.
Laura_G
推荐于2017-12-16
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
1、=左边是wire类型,可在定义时用“assign”连续赋值语句;
例如:
wire[7:0] a;
input[7:0] c,d;
assign a=c+d;
则在后面的程序中要用到c+d的值就可以直接用a来表示了
这对模块间的互联非常有用

“=”阻塞赋值语句,相当于串行语句,即所有该类在所在模块内按顺序执行
“<=”非阻塞赋值语句,相当于并行语句,当该语句所在模块结束时,所有带“<=”的语句同时执行。

例如:
if(ena)
begin
a<=c;
a=b;
c=d;
end
若执行前,a=0,b=1,c=1,d=0,
则可以这样理解执行顺序和结果 :先执行a=b,得到a=0,再执行c=d,得到c=0;
当该条件语句执行完时,得到a==c==0的执行结果
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简简1991
2010-09-07
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
Verilog HDL 中赋值语句分“assign”连续赋值语句和过程赋值语句(阻塞赋值语句和非阻塞赋值语句在)。
连续赋值操作取决于表达式右侧变量是否变化,只要右侧变化,就会进行赋值操作;主要用于端口变量的赋值,也可用在组合逻辑的行为描述中。
阻塞赋值语句将阻塞进程,直到该赋值事件执行完才执行下一条语句;这种语句只能满足数据的一般传送。
非阻塞赋值语句直到整个块的操作完成才一次完成赋值操作。这是一种并行机制,能够实现自动跟踪赋值。如时序逻辑电路中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
霜皛06d
2010-09-07 · TA获得超过1204个赞
知道小有建树答主
回答量:707
采纳率:33%
帮助的人:502万
展开全部
请注意 verilog是硬件语言,你在写代码的时候 要非常知道你写的将会变成什么东西,而不是软件的思维

assign 是给组合逻辑赋值
= 组合逻辑使用
<= 时序逻辑使用 也就是寄存器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
峥峥好
2010-09-05 · 超过31用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:0
展开全部
多看看书吧,你这个问题回答者很累人,呵呵,这方面的书很多的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式