FPGA之复位设计

一、前言

        在写always语句块的时候大部分都流行这三种写法:

always@(posedge i_clk or negedge i_rst)

        或

        always@(posedge i_clk, posedge i_rst)

        或

always@(posedge i_clk)

        那这三种有什么区别呢?

         前两种使用的是异步复位,只不过一个是高电平复位,一个是低电平复位;最后一个是同步复位。

        这有一个问题,什么是同步复位?什么是异步复位?

       异步复位不依赖于时钟信号的触发,只要异步复位信号一有效,触发器就会被复位生效,且复位电平可以很短,都能够检测到,实时性很强。

       反之同步复位则需要时钟触发,虽然不能实时触发,但是它稳定!

二、复位的目的

        复位的目的主要有三个:

1、上电初始化

       我们设计的逻辑都希望其在上电时有一个可预见的初值,这也是很多设计师使用全局复位的初衷。而且有全局复位也特别适合功能仿真,只要一开始仿真的时候对所有触发器都进行了一次复位,即全部有了初值,避免了未知态(X)的传播

2、从确定的初始状态开始运行

       在一个正在运行的某一部分逻辑电路里,有时候希望其能够回到初始状态的时候,那么这部分逻辑电路则需要一个复位,通过复位能够让它回到最初的状态开始运行。

3、使逻辑电路在陷入异常状态时能够通过复位回到可控的初始状态

       通常,我们无法保证所设计的逻辑在任何情况下都不会发生异常或者出现故障。而复位可以提供一个手段,在出现一些意想不到的异常发生时,如果逻辑无法自己返回正常状态,可以通过复位强制使电路回到初始状态。例如,当一个FIFO发生溢出的时候,为了让FIFO能够回归正常状态,则需要进行复位。

三、复位设计

1、复位时选择高电平还是低电平

       鉴于Xilinx的7系列的触发器原语的复位端口(无论是同步的还是异步的)都是高电平生效,可参考触发器原语定义,如FDCE和FDRE等。如果设计成低电平生效的复位,会需要额外的LUT资源将一个低电平的复位信号取反。因此站在资源利用、以及减少级数的角度,我们复位设计也最好是使用高电平生效。在下图的例子,一个i_rst_n的复位信号设计成了低电平生效,综合工具为了适配寄存器原语FDCE的CLR端口,需要耗费一个LUT来实现取反操作

 

2、同步复位还是异步复位 

        在实现同一种电路的情况下,异步复位比同步复位更消耗资源,产生的逻辑级数也更大。

       下图所示为用异步复位生成的加法器:

下图所示为用同步复位生成的加法器:

       同时异步复位还会带来亚稳态问题,如一个工程若有好几个工作时钟,全部都是同一个复位信号做异步复位,那么有些模块甚至检测不到复位信号。

       所以就不用异步复位了吗?Xilinx 7系的底层reg是同步复位的,7系尽量用同步复位。如果考虑国产平台兼容或者Xilinx u以上系列兼容可以用异步复位。

       既然要用异步复位,怎么规避异步复位的缺点?选择异步复位同步释放!

那么什么是异步复位同步释放?

异步信号的异步释放会导致FF在不同的时刻有效,甚至进入亚稳态,从而影响设计的功能运行。如何避免这个问题呢?考虑同步释放。顾名思义,同步释放就是让复位信号的释放过程与时钟同步,从而确保所有FF在同一时刻有效

异步复位同步释放最简单的方法就是用最高时钟将复位信号往后打几拍,但是最佳的异步复位同步释放的方法就是在异步复位,同步释放的时候将复位信号展宽几百微妙或者几毫秒。

当FPGA在上电的时候,总是需要一些时间给所有逻辑块上电,即使上电时间非常短暂。在一些时序要求不高的场合,我们将其忽略不计似乎也不会对系统设计有什么影响,但是在某些时序要求比较严谨的场合,这几十纳秒和几十微妙的上电,FPGA系统工作其不稳定。因此提出一种有效的解决办法,就是在异步复位,同步释放的时候将系统延时几百微妙或者几毫秒。这样处理的好处是在FPGA上电后内部稳定后在对逻辑进行操作,系统也更加稳定。工程实践中,延时的值根据需求来定。

拥有多个时钟域的工程,每个时钟域有需要拥有属于自己时钟域的复位信号,产生方式就是异步复位同步释放。代码如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值