我是靠谱客的博主 个性豌豆,最近开发中收集的这篇文章主要介绍异步复位同步释放_异步复位,同步释放,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

逻辑电路的任何一个寄存器、存储器结构和其他逻辑单元都必须要附加复位逻辑电路,以保证电路能够从错误状态中恢复,可靠地工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态

通常来说,时序电路是一个双稳态电路,上电之后必须一个初始态,才可以正常运行。组合逻辑电路没有存储功能,不需要复位信号

一、同步复位和异步复位

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

23263ba78794c0a11452fe34a3c7fa5e.png
复位信号的脉冲宽度要求

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). 复位信号释放的随机性,可能导致时序违规,倘若复位释放时恰恰在时钟有效沿附近,就很容易使电路处于亚稳态,如下图。

25fe34b9129eec5b91dae6dd3a6f4695.png

二、异步复位,同步释放

来看一个简单的异步复位,同步释放的电路代码及电路图

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

aacb82958b41b3e6aa8c0cf802ae8116.png

1、异步复位,同步释放的含义

异步复位:就是复位信号可以直接不受时钟信号影响,在任意时刻只要是低电平就能复位,即复位信号不需要和时钟同步。

同步释放:让复位信号取消的时候,必须跟时钟信号同步,即刚好跟时钟同沿。

2、异步复位,同步释放的优点

  • 避免复位信号释放的时候造成亚稳态问题
  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关
  • 有效捕捉复位,即使是短脉冲复位也不会丢失
  • 有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间。

3、两级触发器上的复位响应

情况一:后级寄存器无法满足恢复时间要求。

08beaac342af4fea1a24674c72bbde06.png

8c5c49da9b29aab4d35173646f7f78de.png
在实际电路中,复位信号到达目标寄存器时,可能存在skew,发生跳变。

前一级寄存器的复位信号满足恢复时间的要求,复位能够正常进行撤离。

后一级寄存器违反了寄存器的要求。无论复位有没有正常的撤离,在T1时刻,后一级寄存器仍然会保持复位电平,也就是低电平。T2时刻后一级触发器的复位已经完全被撤除,d1完成复位撤离后的高电平能够被正常地传递。

情况二:前级寄存器无法满足恢复时间要求。

4d977604941b2c0f80fea36d6f559268.png
假设前一级触发器地复位时钟偏移比后一级地复位时钟偏移大。复位信号在时钟沿处发生跳变,前一级寄存器输出有可能发生亚稳态

T1时刻前一级寄存器未被复位,后一级寄存器仍输出前一级地复位输出信号,即保持输出复位有效信号低电平。

在T2时刻,由于前一级地输出有可能使1或0,因此后一级寄存器会输出清晰的高电平或者低电平。

若后一级寄存器在T2依旧输出复位电平,即rst_o为0,那么在T3时刻,电路输出的复位电平一定会撤离,也就是rst_o为高

情况三:复位的捕捉

8c8d34516ba2c3392967e2a784aec7af.png

图中,即使异步复位信号是周期比时钟周期短的脉冲,在一个时钟周期内产生了异步复位。这种电路还是能够正确捕捉到这样的复位信号

如图中,由于d2将a锁存了一个周期,最后输出一个比时钟周期长的复位信号rst_o

思考:上电复位时或者门控时钟电路里,当电路中没有正常工作的时钟时,异步复位及同步撤离电路是否可以正常工作?

a0497c68d248f768814280023b43daf9.png
复位不依赖于输出,但是复位输出信号,需要依赖于时钟才能撤离

三、复位网络

在一个设计中,无论是同步复位还是异步复位,其扇出数量往往仅次于时钟网络。复位网络通常会被布线在全局网络上,在布线的时候需要控制各个路径的时钟偏移保持在大致相等的水平上,使复位能“同时”撤离。

73bd78478ea92dd9691da85fa9b3808d.png
树形拓扑中,首先用两级同步器,对异步复位进行同步

1、有缺陷的复位分发

83ec4e5646c7a7faf33c32f48242fe1d.png

如图所示,两个复位信号在撤离时可能会存在一个周期的偏差,在实际电路系统中,可能会导致时序错乱

2、正确的复位分发技术

e5de354212c8a3d9f0dc95ea8f50d0fc.png

首先用两级同步器,对异步复位进行同步,得到了根复位信号之后,再对其用复位同步电路进行分发。由于同步后的根复位信号不会带来亚稳态问题,再分发过程中,再次适用两级寄存器对跟复位信号进行同步和分发,是很安全的。

分发后的各个子复位网络是各自独立的,并且扇出的数量比根复位网络要小很多。

布线时,子复位网络需要一一进行约束和时序分析

最后

以上就是个性豌豆为你收集整理的异步复位同步释放_异步复位,同步释放的全部内容,希望文章能够帮你解决异步复位同步释放_异步复位,同步释放所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部