明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 173806|回复: 0

同步复位与异步复位相关问题解析

[复制链接]
发表于 2020-3-9 19:09:14 | 显示全部楼层 |阅读模式

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

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

x

题目:


下列哪种说法正确(    )

A 同步复位增加了时序收敛的难度         

B 同步化异步复位可以保证逻辑正确复位

C 从使用资源的角度看,应该使用异步复位

D 异步复位可能会导致逻辑错误



正确答案是:ABD



解析:

本题目主要考察了在FPGA设计中复位的用法


这道题目也是一道多选题,而且是目前为止正确率最低的一道题目。大家在进行FPGA逻辑设计时肯定经常会用到复位,学习者在入门学习时往往都是使用Altera公司(15年被Intel收购)的芯片,因为Altera公司的开源资料相对较多且开发软件比较容易上手。我们在学习时发现相关的代码实例几乎都是用的异步复位,很多学习者没有太注意这块的内容,都是直接照搬例程,也没有深究其原因,就以为异步复位就是约定成俗的习惯性写法,其实这是一种误区


为什么需要复位呢?这个很容易理解,单片机也常用复位,就是怕系统万一跑飞了还能够初始化后回到正常状态。同样这里使用复位也有这个原因,且我们使用的复位往往都是全局复位,复位有两种,一种是同步复位,一种是异步复位。


我们以D触发器的例子来进行讲解。同步复位的D触发器中的“同步”是和工作时钟同步的意思,也就是说,当时钟的上升沿(也可以是下降沿,一般习惯上为上升沿触发)来到时检测到按键的复位操作才有效,否则无效。如下图所示,最右边的三根红色的竖线表达的就是这种效果,sys_rst_n被拉低后led_out没有立刻变为0,而是当syc_clk的上升沿到来的时候led_out才复位成功,在复位释放的时候也是相同原因。


1.jpg


异步复位的D触发器中的“异步”是和工作时钟不同步的意思,也就是说寄存器的复位不关心时钟的上升沿来不来,只要有检测到按键被按下,就立刻执行复位操作。如下图所示,最右边的两根红色的竖线表达了这种效果,sys_rst_n被拉低后led_out立刻变为0,而不是等待syc_clk的上升沿到来的时候led_out才复位,而在复位释放的时候led_out不会立刻变为key_in的值,因为还要等待时钟上升沿到来到时才能检测到key_in的值,此时才将key_in的值赋值给led_out。


2.png


同步复位的D触发器RTL代码:

111.JPG


根据上面RTL代码综合出的RTL视图如下图所示,由一个选择器和一个寄存器构成:

3.jpg


异步复位的D触发器RTL代码:

111.JPG


根据上面RTL代码综合出的RTL视图如下图所示,只有一个寄存器构成。


4.png


如果复位时的值不是0而改为1,相当于复位时将D触发器置为1,则使用D 触发器上的置位端口,其综合的RTL视图如下图所示。


5.png


通过上面同步复位和异步复位综合出的D触发器的RTL视图对比,我们可以发现采用同步复位会多出来一个选择器的结构,这里我们可能不禁会有疑问,为什么多了一个选择器?原因就是由Altera的最小逻辑单元LE中的寄存器结构决定的,如下图所示,在Chip Planner视图中我们发现LE中的寄存器有一个连接到寄存器的异步复位信号!ACLR的PAD,也就是说Altera器件中的基本单元就是由异步复位且低有效结构的寄存器组成的,如果不按照这个现有的资源来设计我们就需要额外使用其他的资源,从而造成浪费,所以这就是我们所“默认”Altera器件中往往都是异步复位低有效的原因。


6.png


但是在使用Xilinx的芯片时规则又变了,官方文档《Vivado使用误区与进阶》中明确说明尽量避免使用异步复位,且如果使用复位就用高复位,巧的是刚好和Altera推荐的规则相反,也是因为内部结构决定的,这也是这两家公司非常有意思的地方,所以我们在开发Altera和Xilinx的芯片时复位要区别对待。所以C项错误



同步复位的D触发器和异步复位的D触发器的不同点是复位有效的条件是“立刻”执行还是等待“沿”再执行的区别。异步复位有一个明显的问题就是会产生亚稳态的问题。B项和D项说的就是这个问题。全局复位我们往往都是外接一个按键,异步复位时按键一旦按下就立刻进行复位,复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化。如果异步复位信号跟时钟在一定时间间隔内发生变化(Removal time和Recovery time,类似于建立/保持时间),就是说只要复位信号不在时钟有效沿附近变化(复位信号远离时钟有效沿),就可以保证电路的正常复位和撤销,否则Q值将无法确定即产生亚稳态现象。这个时候即使异步复位信号持续时间再长都没有办法,因为不定态已经传递下去。而同步复位就没有这种问题,所以我们需要结合一下两者的优点,异步复位同步释放机制,如下图所示,所以B选项和D选项正确


问题最大的其实就是A选项,很多同学都没选这个选项,以为同步复位的效果会好,其实只要存在复位都会增加布局布线的负担,因为复位会像时钟一样连接到每一个寄存器上,是相当复杂的工程,会增加时序收敛的难度,所以A选项正确。难道不用复位吗?也不完全是,我们还需要参考官方的建议,在《Vivado使用误区与进阶》中提到我们要遵循 Xilinx 建议的复位准则:(1)尽量少使用复位;(2)必须复位时采用同步复位;(3)确保使用高电平有效的复位;(4)避免异步复位(RAMB 和 DSP48 模块中不支持异步复位)。如果不用复位那寄存器的初值我们怎么给呢?在代码中定义寄存器的时候直接在变量名后赋初值即可,Verilog-2001标准支持这种写法。


Xilinx 的复位准则必须严格遵守,根据现场支持的经验来看,很多设计性能的瓶颈就在于设计源代码时没有考虑底层实现器件的硬件结构特点,尤其以复位信号的实现问题最为突出。在Xilinx的官方手册UG949中也写道关于复位的问题,Xilinx器件提供专用的全局置位/复位信号(GSR)。在器件配置结束时,该信号将器件配置中所有顺序单元的初始值。如果未指定初始状态,则为顺序原语分配默认值。在大多数情况下,默认值为零。 FDSE和FDPE 原语是例外,默认为逻辑1。每个寄存器在配置结束时将处于已知状态。因此没有必要单独为初始化加电器件编写全局复位代码。


Xilinx强烈建议用户仔细判断设计何时需要复位,何时不需要复位。大多数情况下,在控制路径逻辑上可能需要复位以确保正常运行。然而在数据路径逻辑上通常不需要复位。



限制复位使用的方法如下:

(1)限制复位网络的总体扇出;

(2)减少复位路由所需的互联数量;

(3)简化复位路径的时序;

(4)从而在许多情况下能够从整体上提升性能、缩小占位面积和降低功耗。

MP801开发板 网络培训班 就业培训班 FPGA学习资料
吴老师18022857217
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-20 18:00 , Processed in 0.075259 second(s), 36 queries .

Powered by Discuz! X3.4

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

© 2001-2019 Comsenz Inc.

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