FPGA复位

你真的会Xilinx FPGA的复位吗?

作者:NingHeChuan

Get Smart About Reset: Think Local, Not Global。
  对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口,通过拨码开关硬件复位。后来也看了一些书籍,采用异步复位同步释放,对自己设计的改进。

  不过自从我研读了Xilinx的White Paper后,让我对复位有了更新的认识。

  One of the commandments of digital design states,"Thou shalt have a master reset for all flip-flops so that the test engineer will love you, and your simulations will not remain undefined for time eternal."

  这句是用来装逼的。使用全局复位有利于我们仿真,所有的寄存器都是有初始值的,也可以在任意时刻让你的寄存器恢复初值,所以验证工程师很喜欢这样的设计,但是Xilinx建议的是尽量避免使用全局复位,这是为什么呢。

Xilinx FPGA复位方法讲解

作者:材哥,玩儿转FPGA

推荐复位方法

➀ 能不复位尽量不用复位,如何判断呢?如果某个模块只需要上电的时候复位一次,工作中不需要再有复位操作,那么这个模块可以不用复位,用上电初始化所有寄存器默认值,比如reg [1:0] ff = 2'b01;这种verilog2001的方法vivado是支持的,上电后寄存器ff的值就是2'b01和你定义的是一样的。

➁ 如果要复位就统一同步高复位。也就是说复位要跟所在时钟同步,在时钟上升沿的时候复位逻辑,同时还要是高电平复位逻辑,低电平正常工作。

异步复位的缺点

异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无效)的话,可能会导致触发器输出的亚稳态。

触发器有2个重要特点:

1.异步复位信号释放(对低电平有效的复位来说就是上跳沿)与紧跟其后的第一个时钟有效沿之间,有一个必须间隔的最小时间称为trecovery(recovery time,恢复时间)。

重点!

Xilinx FPGA复位浅析

1. 普通逻辑的复位
对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位和异步复位没有区别,当然由于器件内部信号均为高有效,因此推荐使用高有效的控制信号,最好使用高有效的同步复位。输入复位信号的低有效在顶层放置反相器可以被吸收到IOB中。

下面细说原因
先比较一下同步复位和异步复位的区别:
首先是同步复位,同步的控制信号包括同步置位/复位和使能,可以被吸收到LUT中,目的是为了防止控制集不同的LUT不能被综合到同一个slice中,这样虽然提高了了LUT的使用率,却降低了slice的使用率,得不偿失。

控制信号扇出不大于16的情况都可以尽可能的被吸收到同一个slice的LUT中去,在vivado中可以使用control_set_opt_threshold进行设置。

同步复位
always @(posedge I_sys_clk)
begin
if(I_rst)
begin
OUT1 <= 0;
end
else
begin
OUT1 <= &{a1,a2,a3,a4,a5,a6};
end
end

同步内容