mcupro 发表于 2011-6-26 22:54:31

【点滴积累FPGA】例说阻塞与非阻塞的差别

阻塞和非阻塞的差别直观上表现在<= 和=的差别.但要表现出这个差别是有条件的.

看一下三个测试模块:

module test1(
input clk,
input din,
output reg dout
);
reg a,b,c;
always @ (posedge clk)a=din;
always @ (posedge clk)b=a;
always @ (posedge clk)c=b;
always @ (posedge clk)dout=c;
endmodule

module test2(
input clk,
input din,
output reg dout
);
reg a,b,c;
always @ (posedge clk)
begin
a<=din;
b<=a;
c<=b;
dout<=c;
end
endmodule

module test3(
input clk,
input din,
output reg dout
);
reg a,b,c;
always @ (posedge clk)
begin
a=din;
b=a;
c=b;
dout=c;
end
endmodule

1,test1,test2模块产生了正确的流水寄存器.而test3没有,只产生了一个8位register.
2,test3是该非阻塞的时候没有正确非阻塞.应该使用<=;
3,在test1时候虽然是阻塞赋值但是由于是采用单独的always进行边缘赋值,因此产生了正确的结果.
4,形式服从于内容,只有在内容一样的时候,形式的作用才体现出来(test2和test3就是通过形式区别内容的).要对形式和内容的辨证关系有明确的意识.抓住内容实质,重视形式表现.
5,其实完全没有必要去死记阻塞(=)与非阻塞(<=)的差别,知道到什么样的电路需要用什么样的HDL去表达就可以,是去理解。我每次在说阻塞非阻塞对应符号时候都有点胆战心惊,生怕对应错,但是我知道什么时候要区别<=和=这两个符号,什么时候不需要区别以及区别的时候用<=还是=,这应该理解了实质,就够了。
6,另外千万不要认为只要是带有<=都生成了寄存器,还要看触发条件是否为边缘触发。always@* outp<=inp; 这句就相当于直接连通inp到outp而没有生成寄存器。



http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_652541BOEMS1.JPG
test1 test2模块生成的RTL原理图   (原文件名:test12.JPG)

http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_652542WF9CAM.JPG
test3模块生成的RTL原理图(原文件名:test3.JPG)

NJ8888 发表于 2011-6-26 23:03:28

这么多人用Verilog,我没学过,一直用VHDL,好像VHDL中没有阻塞非阻塞概念。哪位两种语言都通的解释下,从上面图看,第一张是移位寄存器,第二张是触发器,实际上写代码是自己心中有数的,感觉那个概念是教材书本上的作用,实际中,用VHDL,有经验的人不会错的。不当之处楼下指出,谢谢

yuphone 发表于 2011-6-26 23:10:55

http://www.cnblogs.com/yuphone/archive/2010/11/10/1874465.html

learner123 发表于 2011-6-27 01:25:31

vhdl也是有所谓阻塞和非阻塞的,当然变量属性就决定了的。

Jigsaw 发表于 2011-6-27 07:38:43

test3是被综合软件优化掉了吧

chenming1989 发表于 2011-7-12 23:13:22

我的理解:当有几个《=赋值语句时,就是并行执行,如果有延迟就按各自的延迟执行。=赋值语句也可以实现非阻塞的功能,只要将讲右侧的值先寄存在一个变量中。

wjf0509 发表于 2011-7-13 22:20:08

不错

zxcao 发表于 2011-7-18 18:25:48

mark

xiaojia0812 发表于 2011-7-19 09:18:46

回复【楼主位】mcupro 李伟
-----------------------------------------------------------------------

VHDL里面有 信号代入和变量值代入的区别。

xiaojia0812 发表于 2011-7-19 09:22:23

mark
页: [1]
查看完整版本: 【点滴积累FPGA】例说阻塞与非阻塞的差别