fpga复位电路设计_xilinx7系列fpga介绍

(90) 2024-06-26 14:01:03

目录

一、“复位”概述

1.1 什么是复位

1.2 复位的目的

1.3 复位的分类

二、“高复位”or“低复位”

三、几种实现方法

3.1 同步/异步复位

3.1.1 同步复位

3.1.2 异步复位

3.2 异/同步复位优缺点

3.2.1 同步复位的优点:

3.2.2 同步复位的缺点:

3.2.3 异步复位优点(与同步复位缺点相对应来看):

3.2.4 异步复位缺点(同上,与同步复位优点相对应来看):

3.3 异步复位-同步释放

四、补充说明


一、“复位”概述

1.1 什么是复位

复位可以将FPGA芯片上所有“时序器件”恢复初始态(一般认为复位后器件输出是0)。且复位只针对时序器件存在,LUT就不存在复位。

1.2 复位的目的

目前接触的3GPP-PHY层通信链路设计中,复位大致用于两处:

1)上电复位:让器件进入一个稳定的可工作状态,防止器件上电后以一个非期望初值运行,而导致功能异常(跑飞了)。

2)异常复位:纠正链路功能异常。

1.3 复位的分类

同步复位、异步复位、异步复位-同步释放

二、“高复位”or“低复位”

针对Xilinx的FPGA芯片,Xilinx官网手册推荐使用“高复位”(控制信号也推荐高有效),究其原因是因为Xilinx的触发器复位管脚都是高电平有效的,所以如果使用低电平复位反而会引入反相器进行处理。

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第1张

也可通过下面实验的综合后结果看出,低电平复位会多消耗一个LUT:

a.高电平复位

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第2张

b.低电平复位

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第3张

三、几种实现方法

3.1 同步/异步复位

所谓的“同步” “异步”,指复位的执行与时钟(CLK)是否同步,可通过敏感列表中是否包含复位信号判断。

同步复位:复位信号和时钟同步,当时钟上升沿检测到复位信号,执行复位操作。

always@(posedge clk)

异步复位:不受时钟影响,只要复位信号有效,就会进行复位。

always@(posedge clk or posedge rst)

3.1.1 同步复位

Verilog HDL描述为:

module test_rst( input i_clk, input i_rst, input i_din, output reg o_dout ); always@(posedge i_clk) begin if(i_rst) o_dout <= 1'b0; else o_dout <= i_din; end endmodule

综合后的RTL视图:

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第4张

3.1.2 异步复位

Verilog HDL描述为:

module test_async_rst( input i_clk, input i_rst, input i_din, output reg o_dout ); always@(posedge i_clk or posedge i_rst) begin if(i_rst) o_dout <= 1'b0; else o_dout <= i_din; end endmodule

综合后的RTL视图:

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第5张

3.2 异/同步复位优缺点

3.2.1 同步复位的优点:

  • 可使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高
  • 确保复位只发生在有效时钟沿:

1)可过滤掉高于时钟频率的rst信号毛刺

2)有效防止rst信号不满足“Trecovery (recovery time,恢复时间)” or “Tremoval (removal time,消除时间)”而产生的亚稳态。

3.2.2 同步复位的缺点:

  • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。
  • 由于Xilinx目标库内的D触发器只有异步复位端口,如采用同步复位,就会耗费更多的逻辑资源(每次增加一个LUT作为反相器)。
  • 由于依赖于时钟,所以当使用门控时钟时,有可能因为时钟被禁止而导致电路没有复位。

3.2.3 异步复位优点(与同步复位缺点相对应来看):

  •     异步复位信号识别方便,而且可以很方便的使用全局复位???
  •     由于大多数的厂商目标库内的触发器都有异步复位端口,可以节约逻辑资源。

3.2.4 异步复位缺点(同上,与同步复位优点相对应来看):

  •     复位信号容易受到毛刺的影响。
  •     复位释放时刻恰在亚稳态窗口内时,不满足“Trecovery (recovery time,恢复时间)” or “Tremoval (removal time,消除时间)”而产生的亚稳态

3.3 异步复位-同步释放

结合同/异步复位各自的优点,一般设计中采用“异步复位-同步释放”方式,即:

1)复位信号的到来是随机的,不与时钟信号的同步

2)而复位信号释放的时候受到时钟信号的同步

Verilog HDL描述为:

module test_rst( input i_clk, input i_rst, output reg o_rst ); reg s_rst_mid; reg s_rst_out; always@(posedge i_clk or posedge i_rst) begin if(i_rst) begin s_rst_mid <= 1'b0; s_rst_out <= 1'b0; end else begin s_rst_mid <= 1'b1; s_rst_out <= s_rst_mid; end end always@(posedge i_clk) begin o_rst <= s_rst_out; end endmodule

综合后的RTL视图:

fpga复位电路设计_xilinx7系列fpga介绍 (https://mushiming.com/)  第6张

 

四、补充说明

事实上针对不同厂家、不同器件需要的复位策略应该是不一样的。

这里主要对Xilinx器件的复位做一个小结。

参考文献:

1. WP272, Get Smart About Reset: Think Local, Not Global;

2. WP275, Get your Priorities Right - Make your Design Up to 50% Smaller.

Xilinx复位:

1. 不需要全局复位信号;

2. 高电平复位;

3. 同步复位或异步复位,同步释放;

4. 不需要复位的bit就不要复位。

详细说明:

1. Xilinx不推荐使用全局复位,并且要尽可能的避免全局复位。首先全局复位扇出很大,并且一般一个设计中都有多个时钟域,全局复位不能与它们同步。再者,Xilinx器件在配置或重配置的过程中已经完成了initialize,不需要再进行加载序列去清除memory。如果确实需要全局复位,需小心使用,并在每个时钟域同步一个local reset.

2. Xilinx寄存器上的控制端口是高电平有效的,如果使用低电平复位则需要额外的反相逻辑,可能会消耗更多的LUT资源。所以在设计中推荐使用高电平复位信号,控制信号也一样推荐高电平。

3. Xilinx的寄存器复位端口同时支持同步复位或异步复位,所以网上很多说的同步复位会消耗更多的资源在这里不适用。至于为什么推荐同步复位我也没有看的很懂…………

4. 复位信号会消耗很多的资源,布线资源、逻辑资源等,所以如果确定不需要复位的信号就不要加复位。一般没有feedback的流水信号完全不需要加复位,有feedback的信号加复位时要小心,可能会导致系统跑飞。

复位消耗的资源:

1. 消耗布线资源,降低其他连接的布线自由度,增加布线时间,可能导致系统性能下降;

2. 消耗逻辑资源,设计不好可能消耗更多的LUT,增加布局布线时间;

3. 因为SRL16E不支持复位端口,所以不能很好的利用SRL16E资源,极大的增加资源消耗。

THE END

发表回复