找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2929|回复: 0
收起左侧

阻塞(=)与非阻塞(<=)

[复制链接]
ID:51024 发表于 2014-7-30 14:38 | 显示全部楼层 |阅读模式
                         阻塞赋值操作符用等号(即 =)表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量。从理论上讲,它与后面的赋值语句只有概念上的先后,而无实质上的延迟。若在RHS 加上延迟,则在延迟期间会阻止赋值语句的执行,延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。

非阻塞赋值操作符用小于等于号(即 <=)表示。“非阻塞”是指在进程语句(initial和always)中,当前的赋值语句不会阻断其后的语句。非阻塞语句可以认为是分为两个步骤进行的:

①计算等号右边的表达式的值,(我的理解是:在进入进程后,所有的非阻塞语句的右端表达式同时计算,赋值动作只发生在顺序执行到当前非阻塞语句那一刻)。

②在本条赋值语句结束时,将等号右边的值赋给等号左边的变量。

非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能用在"initial"块和"always"块等过程块中。非阻塞赋值不允许用于连续赋值。

1.jpeg

掌握可综合风格的Verilog模块编程的八个原则会有很大的帮助。在编写时牢记这八个要点可以为绝大多数的Verilog用户解决在综合后仿真中出现的90-100%的冒险竞争问题。

1)时序电路建模时,用非阻塞赋值。

2)锁存器电路建模时,用非阻塞赋值。

3)用always块建立组合逻辑模型时,用阻塞赋值。

4)在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。

5)在同一个always块中不要既用非阻塞赋值又用阻塞赋值。

6)不要在一个以上的always块中为同一个变量赋值。

7)用$strobe系统任务来显示用非阻塞赋值的变量值

8) 在赋值时不要使用 #0延迟






回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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