天天看点

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

数字电路复位信号设计(异步复位、同步释放)笔记详解

1 时序设计

1.1 复位信号设计(异步复位、同步释放)

1.1.0 复位恢复时间和清除时间

首先解释一下恢复时间(recovery time)和清除时间(removal time):(以复位信号低电平有效为例)

复位恢复时间(recovery time):撤销复位时,复位信号无效到时钟有效沿来临之间需要维持的最小的时间,类似于同步时钟的建立时间setup time;

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

复位清除时间(removal time):复位时,在时钟有效沿来临之后复位信号还需要保持复位状态的时间为去除时间,类似于同步时钟的保持时间hold time;

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

那么就可以解释异步复位、同步释放了(呸!时辰未到!继续铺垫!铺着铺着就懂了,甭急,往下看😁接下来分别对同步复位、异步复位做详细介绍)

1.1.1 同步复位

**同步复位:**指的是加到所有功能触发器上的复位信号完全同步于时钟信号源。复位信号只有在时钟上升沿到来时,才能有效,否则,无法完成对系统的复位工作。

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

同步复位特点:

  1. 所设计系统为100%同步时序,有利于时序分析;
  2. 抗干扰性能好,能有效剔除信号中短于时钟周期的毛刺;
    数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解
    当毛刺特别靠近时钟的上升沿时,可能导致时序违规,而使得电路产生亚稳态,但是这种几率很低,可以近似忽略。确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段。
  3. 复位信号的有效时长必须大于时钟周期,才能真正能被系统识别完成复位操作,同时还要考虑诸如组合逻辑路径延迟、系统快慢时钟等问题,很难保证复位信号到达各个寄存器的时序;
    数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解
  4. 由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。

同步复位RTL代码及对应的rtl视图:

module sync_rst(
	input	sys_clk,
	input	sys_rst_n,
	
	input	din,
	output	reg dout
	);

	[email protected](posedge sys_clk) begin
		if(!sys_rst_n)
			dout <= 1'b0;
		else
			dout <= din;
	end
endmodule
           

同步复位对应的RTL视图: 可以看到相对异步复位多出一个组合逻辑单元。

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

1.1.2 异步复位

异步复位: 复位信号直接接到功能触发器的异步复位引脚,复位只与复位信号有关,与时钟无关。无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

异步复位特点:

  1. 无需额外的逻辑资源,实现简单,可以保证复位信号到达各个寄存器的时钟偏斜最小;
  2. 复位信号易受外界干扰,对电路内的毛刺敏感;
    数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解
  3. 复位信号释放具有随机性,如果复位释放信号刚好在时钟有效沿附近,可能存在时序违规(recovery time不满足要求),导致亚稳态。
    数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

异步复位RTL代码及对应的RTL视图:

module Async_rst(
	input	sys_clk,
	input	sys_rst_n,
	
	input	din,
	output	reg dout
	);
	
	[email protected](posedge sys_clk,negedge sys_rst_n) begin
		if(!sys_rst_n)
			dout <= 1'b0;
		else
			dout <= din;
	end
endmodule
           

异步复位对应的RTL视图:

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

(时辰已到!!😎最后一部分了!冲!)

1.1.3异步复位、同步释放

所以,系统设计采用“异步复位、同步释放”(复位信号低电平有效),是利用同步复位和异步复位优点的折中。复位电路通过异步复位使得全部功能寄存器同时复位,同时使用同步释放很好克服了异步复位在信号释放时导致亚稳态的问题。

1.1.4电路及RTL代码实现

异步复位,同步释放就是指在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。

电路实现:(图片来源网络)

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

异步复位,同步释放Verilog实现代码:

module Sync_rst(
	input	sys_clk,
	input	async_rst_n,
	
	input	din,
	output	reg dout
	);
	reg	rst_reg;
	reg	sync_rst_n;
	
	[email protected](posedge sys_clk,negedge async_rst_n)begin
		if(!async_rst_n)begin
			rst_reg <= 1'b0;
			sync_rst_n <= 1'b0;
		end
		else begin
			rst_reg <= 1'b1;
			sync_rst_n <= rst_reg;
		end
	end
	
    [email protected](posedge sys_clk,negedge sync_rst_n) begin
        if(!sync_rst_n)
			dout <= 1'b0;
		else
			dout <= din;
    end
endmodule
           

RTL视图:

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

异步复位,同步释放原理解释:

异步复位:

当async_rst_n有效时,第一个D触发器的输出是低电平,第二个D触发器的输出rst_sync_n也是低电平,方框2中的异步复位端口有效,输出被复位。

同步释放:

如果async_rst_n撤除时发生在clk上升沿附近,则可能发生亚稳态事件,使用两级触发器尽可能消除亚稳态。假设第一级D触发器clk上升沿时async_rst_n正好撤除,则D触发器1可能输出高电平“1”,也可能输出亚稳态,也可能输出低电平。但此时第二级触发器不会立刻更新输出,第二级触发器输出值为前一级触发器Q1的输出状态。显然Q1之前为低电平,故第二级触发器输出保持复位低电平。直到下一个时钟有效沿到来之后,前一级亚稳态大概率输出稳定(可能为低电平也可能为高电平),使得第二级触发器能够稳定输出,若此时第二级触发器输出高电平,即实现同步释放,若输出为低电平且此时复位信号仍然保持无效状态,则在第三个时钟输出高电平,实现同步释放。

上述详细时序如下所示:

数字电路复位信号设计(异步复位、同步释放)笔记详解数字电路复位信号设计(异步复位、同步释放)笔记详解

上述时序图是在第二个触发沿到来时,前一级亚稳态输出已经稳定且稳定为高电平情况下的时序,如果在第二个触发沿到来时,前一级输出的亚稳态还未达到稳定,则电路还是处于亚稳态状态(概率不大),所以两级触发器电路并不能完全消除亚稳态问题,但是可以极大改善亚稳态。

(在人生经过了725328000秒 后的某一天,博主写了他的第二篇CSDN,如有瑕疵请指正哦😉)

继续阅读