学习Verilog HDL语言过程中关于三种常用赋值语句的困惑!
正在学习VerilogHDL语言,学习过程中遇到困惑,就是在Verilog中讲到了有三种常用的赋值语句,一个是连续赋值语句assign,一个是阻塞赋值语句=,一个是非阻塞...
正在学习Verilog HDL语言,学习过程中遇到困惑,就是在Verilog 中讲到了有三种常用的赋值语句,一个是连续赋值语句assign,一个是阻塞赋值语句=,一个是非阻塞赋值语句<=,请问这三个到底有什么区别,在实际编程中,各应该怎样使用?
什么情况下,用“assign”连续赋值语句?
什么情况下,用“=”阻塞赋值语句?
什么情况下,用“<=”非阻塞赋值语句?
最好每个都用实例来说明,谢谢! 展开
什么情况下,用“assign”连续赋值语句?
什么情况下,用“=”阻塞赋值语句?
什么情况下,用“<=”非阻塞赋值语句?
最好每个都用实例来说明,谢谢! 展开
5个回答
展开全部
assign 只能给wire类型的变量赋值,而且它只能用来实现组合逻辑,它的赋值必须用=号。assign赋值语句不能放在alway里面。
对一个变量赋值,如果在always外面,只能用“assign wire_name = ……”或者parameter的格式。如果在always里面,有两种情况。
(1)如果多个变量被赋值的时候,是需要同时的,那么就用<=
(2) 如果多个变量被赋值的时候,需要有先后次序,那么就用=
通俗来讲,就像是3个人到ATM取钱的时候,(1)是有3台ATM,这三个人同时开始,同时取完;(2)是这3个人排队一个一个取。
但是对rtl仿真来讲,可以认为(1)和(2)的执行是“瞬间”完成的,即它们计算的时间为0.
对一个变量赋值,如果在always外面,只能用“assign wire_name = ……”或者parameter的格式。如果在always里面,有两种情况。
(1)如果多个变量被赋值的时候,是需要同时的,那么就用<=
(2) 如果多个变量被赋值的时候,需要有先后次序,那么就用=
通俗来讲,就像是3个人到ATM取钱的时候,(1)是有3台ATM,这三个人同时开始,同时取完;(2)是这3个人排队一个一个取。
但是对rtl仿真来讲,可以认为(1)和(2)的执行是“瞬间”完成的,即它们计算的时间为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的执行结果
例如:
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的执行结果
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Verilog HDL 中赋值语句分“assign”连续赋值语句和过程赋值语句(阻塞赋值语句和非阻塞赋值语句在)。
连续赋值操作取决于表达式右侧变量是否变化,只要右侧变化,就会进行赋值操作;主要用于端口变量的赋值,也可用在组合逻辑的行为描述中。
阻塞赋值语句将阻塞进程,直到该赋值事件执行完才执行下一条语句;这种语句只能满足数据的一般传送。
非阻塞赋值语句直到整个块的操作完成才一次完成赋值操作。这是一种并行机制,能够实现自动跟踪赋值。如时序逻辑电路中。
连续赋值操作取决于表达式右侧变量是否变化,只要右侧变化,就会进行赋值操作;主要用于端口变量的赋值,也可用在组合逻辑的行为描述中。
阻塞赋值语句将阻塞进程,直到该赋值事件执行完才执行下一条语句;这种语句只能满足数据的一般传送。
非阻塞赋值语句直到整个块的操作完成才一次完成赋值操作。这是一种并行机制,能够实现自动跟踪赋值。如时序逻辑电路中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请注意 verilog是硬件语言,你在写代码的时候 要非常知道你写的将会变成什么东西,而不是软件的思维
assign 是给组合逻辑赋值
= 组合逻辑使用
<= 时序逻辑使用 也就是寄存器
assign 是给组合逻辑赋值
= 组合逻辑使用
<= 时序逻辑使用 也就是寄存器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多看看书吧,你这个问题回答者很累人,呵呵,这方面的书很多的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询