参考转载大佬:FPGA-xilinx系列芯片的复位,你真的明白吗?
1. 不同系列FPGA复位区别:
复位的目的是使得器件强制进入到可以稳定的工作的确定状态,这就避免了器件在上电后进入到随机状态导致进入到无法判断状态(也就是死机)。然不同系列的FPGA芯片复位方式会有差别。
1.1 lattice
lattice系列的FPGA而言,低端器件(如iCE40):无专用全局复位网络,需手动同步处理。高端器件(如ECP5)支持GSR,但是需要PUR(上电复位)引脚或者内部逻辑触发,推荐使用低电平同步复位(因全局资源有效)。
1.2 Intel
对于Intel的FPGA而言,因为里面的寄存器flip-flop只支持低电平有效的异步复位,所以推荐使用低有效的异步复位。
1.3 Xilinx
xilinx系列的FPGA而言,寄存器flip-flop支持高电平有效的异步复位/置位和同步复位/置位。由于器件内部信号均为高有效,因此推荐使用高电平有效的同步复位。如果外部输入复位为低电平有效的复位信号,那么在顶层做取反处理,反相器可以被吸收到IOB中。
2. xilinx为什么不推荐异步复位
2.1 产生亚稳态
异步复位信号的释放(从低到高跳变)若与时钟边沿(如上升沿)时间窗口重叠,会导致寄存器的建立时间(Setup Time)和保持时间(Hold Time)要求无法满足。此时,输入信号在时钟边沿的亚稳态窗口内变化,使寄存器输出处于不确定状态(介于高电平和低电平之间),直到额外时间后才能稳定到确定值。 会导致部分寄存器产生亚稳态。
2.2 浪费布线资源
器件无全局复位缓冲(如Lattice低端器件):异步复位如果没有被正确约束,工具可能无法将其映射到专用的全局复位网络(如GSR),而是使用大量的普通布线资源。
高扇出:复位信号通常驱动大量寄存器,普通布线无法高效支持高扇出,就会导致占用大量布线资源(如LUT作为缓冲)。增加复位路径延迟,引发时序违例。
2.3 浪费Slice资源
使用异步复位的寄存器和不使用异步复位的寄存器不能包装在一个Slice。
2.4 降低DSP和BRAM性能
xilinx内部的DSP和BRAM中,只有同步复位资源,异步复位的逻辑是无法包含到到BRAM/DSP内部的,工具会将异步复位先使用LUT资源同步化在输入到BRAM/DSP中,即增加了时序路径长度降低了性能
3. xilinx复位建议
3.1 高电平同步复位
xilinx底层寄存器flip-flop推荐使用高电平同步复位
3.2 避免复位
寄存器其实很多情况不需要复位,特别是对于只进行赋值的寄存器,可以在寄存器初始化时候直接赋值:reg [3:0] A = 4'h0;
3.3 模块化复位
模块化复位可以降低扇出,保证电路的稳定性:
reg m0_rst, m1_rst,m2_rst;
always @(clk) begin
m0_rst <= sync_rst;
m1_rst <= sync_rst;
m2_rst <= sync_rst;
end
3.4 异步复位同步释放
如模块中一定需要异步复位,就需要做异步复位同步释放的的功能。