逻辑电路的任何一个寄存器、存储器结构和其他逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态
通常来说,时序电路是一个双稳态电路,上电之后必须要有一个初始态,才可以正常运行。组合逻辑电路,没有存储功能,不需要复位信号
1、同步复位
来看一个简单的同步复位的D触发器,Verilog代码如下:
module top_module (
input clk,
input reset, // Synchronous reset
input [7:0] d,
output [7:0] q
);
always@(posedge clk)
if (reset == 1'b1) q<=7'h00;
else q<=d;
endmodule
同步复位的优点:
1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺,增强电路的稳定性;
2). 有利于静态时序分析工具的分析;
3). 有利于基于周期的仿真工具的仿真。
同步复位缺点:
1). 大多数逻辑器件的目标库内的DFF都只有异步复位端口,适用同步复位时,综合器就会在寄存器的数据输入端插入组合逻辑,占用更多的逻辑资源;
2). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。
3). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;
复位信号的脉冲宽度要求2、异步复位
来看一个简单的同步复位的D触发器,Verilog代码如下:
module top_module (
input clk,
input areset, // active high asynchronous reset
input [7:0] d,
output [7:0] q
);
always @(posedge clk or posedge areset)
if(areset == 1'b1) q<=8'h00;
else q<= d;
endmodule
异步复位的优点:
1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);
2). 复位信号不依赖于时钟。
异步复位缺点:
1). 复位信号容易受到外界的干扰,如毛刺等影响;
2). 复位信号释放的随机性,可能导致时序违规,倘若复位释放时恰恰在时钟有效沿附近,就很容易使电路处于亚稳态,如下图。
来看一个简单的异步复位,同步释放的电路代码及电路图
module sync_async_reset (
input clk,
input rst_i,
input data_a,
input data_b,
output out_a,
output out_b
);
reg d1, d2;
reg d3, d4;
assign out_a = d3;
assign out_b = d4;
assign rst_o = d2;
always @ (posedge clock, negedge rst_i) begin
if (!rst_i) begin
d1 <= 1'b0;
d2 <= 1'b0;
end
else begin
d1 <= 1'b1;
d2 <= d3;
end
end
always @ (posedge clock, negedge rst_o) begin
if (!rst_o) begin
d3 <= 1'b0;
d4 <= 1'b0;
end
else begin
d3 <= data_a;
d4 <= data_b;
end
end
endmodule
1、异步复位,同步释放的含义
异步复位:就是复位信号可以直接不受时钟信号影响,在任意时刻只要是低电平就能复位,即复位信号不需要和时钟同步。
同步释放:让复位信号取消的时候,必须跟时钟信号同步,即刚好跟时钟同沿。
2、异步复位,同步释放的优点
3、两级触发器上的复位响应
情况一:后级寄存器无法满足恢复时间要求。
在实际电路中,复位信号到达目标寄存器时,可能存在skew,发生跳变。前一级寄存器的复位信号满足恢复时间的要求,复位能够正常进行撤离。
后一级寄存器违反了寄存器的要求。无论复位有没有正常的撤离,在T1时刻,后一级寄存器仍然会保持复位电平,也就是低电平。T2时刻后一级触发器的复位已经完全被撤除,d1完成复位撤离后的高电平能够被正常地传递。
情况二:前级寄存器无法满足恢复时间要求。
假设前一级触发器地复位时钟偏移比后一级地复位时钟偏移大。复位信号在时钟沿处发生跳变,前一级寄存器输出有可能发生亚稳态T1时刻前一级寄存器未被复位,后一级寄存器仍输出前一级地复位输出信号,即保持输出复位有效信号低电平。
在T2时刻,由于前一级地输出有可能使1或0,因此后一级寄存器会输出清晰的高电平或者低电平。
若后一级寄存器在T2依旧输出复位电平,即rst_o为0,那么在T3时刻,电路输出的复位电平一定会撤离,也就是rst_o为高
情况三:复位的捕捉
图中,即使异步复位信号是周期比时钟周期短的脉冲,在一个时钟周期内产生了异步复位。这种电路还是能够正确捕捉到这样的复位信号
如图中,由于d2将a锁存了一个周期,最后输出一个比时钟周期长的复位信号rst_o
在一个设计中,无论是同步复位还是异步复位,其扇出数量往往仅次于时钟网络。复位网络通常会被布线在全局网络上,在布线的时候需要控制各个路径的时钟偏移保持在大致相等的水平上,使复位能“同时”撤离。
树形拓扑中,首先用两级同步器,对异步复位进行同步1、有缺陷的复位分发
如图所示,两个复位信号在撤离时可能会存在一个周期的偏差,在实际电路系统中,可能会导致时序错乱
2、正确的复位分发技术
首先用两级同步器,对异步复位进行同步,得到了根复位信号之后,再对其用复位同步电路进行分发。由于同步后的根复位信号不会带来亚稳态问题,再分发过程中,再次适用两级寄存器对跟复位信号进行同步和分发,是很安全的。
分发后的各个子复位网络是各自独立的,并且扇出的数量比根复位网络要小很多。
布线时,子复位网络需要一一进行约束和时序分析