FPGA同步和异步的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
推荐的复位方式:异步复位、同步释放描述代码及对应的RTL电路:
end
end
endmodule
注:最好在模块外面将异步复位信号同步好,再送至各模块,这样各个模块内部就不需要再分别单独同步了。
下面具体阐述一下同步、异步复位的区别,以及为什么要采用这种方式的原因。
复位电路是每个数字逻辑电路中最重要的组成部分之一。
复位电路有两个工作目的:
1、仿真的时候使电路进入初始状态或者其它预知状态;
2、对于综合实现的真实电路,通过复位使电路进入初始状态或者其它预知状态。
一般来说,逻辑电路的任何一个寄存器、存储器结构和其它逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。
常用的复位信号为低电平有效信号,在应用时外部引脚接上上拉电阻,这样能增加复位电路的抗干扰性能。
复位方式大致分为两类,即同步复位和异步复位。这两种复位方式各有优缺点,其应用场合也各不相同。
module Rst_Circuit(
Rst_n,
Clk,
D,
Q
);
input Rst_n;
input Clk;
input D;
output Q;
reg Q;
always@(posedge Clk)//同步复位begin
if(~Rst_n)
begin
Q<=1'd0;
end
else
begin
Q<=D;
end
end
endmodule module Rst_Circuit(
Rst_n,
Clk,
D,
Q
);
input Rst_n;
input Clk;
input D;
output Q;
reg Q;
//如果没有写"or negedge Rst_n",将变成同步复位
always@(posedge Clk or negedge Rst_n)
begin
if(~Rst_n)
begin
Q<= 1'd0;
end
else
begin
Q<= D;
end
end
endmodule
•如果目标器件或可用库中的触发器本身包含同步复位端口,则在实现同步复位电路时可以直接调用同步复位端。然后很多目标器件(如PLD)和ASIC库的触发器本身并不包含同步复位端口,这样复位信号与输入信号组成某种组合逻辑(比如复位低•大多数目标器件(如FPGA和CPLD)和
ASIC库的触发器都
包含异步复位端口,
异步复位会被直接接
到触发器的异步复位
电平有效,只需复位与输入信号相与即
可),然后将其输入到寄存器的输入端。为
了提高复位电路的优先级,一般在电路描
述时使用带有优先级的if...else结构,复位
电路在第一个if下描述,其它电路在else
或else...if分支中描述。
端口,如图所示:
同步复位的优点如下:
•同步复位利于基于周期机制的仿真器进行仿
真;
•使用同步复位可以设计100%的同步时序电
路,有利于时序分析,其综合结果的频率
往往较高;
•同步复位仅在时钟的有效沿生效,可以有效
地避免因复位电路毛刺造成的亚稳态和错
误。同步复位在进行复位和释放复位信号
时,都是仅当时钟沿采到复位信号电平变
化时才进行相关操作,如果复位信号树的
组合逻辑出现了某种毛刺,此时时钟沿采
样到毛刺的概率非常低,这样通过时钟沿
采样,可以十分有效地过滤复位电路组合
逻辑产生的毛刺,增强了电路稳定性。
异步复位的优点如下:
•由于多数目标器件(如
FPGA和CPLD)和
ASIC库的触发器都
包含异步复位端口,
异步复位会节约逻辑
资源;
•异步复位设计简单;
•对于大多数FPGA,都
有专用的全局异步复
位/置位资源(GSR,
Global Set Reset),
使用GSR资源,异步
复位到达所有寄存器
的偏斜(skew)最小。同步复位的缺点如下:
•很多目标器件(如FPGA和CPLD)和ASIC
库的触发器本身并不包含同步复位端口,
使用同步复位会增加更多逻辑资源;
•同步复位的最大问题在于必须保证复位信号
的有效时间足够长,这样才能保证所有触
发器都能有效地复位。由于同步复位仅当
时钟沿采样到复位信号时才会进行复位操
作,所以其信号的持续时间起码要大于设
计的最长时钟周期,以保证所有时钟的有
效沿都能采样到同步复位信号。事实上,
异步复位的缺点如下:
•异步复位的作用和释放
与时钟沿没有直接关
系,异步复位生效时
问题并不明显;但是
当释放异步复位时,
如果异步复位信号释
放时间和时钟的有效
沿到达时间几乎一
致,则容易造成触发
器输出为亚稳态,形
仅仅保证同步复位信号的持续时间大于最慢的时钟周期还是不够的,设计中还要考虑到同步复位信号树通过所有相关组合逻辑路径时的延时,以及由于时钟布线产生的偏斜(skew )。这样,只有同步复位大于时钟最大周期,加上同步信号穿过的组合逻辑路径延时,再加上时钟偏斜延时,才能保证同步复位可靠、彻底。如图所示,假设同步复位逻辑树组合逻辑的延时为t1,复位信号传播路径的最大延时为t2,最慢时钟的周期为Period_max ,时钟的skew 为Clk2-Clk1,则同步复位的周期Tsyn_rst 应该满足如下公式:
Tsyn_rst >Period_max +(Clk2–Clk1)+t1+t2
成逻辑错误;
•如果异步复位逻辑树的
组合逻辑产生了毛刺,则毛刺的有效沿会使触发器误复位,造成逻辑错误。
推荐的复位电路设计方式是异步复位、同步释放。这种方式,可以有效地继承异步复位设计简单的优势,并克服异步复位的上述风险和缺陷。在FPGA 和CPLD 等可编程逻辑器件设计中,使用异步复位、同步释放可以节约器件资源,并获得稳定可靠的复位效果。
reg Rst_Reg_n;reg Q;
always @(posedge Clk)begin
Rst_Reg_n <=Rst_n;//将异步复位信号先用Clk 同步一下
end
always @(posedge Clk or negedge Rst_Reg_n)//如果没有写"or negedge