明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 8425|回复: 1

【FPGA至简设计原理与应用】第一篇第三章硬件描述语言Verilog第6节阻塞or非阻赋值

    [复制链接]
发表于 2020-9-17 15:25:06 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。


FPGA至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。



6.5 阻塞赋值和非阻塞赋值

本文档编号:001100000062
1. 本节主要介绍,时序逻辑的代码,一般有两种:同步复位时序逻辑和异步复位时序逻辑(本教学统一采用异步时钟逻辑);D型触发器的介绍,包括:D触发器的结构、波形、代码以及如何看FPGA波形;时钟的介绍,时钟的意义,时钟频率和时钟周期的换算;时序逻辑代码和硬件的关系,即评估verilog代码好坏的最基本标准,不是看代码行数而是看硬件;阻塞赋值和非阻塞赋值,前者位顺序赋值,后者位同时赋值。
2. ALTERA和VIVADO文档




always语句块中,Verilog语言支持两种类型的赋值:阻塞赋值和非阻塞赋值。阻塞赋值使用“=”语句;非阻塞赋值使用“<=”语句。

阻塞赋值:在一个“begin…end”的多行赋值语句,先执行当前行的赋值语句,再执行下一行的赋值语句。
非阻塞赋值:在一个“begin…end”的多行赋值语句,在同一时间内同时赋值。
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
begin
  
     c = a;
  
     d = c + a;
  
end
  
  

begin
  
     c <= a;
  
     d <= c + a;
  
end

上面两个例子中,14行部分是阻塞赋值,程序会先执行第2行,得到结果后再执行第3行。69行这一段是非阻塞赋值,第7行和第8行的赋值语句是同时执行的。
具体分析一下这两段代码这件的区别:假设当前c的值为0d的值为0a的新值为1

阻塞赋值的执行过程和结果为:程序先执行第2行,此时c的值将更新为1,然后再执行3行,此时c+a也就是相当于1+1=2,即d的值为2

非阻塞赋值的执行过程和结果为:程序同时执行第7行和8行。需要特别注意是,在执行第8行的时候,第7行还并未执行,这也就意味着c的值还没有发生变化,即此时c的值为0。同时执行的结果是,c的值为1d的值为1

根据笔者的规范要求,组合逻辑中应使用阻塞赋值“=”,时序逻辑中应使用非阻塞赋值“<=”。读者可以将这个规则牢牢记住,按照这一规则进行设计绝对不会发生错误。制定这个规范的原因并不是考虑语法需要,而是为了正确的进行硬件描述。


0

主题

6

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2021-3-18 17:27:38 | 显示全部楼层
不错的,非常好

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

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-23 00:21 , Processed in 0.051500 second(s), 21 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

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