集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3500|回复: 9

verilog语言,过程性赋值中,“=”和“<=”有何区别?哪位知道?

[复制链接]
IPO 发表于 2011-4-18 09:03:22 | 显示全部楼层 |阅读模式
verilog语言,过程性赋值中,“=”和“<=”有何区别?哪位知道?
 楼主| IPO 发表于 2011-4-18 09:03:50 | 显示全部楼层
阻塞和非阻塞
哦十全_至芯学员 发表于 2011-4-18 11:04:59 | 显示全部楼层
一个套路就是:组合逻辑用=,时序逻辑用<=
daikaichuang 发表于 2011-4-25 23:11:24 | 显示全部楼层
举个例子
初始值 a=0,b=1,c=1

begin a=b;b=c;c=a;end     结果是  a=1;b=1;c=a=1(此时a=1已经有效了)
begin a<=b;b<=c;c<=a;end  结果是 a=1;b=1;c=0(a=1在当前begin-end内是无效的,整体执行完后,才有效)

组合逻辑用=,时序逻辑用<=
一般情况下用<=
zhaohaibin 发表于 2011-4-27 14:33:32 | 显示全部楼层
规律:组合逻辑用=,时序逻辑用<=
fusion317 发表于 2011-4-28 14:04:46 | 显示全部楼层
恩,是这样的
pfwang1014 发表于 2011-7-14 17:23:38 | 显示全部楼层
刚看完这个,有点绕的
风中的承诺 发表于 2011-7-21 17:21:43 | 显示全部楼层
= 这个是按顺序执行的,<=是按并行执行的
zhenxing2000 发表于 2011-7-23 23:55:50 | 显示全部楼层
always 的话就用<=
cherisheric 发表于 2011-7-27 15:34:12 | 显示全部楼层
首先讲讲自己对连续赋值和过程赋值的理解。

举个例子

module Procedual;

reg A,B,Z;

always@(B)

begin

    Z = A;

    A = B;

end

endmodule

module Continuous;

wire A,B,Z;

    assign Z = A;

    assign A = B;

endmodule


     如果在某一时刻B的值发生了改变,那么左边的赋值模块中两个赋值语句Z=A;A=B;讲依次执行,(这是阻塞式赋值,后面分析非阻塞式赋值“<=”两者的区别)。A在这一时刻将被赋为B的新值,而Z没有得到B的值,因为这句是在A=B;之前执行。如果A发生变化的话,这个赋值模块将不会被执行,因为A不是在always的敏感信号列表里面。

    同样的情况在右边的语句中由于B发生变化,引发了assign A=B;的执行,这样继而引发assign Z=A;的执行,这样两个语句都将执行。如果A发生变化,同样会使这两个语句执行。

总结一下:

过程赋值        连续赋值
在always语句或者initial语句内出现

执行与周围其他语句有关

驱动寄存器变量(reg)

使用“=”或者“<=”赋值符号

在一个模块内出现

与其他语句并行执行

在右端操作数的值发生变化的时候执行

驱动线网变量(wire)

有assign关键字




阻塞和非阻塞

1:阻塞赋值“=”

阻塞赋值语句是在这句之后所有语句执行之前执行的,也就是这句没有执行的话后面的语句就无法执行,这也是“阻塞”的意思。可以理解为为顺序执行。

2:非阻塞赋值“<=”

非阻塞赋值语句是和后面的相关语句同时执行,可以理解为并行执行。

说明:

(1).时序电路建模时候,使用非阻塞赋值

(2).组合逻辑建模时候,使用阻塞赋值

     一般assign语句使用“=”阻塞赋值。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-21 00:06 , Processed in 0.088576 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表