FPGA同步和异步的区别
时间:2025-07-14
时间:2025-07-14
推荐的复位方式:异步复位、同步释放描述代码及对应的RTL电路:
end
end
endmodule
注:最好在模块外面将异步复位信号同步好,再送至各模块,这样各个模块内部就不需要再分别单独同步了。
下面具体阐述一下同步、异步复位的区别,以及为什么要采用这种方式的原因。
复位电路是每个数字逻辑电路中最重要的组成部分之一。复位电路有两个工作目的:
1、2、一般来说,逻辑电路的任何一个寄存器、存储器结构和其它逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。
常用的复位信号为低电平有效信号,在应用时外部引脚接上上拉电阻,这样能增加复位电路的抗干扰性能。
复位方式大致分为两类,即同步复位和异步复位。这两种复位方式各有优缺点,其应用场合也各不相同。
moduleRst_Circuit(Rst_n,
moduleRst_Circuit(
Rst_n,Clk,D,Q);
inputRst_n;inputClk;inputD;outputQ;regQ;
always@(posedgeClk)//同步复位
begin
if(~Rst_n)
begin
Q<=1'd0;endelse
begin
Q<=D;end
endendmodule
);
inputRst_n;inputClk;inputD;outputQ;regQ;
//如果没有写"or
negedgeRst_n",将变成同步复位
always@(posedgeClkornegedgeRst_n)
begin
if(~Rst_n)
begin
Q<=
1'd0;
endelse
begin
Q<=
D;
end
endendmodule
如果目标器件或可用库中的触发器本身包含
同步复位端口,则在实现同步复位电路时可以直接调用同步复位端。然后很多目标器件(如PLD)和ASIC库的触发器本身并不包含同步复位端口,这样复位信号与输入信号组成某种组合逻辑(比如复位低
Clk,D,Q
大多数目标器件(如
)和ASIC库的触发器都包含异步复位端口,异步复位会被直接接到触发器的异步复位
电平有效,只需复位与输入信号相与即可),然后将其输入到寄存器的输入端。为了提高复位电路的优先级,一般在电路描述时使用带有优先级的if...else结构,复位电路在第一个if下描述,其它电路在else或else...if分支中描述。
端口,如图所示:
同步复位的优点如下:异步复位的优点如下:
同步复位利于基于周期机制的仿真器进行仿
真;
由于多数目标器件(如
)和ASIC库的触发器都包含异步复位端口,异步复位会节约逻辑资源;
使用同步复位可以设计100%往往较高;
同步复位仅在时钟的有效沿生效,可以有效
地避免因复位电路毛刺造成的亚稳态和错误。同步复位在进行复位和释放复位信号时,都是仅当时钟沿采到复位信号电平变化时才进行相关操作,如果复位信号树的组合逻辑出现了某种毛刺,此时时钟沿采样到毛刺的概率非常低,这样通过时钟沿采样,可以十分有效地过滤复位电路组合 异步复位设计简单; 对于大多数有专用的全局异步复位/置位资源(GSR,GlobalSetReset),使用GSR资源,异步复位到达所有寄存器的偏斜(skew)最小。
同步复位的缺点如下:异步复位的缺点如下:
很多目标器件(如和)和ASIC
库的触发器本身并不包含同步复位端口,使用同步复位会增加更多逻辑资源;
异步复位的作用和释放
与时钟沿没有直接关系,异步复位生效时问题并不明显;但是当释放异步复位时,如果异步复位信号释放时间和时钟的有效沿到达时间几乎一致,则容易造成触发器输出为亚稳态,形
同步复位的最大问题在于必须保证复位信号
的有效时间足够长,这样才能保证所有触发器都能有效地复位。由于同步复位仅当时钟沿采样到复位信号时才会进行复位操作,所以其信号的持续时间起码要大于设计的最长时钟周期,以保证所有时钟的有效沿都能采样到同步复位信号。事实上,
仅仅保证同步复位信号的持续时间大于最慢的时钟周期还是不够的,设计中还要考虑到同步复位信号树通过所有相关组合逻辑路径时的延时,以及由于时钟布线产生的偏斜(skew)。这样,只有同步复位大于时钟最大周期,加上同步信号穿过的组合逻辑路径延时,再加上时钟偏斜延时,才能保证同步复位可靠、彻底。如图所示,假设同步复位逻辑树组合逻辑的延时为t1,复位信号传播路径的最大延时为t2,最慢时钟的周期为Period_max,时钟的skew为Clk2-Clk1,则同步复位的周期Tsyn_rst应该满足如下公式:
Tsyn_rst>Period_max+(Clk2–Clk1)+t1+t2
成逻辑错误;
如果异步复位逻辑树的
组合逻辑产生了毛刺,则毛刺的有效沿会使触发器误复位,造成逻辑错误。
推荐的复位电路设计方式是异步复位、同步释放。这种方式,可以有效地继承异步复位设计简单的优势,并克服异步复位的上述风险和缺陷。在FPGA和CPLD等可编程逻辑器件设计中,使用异步复位、同步释放可以节约器件资源,并获得稳定可靠的复位效果。
regRst_Reg_n;regQ;
always@(posedgeClk)begin
Rst_Reg_n<=Rst_n;end
//将异步复位信号先用Clk同步一下
always@(posedgeClkornegedgeRst_Reg_n)//如果没有写"ornegedge
Rst_Reg_n",将变成同步复位
begin
if(~Rst_Reg_n)
begin
Q<=1'd0;endelse
begin
Q<=D;end
end
这里使用时钟将外部输入的异步复位信号寄存一个节拍后 …… 此处隐藏:6414字,全部文档内容请下载后查看。喜欢就下载吧 ……