IPO 发表于 2011-4-18 09:03:22

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

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]
查看完整版本: verilog语言,过程性赋值中,“=”和“<=”有何区别?哪位知道?