关于Verilog中的赋值问题

verilog中赋值有用assign a=b和a<=b这两种赋值方法.我想请教一下这两种赋值方法各用在什么地方?还有分别在什么时序中执行?

assign 语句后的赋值会生成组合逻辑,也就是从b到a会生成一条导线,将他们连接,b的值如果改变,a的值同时也会改变;

a<=b 这种赋值方式为“非阻塞赋值”,这种方式是等所在的begin....end块执行完毕后,才会把b的值赋给a,在这之前,a的值仍然保持原值。例如:

假设a中的值为十进制数 10,b为15,c为20;

begin
b=a; //b的值立即改变,现在b的值为10
c=b; //c的值立即改变,现在c的值为10
end

但是,以下例子又不同:

假设a中的值为十进制数 10,b为15,c为20
begin
b<=a; //b的值不立即改变,现在b的值仍为15
c<=b; //c的值不立即改变,现在c的值仍为20
end

begin块结束后,b被赋给a的值,b为10,c被赋给b的值,c为15。

发现了吗?实际上阻塞赋值生成了一个移位寄存器。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-16
一种是非阻塞式a<=b:
块结束后完成赋值操作;
a的值并不是立刻就改变的;
这是一种比较常用的赋值方法。
一种是阻塞式a=b:
赋值语句执行完后块才结束;
a的值在赋值语句结束后立刻改变;
可能会出现意想不到的结果;
a<=b用在时序逻辑电路中,一般reg型信号都采用这种赋值方式;a=b用在组合逻辑电路中。
第2个回答  2009-07-16
一种是非阻塞式a<=b:
块结束后完成赋值操作;
a的值并不是立刻就改变的;
这是一种比较常用的赋值方法。
一种是阻塞式a=b:
赋值语句执行完后块才结束;
a的值在赋值语句结束后立刻改变;
可能会出现意想不到的结果;

a<=b用在时序逻辑电路中,一般reg型信号都采用这种赋值方式;a=b用在组合逻辑电路中。
第3个回答  2009-07-16
其实数字电路现在可以分组合逻辑电路(也就是没有时钟的驱动的)和时序电路(有时钟驱动的)
在组合逻辑里面,用assign a=b(这个意思就是连一根线,把二者连起来)
如果是在always块里面,要根据时钟的上沿或者下沿操作的时候,用a<=b
这个其实是阻塞赋值和非阻塞赋值的情况,看看夏宇闻老师的书,里面有详细的讲。
谢谢
第4个回答  2009-07-16
时序语句中用a<=b,结构语句中用a=b,
aways 用a<=b
assign用a=b
相似回答