您的位置:首页 > 其它

[转]同步复位,异步复位以及异步复位同步释放

2010-03-22 16:56 806 查看
1.同步复位(Synchronous Reset)
来看一个简单的同步复位的D触发器,Verilog代码如下:

module d_ff (
clk,
rst_n,
datain,
dataout
);
input clk;
input rst_n;
input datain;
ouput dataout;
reg dataout;
always @ (posedge clk)
begin
if (!rst_n)
dataout <= 1'b0;
else
dataout <= datain;
end
endmodule

综合后的RTL图表如下:





Altera的MAXII系列的CPLD中,register没有同步复位资源,所以同步复位信号需要通过额外的逻辑电路实现,上面的例子,QuartusII软件自带的综合工具使用选择器实现了同步功能,但是这不是确定的,有的综合工具综合成与门,如下图:





同步复位的优点:

1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;

2). 有利于静态时序分析工具的分析;

3). 有利于基于周期的仿真工具的仿真。

同步复位缺点:

1). 占用更多的逻辑资源;

2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;

3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。

2. 异步复位(Asynchronous Reset)
来看一个简单的异步复位的D触发器,Verilog代码如下:

module prac (
clk,
rst_n,
datain,
dataout
);
input clk;
input rst_n;
input datain;
output dataout;
reg dataout;
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
dataout <= 1'b0;
else
dataout <= datain;
end
endmodule

综合后的RTL图表如下:





异步复位的优点:

1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);

2). 复位信号不依赖于时钟。

同步复位缺点:

1). 复位信号容易受到外界的干扰;

2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。





3. 异步复位同步释放(Asynchronous Reset Synchronous Release)
这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这种称谓应该在国外的技术人员中比较流行,与Altera的工程师交流过程中,他们一直使用Synchronized Asynchronous Reset这种称谓(当然也可能是个人的习惯)。

来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:

module prac (
clk,
reset_n,
dataa,
datab,
outa,
outb
);
input clk;
input reset_n;
input dataa;
input datab;
output outa;
output outb;
reg reg1;
reg reg2;
reg reg3;
reg reg4;
assign outa = reg1;
assign outb = reg2;
assign rst_n = reg4;
always @ (posedge clk or negedge reset_n)
begin
if (!reset_n)
begin
reg3 <= 1'b0;
reg4 <= 1'b0;
end
else
begin
reg3 <= 1'b1;
reg4 <= reg3;
end
end

always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else
begin
reg1 <= dataa;
reg2 <= datab;
end
end
endmodule

综合后的RTL图表如下:





此文来源于《Implementation and Timing of Reset Circuits in Altera FPGAs》,例子程序可能代码与源代码略有出入,RTL图是用QuartusII 8.1综合的,与原文也有出入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: