FPGA复位的正确使用

您所在的位置:网站首页 reset按键在哪里 FPGA复位的正确使用

FPGA复位的正确使用

2024-03-15 04:24| 来源: 网络整理| 查看: 265

在没看这篇文章前,回想一下平时我们常用的复位方式:

① 首先,上电后肯定是要复位一下,不然仿真时会出现没有初值的情况;

② 最好有个复位的按键,在调试时按一下复位键就可以全局复位了;

③ 也许是同步复位,也许是异步复位,不同的工程师可能有不同的方案。

但如果认真看了Xilinx的White Paper,就会对复位有了新的认识。

我们把White Paper的内容总结为下面4个问题:

① 需不需要复位?

② 同步复位 or 异步复位?

③ 高复位 or 低复位?

④ 全局复位 or 局部复位?怎么用?

1. 需不需要复位?

看到这个问题,可能很多同学会有点懵,怎么可能不需要复位?其实Xilinx FPGA在系统上电配置时,会有一个GSR(Global Set/Reset)的信号,这个信号有以下几个特点: 

  •   预布线   •   高扇出   •   可靠的

这个信号可初始化所有的cell,包括所有的Flip-Flop和BRAM。

这个信号可初始化所有的cell,包括所有的Flip-Flop和BRAM。

如果我们在程序里用自己生成的复位信号,也只能复位Flip-Flop。

这个GSR信号我们可以在程序中通过实例化STARTUP直接调用,但Xilinx并不推荐这么使用。

 

主要原因是FPGA会把像系统复位这种高扇出的信号放到高速布线资源上,这比使用GSR要快,而且更容易进行时序分析。

虽然有GSR,但这并不是说要避免使用复位信号,以下两种情况就必须要加复位:

带有反馈的模块,比如IIR这种滤波器和状态机,当状态跑飞了,就需要复位一下

 

应用过程中需要复位的寄存器

这个就具体看是什么应用了,我们公司的很多寄存器都需要在调试过程中需要经常复位,像这种复位就是必须的了。

所以,需不需要复位完全看设计。这里多提一点,时序收敛也是一样,主要看设计,而不是约束。

2. 同步复位 or 异步复位?

在HDL中,如果敏感列表中不包含rst,会被综合成同步复位:

always @ ( posedge clk ) begin if(rst) ... end

如果敏感列表中包含rst,则会被综合成异步复位:

always @ ( posedge clk or posedge rst) begin ... end

同步复位的好处,不言而喻,有利于时序分析,降低亚稳态的几率,避免毛刺。

同步信号的缺点:

复位信号有效电平持续时间必须大于时钟周期,不然时钟可能采不到复位

在没有时钟的时候无法复位

也有很多同学会说同步复位会需要额外的资源,但对于Xilinx的FPGA,是没有这个问题的,具体原因后面讲。

对于异步复位,好处就是同步复位的反方面:脉冲宽度没有限制,没有时钟也可以复位。

缺点就是异步电路,容易引起亚稳态,产生毛刺,不利于时序分析,而且不同触发器的复位时间可能不同。下面这个图中,在A时刻接收到复位信号拉低的FF可以在下一个时钟上升沿时就释放复位状态,但C时刻接收到复位信号拉低的FF则在下下个时钟上升沿时才能释放复位状态。

 

按照White Paper上所讲,99.99%的概率这种情况都不会发生,但如果你刚好碰到一次这种现象,那你就是那0.01%。

下面我们来举一个例子来说明同步复位和异步复位,FPGA为V7,代码如下:

module rst_demo( input clk, input rst1, input rst2, input in1, input in2, output reg out1, output reg out2); always @ ( posedge clk ) begin if(rst1) out1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3