Xilinx FPGA复位逻辑处理小结

Xilinx FPGA复位逻辑处理小结

1. 为什么要复位呢?

(1)FPGA上电的时候对设计进行初始化;

(2)使用一个外部管脚来实现全局复位,复位作为一个同步信号将所有存储单元设置为一个已知的状态,这个全局复位管脚与任何其他的输入管脚没有什么差别,经常以异步的方式作用于FPGA。因此,设计人员可以在FPGA内部采用异步或者同步的方式来复位他们的设计。 (always@(posedge clk or posedge rst) )

2. 复位是针对存储单元--触发器,首先有必要了解一下触发器(flip-flops)

Xilinx7系列架构的FPGA每一个slice里面包含8个寄存器,并且所有的这些寄存器都是D触发器,这些触发器共享控制集。控制集包括输入时钟信号(clk),高电平有效使能信号(ce)和高电平有效清零(SR)。SR在触发器里用作同步置位/复位或者异步预复位/清零。

同步复位与异步复位:

当复位信号出现在敏感信号列表中时,触发器将采用异步复位的方式。触发器的SR端口被配置为预置位/清零端口,用FDCE/FDPE触发器来表示。一旦RST= ‘1’条件满足,触发器将立即输出SRVAl属性。

在同步复位的情形,触发器的SR端口被配置为置位/复位端口,用FDSE/FDRE触发器来表示。一旦RST=‘1’条件满足,

触发器将在下一个时钟上升沿时输出SRVAl属性。

                            

                                                                 INIT 与SRVAL属性

INIT属性用来初始化触发器,INIT属性的值将在配置过程中加载到触发器。

XilinxFPGA 的触发器可以支持同步或者异步复位、置位控制,但是关联的触发器一次只能实现one set / reset / preset /clear中的一个。RTL代码中使用了set / reset / preset /clear 里不止一种时,将导致一些条件下使用触发器的SR端口,而另一些条件下使用fabric logic,则将消耗了更多FPGA资源。一般来说,最好避免使用超过一种set/reset/preset/clearcondition。

3. 除了考虑复位类型,还需要考虑复位信号与时钟是否同步的问题


只要全局复位脉冲信号持续的时间够长,FPGA所有的触发器都将进入复位状态。然而,复位信号的解除必须满足触发器的时序要求,以确保触发器能够正确的从复位状态恢复到正常状态。不满足这些时序要求,将导致触发器进入亚稳态。

并且,为确保子系统(如状态机、计数器)正常工作,所有的触发器必须在相同的时钟沿跳出复位状态。

如果同一状态机的不同的bit在不同的时钟沿跳出复位状态,则状态机将转移的一个非法的状态,这就说明了解除复位信号时与时钟同步必要性。

4. 两种复位机制

同步复位机制:

可以使用一种标准的亚稳态消除电路(两个触发器背靠背相连)来将全局复位同步到特定的时钟域。同步化的复位信号可以使用同步SR端口来初始化所有的存储单元。由于同步器和触发器在同一时钟域里被复位,标准的时钟周期约束包括了它们之间的路径的时间。在FPGA中每一个时钟域需要使用单独的同步器来为对应的时钟域产生同步化的全局复位信号。

Tip 1: When driving the synchronous SR port of flip-flops, every clock domain requires its own localized version of the global reset, synchronized to that domain
异步复位机制:

设计中的存储单元可能需要使用触发器的异步SR port 来异步复位初始化。尽管这些存储单元使用了异步的SR端口,复位信号的解除必须与时钟信号同步。这与触发器的复位恢复时序要求有关,类似于异步SR解除信号边沿对时钟上升沿要满足建立时间的要求。不能满足这些时序要求时将导致触发器进入一个亚稳态,同步的子系统进入异常的状态。

 

--复位桥电路复位桥电路提供了异步复位声明、同步复位解除的机制。在这个电路中,假定两个触发器的SR port 有一个异步设置的值,SRVAL= 1:

 

复位桥电路提供了同步的解除异步复位的安全机制。每一个时钟域需要使用复位桥电路来产生它自己的本地化(localized)的全局复位信号。FPGA的每一个时钟域需要一个单独的、同步化的全局复位信号。它可以由单独的复位桥电路来产生。

图中电路假定:复位桥电路和相关的逻辑的时钟源clk_a是稳定的、无错的。在FPGA中,时钟可以来自芯片外的时钟源(最好通过一个clock-capable管脚),或者采用MMCM或者PLL内部产生。任何用于产生时钟信号的MMCM or PLL在复位后需要校准。因此,你可能需要在全局复位路径插入一些额外的逻辑来稳定时钟信号( 因为复位的产生必须在时钟稳定之后,所以一般的做法如下图:把 外部异步输入时钟(比如按键)经过去抖之后产生的异步时钟和MMCM的lock信号相与之后,产生一个全局异步复位时钟 ,然后输入给复位桥的SR pin,实现异步复位同步解复位处理)。

Tip 2: A reset bridgecircuit provides a safe mechanism to deassert an asynchronous resetsynchronously.Every clock domainrequires its own localized version of the global reset with the use of a resetbridge circuit.

Tip 3: Ensure that theclock the MMCM or PLL has generated is stable and locked before deasserting theglobal reset to the FPGA

FPGA内实现异步复位逻辑的典型框图

 

(一般应用说明:

用外部晶振时钟(可以降几倍频)作为:按键去抖逻辑的时钟源、 失锁信号的同步时钟、MMCM的复位参考时钟(可以不控制)、全局异步复位的时钟源。

1:  MMCM 的复位一般不控制,上电就开始工作 :       reg     mmcm_rst = 1'b1; 

2:  失锁时钟的处理: 

always @ ( posedge clk_100m )
begin
    userclk_locked_1dly <= userclk_locked;
    userclk_locked_2dly <= userclk_locked_1dly;
    userclk_locked_3dly <= userclk_locked_2dly;
end

3:  输入信号去抖用FDCE寄存器:

always @( posedge clk_100m or negedge sysrst_n )

4:参考代码:

always @ ( posedge clk_100m )  (这里不需要rst_100m, 因为 rst_100m是由all_reset产生的)
begin
    rst_sys_1dly <= rst_sys_tmp || ( ~ userclk_locked_2dly );
    rst_sys_2dly <= rst_sys_1dly;
    rst_sys_3dly <= rst_sys_2dly;
    all_reset <= rst_sys_1dly || rst_sys_2dly || rst_sys_3dly;
end

rst_cdc_sync u0_rst_cdc_sync
(
    .reset_in  ( all_reset  ), 
    .clk       ( clk_100m   ), 
    .reset_out ( rst_100m   )
);

//---------------------复位桥:rst_cdc_sync 子模块-----------------------------------//

module rst_cdc_sync
(
    input    reset_in,
    input    clk,
    output    reg reset_out
);

//(* ASYNC_REG = "true" *) reg    rst_a;
//(* ASYNC_REG = "true" *) reg    rst_b;
//(* ASYNC_REG = "true" *) reg    rst_c;
//(* ASYNC_REG = "true" *) reg    rst_d;

reg rst_a; 
reg rst_b; 
reg rst_c; 
reg rst_d; 

always @ ( posedge clk or posedge reset_in )
begin
    if ( reset_in == 1'b1 )
    begin
        rst_a <= 1'b1;
        rst_b <= 1'b1;
        rst_c <= 1'b1;
        rst_d <= 1'b1;
        reset_out <= 1'b1;
    end
    else
    begin
        rst_a <= 1'b0;
        rst_b <= rst_a;
        rst_c <= rst_b;
        rst_d <= rst_c;
        reset_out <= rst_c;    
    end
end

endmodule

//--------------------约束文件------------------------//

set_false_path -to [get_pins u_clk_rst_gen/u*_rst_cdc_sync/rst_a_reg/PRE]
set_false_path -to [get_pins u_clk_rst_gen/u*_rst_cdc_sync/rst_b_reg/PRE]
set_false_path -to [get_pins u_clk_rst_gen/u*_rst_cdc_sync/rst_c_reg/PRE]
set_false_path -to [get_pins u_clk_rst_gen/u*_rst_cdc_sync/reset_out_reg/PRE]


5. 为什么复位信号一般都使用高点平有效呢?

Xilinx 寄存器的SR控制端是高电平有效的。如果RTL代码采用了低电平有效的复位模式,综合器将在复位信号驱动寄存器SR控制端之前的插入一个反相器(interver)。你必须使用一个查找表(look up table)来实现反向器,以利用LUT的输入端口。低电平有效的控制信号带来的额外的逻辑可能拉长了执行时间(runtime),将导致更低的FPGA资源利用率,也将影响时序和功耗。

   到底我想说点什么呢?尽可能的在HDL代码或者实例化的模块中使用高电平有效的控制信号。如果在设计中,你不能够改变这些控制信号的极性,你需要在代码的顶层文件反转这些控制信号。采用这种方式描述电路的话,这些反向器将被吸收到I/O逻辑中,而不需要使用额外的FPGA逻辑、路径。
Tip 4: Active-high resets enable better device utilization and improveperformance.

6.到底如何用呢?

应用场合:多个时钟域的情况下的复位,针对每一个时钟域都得有对应的复位逻辑。

参见tri_mode_mac 参考例子中的实现方法。

7. 复位桥电路到底怎么实现呢?

 

复制代码

`timescale 1ps/1ps
module tri_mode_mac_reset_sync #(
  parameter INITIALISE = 2'b11
)
(
   input       reset_in,
   input       clk,
   input       enable,
   output      reset_out
);

wire  reset_stage1;
wire  reset_stage2;

  (* ASYNC_REG = "TRUE", RLOC = "X0Y0",  SHREG_EXTRACT = "NO", INIT = "1" *)
  FDPE #(
   .INIT (INITIALISE[0])
  ) reset_sync1 (
  .C  (clk), 
  .CE (enable),
  .PRE(reset_in),
  .D  (1'b0),
  .Q  (reset_stage1) 
  );
  
  (* ASYNC_REG = "TRUE", RLOC = "X0Y0",  SHREG_EXTRACT = "NO", INIT = "1" *)
  FDPE #(
   .INIT (INITIALISE[1])
  ) reset_sync2 (
  .C  (clk), 
  .CE (enable),
  .PRE(reset_in),
  .D  (reset_stage1),
  .Q  (reset_stage2) 
  );

assign reset_out = reset_stage2;
endmodule
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《基于Xilinx FPGA的中断处理》是一本介绍基于Xilinx FPGA的中断处理的PDF文档。中断是一种硬件机制,用于实现多任务并发处理,通过中断处理,系统能够及时响应设备的请求,并及时处理,提高系统的响应速度和效率。 该PDF首先介绍了FPGA(Field-Programmable Gate Array)的基本概念和原理。FPGA是一种可编程逻辑门阵列,通过在芯片上配置逻辑门的连接,可以实现不同的电路功能。因此,FPGA具有可重构和高度并行的特点,非常适合用于实现中断处理的硬件。 接下来,PDF详细介绍了中断的概念和原理。中断可以分为硬件中断和软件中断,硬件中断由外部信号触发,而软件中断由程序控制。PDF对中断的触发机制、中断的分类和中断的处理过程进行了深入讲解。 在此基础上,PDF介绍了如何在Xilinx FPGA上实现中断处理Xilinx FPGA提供了丰富的资源和工具,可以方便地实现中断处理电路。PDF详细介绍了如何使用Xilinx FPGA的开发工具进行中断处理电路设计和编程,并给出了实例演示。 最后,PDF总结了基于Xilinx FPGA的中断处理的优势和应用场景。基于Xilinx FPGA的中断处理可以提高系统的响应速度和效率,特别适用于需要实时响应和并发处理的应用领域,如数字信号处理、通信系统等。 《基于Xilinx FPGA的中断处理》PDF通过深入浅出的方式,详细介绍了基于Xilinx FPGA的中断处理的原理、方法和应用。对于学习和研究FPGA中断处理的人员来说,具有很高的参考价值。 ### 回答2: 《基于 Xilinx FPGA 的中断处理》是一本介绍在 Xilinx FPGA 系统中实现中断处理的指南。本书详细讲解了中断的概念、中断请求和中断响应的原理、中断向量表和中断优先级的设置,以及如何在 Xilinx FPGA 中建立中断处理机制。 首先,本书简要介绍了中断的概念和基本原理。中断是一种计算机硬件或软件的机制,用于打断正在执行的程序,以处理紧急事件。中断可以分为外部中断和内部中断,并且可以根据优先级进行处理。读者将了解到中断请求(IRQ)和中断响应(ISR)的基本原理。 接下来,本书详细讲解了在 Xilinx FPGA 中实现中断处理的步骤。首先,读者将学习如何设置中断请求源(Interrupt Request Source),通过配置和连接中断控制器(Interrupt Controller)和处理器(Processor)进行响应。然后,读者将了解如何建立中断向量表,其中包含了中断服务程序的地址信息。此外,本书还介绍了如何通过设置中断优先级来处理同时发生的多个中断请求。 最后,本书通过实例和代码示例展示了如何实现具体的中断处理功能。读者将通过参考实例代码了解如何在 Xilinx FPGA 中编写和编译中断服务程序。同时,本书还介绍了如何使用 Xilinx 提供的工具和资源,如 Vivado 开发环境和 AXI 中断控制器 IP 核等。 总之,这本《基于 Xilinx FPGA 的中断处理》通过详细的解释和实例演示,为读者提供了在 Xilinx FPGA 系统中实现中断处理的指南。读者可以通过阅读本书,了解中断的基本原理和实现步骤,掌握在 Xilinx FPGA 上开发中断处理功能的技巧和方法。 ### 回答3: 《基于Xilinx FPGA的中断处理》PDF 是介绍在Xilinx FPGA上如何进行中断处理的文档。中断处理是一种处理器与外设之间通信的重要机制,通过中断处理可以提高系统性能和响应速度。 在Xilinx FPGA上,中断处理的流程一般包括以下几个步骤: 1. 硬件配置:首先需要对FPGA进行硬件配置,将中断控制器模块(如AXI Interrupt Controller)添加到设计中,并配置中断通道、中断触发条件等参数。 2. 中断源设置:接下来需要确定哪些外设会触发中断,并配置相关的中断源。可以在设计中增加适当的中断源模块,或者在设计中使用已有的外设模块,如串口通信模块、以太网模块等。 3. 中断处理程序编写:针对每个中断源,需要编写相应的中断处理程序。中断处理程序一般包括中断服务程序和中断服务例程。中断服务程序是用来处理中断请求的,而中断服务例程则是在中断服务程序的基础上进行更加复杂的操作,如数据处理、状态更新等。 4. 中断配置和启用:在硬件配置好并编写好相应中断处理程序后,需要对中断进行配置和启用。通过编程方式,将中断配置信息写入到中断控制器的寄存器中,然后使能中断使能位,使系统能够正常响应中断。 通过以上步骤,可以在Xilinx FPGA上实现中断的处理。中断处理的好处是能够实现异步通信,提高系统的并发性,减少对处理器的轮询,节约系统资源和功耗。同时,中断处理也能提高系统的实时性,使系统能够更加及时地响应外设的事件。 总而言之,《基于Xilinx FPGA的中断处理》PDF提供了在Xilinx FPGA上实现中断处理的详细方法和步骤,对于需要在FPGA中实现中断的开发者和工程师来说,是一份非常有价值的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值