找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3627|回复: 0
打印 上一主题 下一主题
收起左侧

verilog学习笔记一:阻塞赋值与非阻塞赋值

[复制链接]
跳转到指定楼层
楼主
ID:51025 发表于 2014-8-29 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、使用条件:阻塞赋值与非阻塞赋值只用于过程赋值语句中,也就是用在always语句和initial语句中,在assign语句中一律用“=”,例如:assign cin = ain + bin,因为本语句为数据流描述方式。
2、赋值对象:
阻塞赋值与非阻塞赋值的赋值对象只能是变量型数据类型,如reg, integer等,一般是reg型
3、区别
阻塞赋值语句:顺序执行,在下一条语句执行之前,上一条语句必须执行完毕。
非阻塞赋值语句:不会阻塞同一个快语句中的其他语句的执行,即各种非阻塞语句同时执行。
例如
例1、module test (i_clk, i_din, o_out1, o_out2);
   input i_clk, i_din;
   output reg o_out1, o_out2;
   always @ (posedge i_clk)
   begin
o_out1 = i_din;    //语句1
o_out2 = o_out1;   //语句2
   end
   endmodule
该例子中,先执行语句1,当语句1执行完毕后,再来执行语句2,故执行完毕后
   o_out1 = i_din
   o_out2 = i_din
于是该电路的RTL图为







例2module test (i_clk, i_din, o_out1, o_out2);
   input i_clk, i_din;
   output reg o_out1, o_out2;
   always @ (posedge i_clk)
   begin
o_out1 <= i_din;    //语句1
o_out2 <= o_out1;   //语句2
   end
   endmodule
该例子中,语句1和语句2同时执行,故执行完毕后
   o_out1 = i_din
   o_out2 = 前一时刻的 o_out1
故RTL图为

4、常用规则
1)、当描述时序逻辑时,用非阻塞语句,即“<=”;
2)、当描述组合逻辑时,用阻塞语句,即“=”;
3)、当在一个always模块中,同时描述组合逻辑与时序逻辑时,用非阻塞语句,即“<=”;
4)、在同一个always模块中,不要混合使用阻塞和非阻塞语句。


评分

参与人数 1威望 +30 黑币 +50 收起 理由
admin + 30 + 50 上传资料的奖励,大家多多上传可赚取M币

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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