请选择 进入手机版 | 继续访问电脑版

集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 985|回复: 0

Verilog开发中“=”和“<=”的区别

[复制链接]
fpga_feixiang 发表于 2018-6-22 08:47:36 | 显示全部楼层 |阅读模式
非阻塞(Non_Blocking)赋值方式( 如 b <= a; ), 块结束后才完成赋值操作,值并不是立刻就改变的, 这是一种比较常用的赋值方法。(特别在编写可综合模块时)。

阻塞(Blocking)赋值方式( 如 b = a; ),  赋值语句执行完后,块才结束,值在赋值语句执行完后立刻就改变的,  可能会产生意想不到的结果。

见西安企云基创软件

一般情况下组合逻辑使用=赋值,时序逻辑使用<=赋值。

举个例子:初始化m=1,n=2,p=3;分别执行以下语句
1、begin
   m=n;n=p;p=m;
   end
2、begin
   m<=n; n<=p; p<=m;
   end
结果分别是:1、m=2,n=3,p=2;(在给p赋值时m=2已经生效)
           2、m=2,n=3,p=1;(在begin-end过程中,m=2一直无效而是在整体执行完后才生效)
这两种赋值“=”用于阻塞式赋值;“<=”用于非阻塞式赋值中。
阻塞赋值:阻塞赋值语句是在这句之后所有语句执行之前执行的,即后边的语句必须在这句执行完毕才能执行,所以称为阻塞,实际上就是顺序执行。
非阻塞赋值:非阻塞赋值就是与后边相关语句同时执行,即就是并行执行。
所以一般时序电路使用非阻塞赋值,assign语句一般使用=阻塞赋值;
组合逻辑电路使用阻塞赋值。

在使用阻塞赋值和非阻塞赋值时的八大原则:

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

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

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

4)用always块建立时序和组合逻辑混合电路时,采用非阻塞赋值;

5)不要在同一个always块中同时使用非阻塞赋值和阻塞赋值;

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

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

8)在赋值时,不要用#0延迟;&#65279;&#65279;

&#65279;&#65279;
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-3-29 21:16 , Processed in 0.098044 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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