搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2011-6-26 22:54:31 | 显示全部楼层 |阅读模式
阻塞和非阻塞的差别直观上表现在<= 和=的差别.但要表现出这个差别是有条件的.

看一下三个测试模块:

module test1(
input clk,
input [7:0] din,
output reg [7:0] dout
);
reg [7:0] 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 [7:0] din,
output reg [7:0] dout
);
reg [7:0] a,b,c;
always @ (posedge clk)
begin
a<=din;
b<=a;
c<=b;
dout<=c;
end
endmodule

module test3(
input clk,
input [7:0] din,
output reg [7:0] dout
);
reg [7:0] 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而没有生成寄存器。




test1 test2模块生成的RTL原理图   (原文件名:test12.JPG)


test3模块生成的RTL原理图  (原文件名:test3.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

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

出0入0汤圆

发表于 2011-6-26 23:10:55 | 显示全部楼层
http://www.cnblogs.com/yuphone/archive/2010/11/10/1874465.html

出0入0汤圆

发表于 2011-6-27 01:25:31 | 显示全部楼层
vhdl也是有所谓阻塞和非阻塞的,当然变量属性就决定了的。

出0入0汤圆

发表于 2011-6-27 07:38:43 | 显示全部楼层
test3是被综合软件优化掉了吧

出0入0汤圆

发表于 2011-7-12 23:13:22 | 显示全部楼层
我的理解:当有几个《=赋值语句时,就是并行执行,如果有延迟就按各自的延迟执行。=赋值语句也可以实现非阻塞的功能,只要将讲右侧的值先寄存在一个变量中。

出0入0汤圆

发表于 2011-7-13 22:20:08 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-7-18 18:25:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-19 09:18:46 | 显示全部楼层
回复【楼主位】mcupro 李伟
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-7-19 09:22:23 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 13:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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