异步复位和同步释放电路的详细解释

摘要:
我发现互联网上很多关于异步重置和同步释放的解释都是错误的。以下解释非常清楚。转移自:http://www.xue5.com/Developer/Software/665219.html如图所示,第一个盒子包含异步复位和同步释放电路。第一级D触发器的输入是VCC,第二级触发器的输出是可以异步复位和同步释放的复位信号。所谓异步复位和同步释放是指复位信号是异步和有效的,即复位的发生与clk无关。
首先给出复位信号亚稳态的原因:

复位结束也就是释放的时刻恰在时钟上升沿的建立时间和保持时间之间时无法决定现在的复位状态是1还是0,造成亚稳态。
下面是具体解释:

 

在带有复位端的D触发器中,当reset信号“复位”有效时,它可以直接驱动最后一级的与非门,令Q端“异步”置位为“1”or“0”。这就是异步复位。
当这个复位信号release时,Q的输出由前一级的内部输出决定。
然而,由于复位信号不仅直接作用于最后一级门,而且也会做为前级电路的一个输入信号,因此这个前一级的内部输出也受到复位信号的影响。
前一级的内部电路实际上是实现了一个“保持”的功能,即在时钟沿跳变附近锁住当时的输入值,使得在时钟变为高电平时不再受输入信号的影响。
对于这一个“维持”电路,在时钟沿变化附近,如果“reset”信号有效,那么,就会锁存住“reset”的值;如果reset信号释放,那么这个“维持”电路会去锁当时的D输入端的数据。
因此,如果reset信号的“释放”发生在靠时钟沿很近的时间点,那么这个“维持”电路就可能既没有足够时间“维持”住reset值,也没有足够时间“维持”住D输入端的值,因此造成亚稳态,并通过最后一级与非门传到Q端输出。
如果reset信号的“释放”时间能够晚一点点,也就是说,让“维持”电路有足够的时间去锁住“reset”的值,那么,我们就可以肯定输出为稳定的“reset”状态了。
这一小段锁住“reset”值所需要的时间,就是寄存器的removal time要求。

 

发现网上找的很多关于异步复位、同步释放的解释都是有误的,下面的解释得比较清楚。

转自:http://www.xue5.com/Developer/Software/665219.html

如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。

异步复位和同步释放电路的详细解释第1张

 

电路目的:防止复位信号撤除时产生亚稳态事件

所谓异步复位和同步释放,是指复位信号是异步有效的,即复位的发生与clk无关。后半句“同步释放”是指复位信号的撤除(释放)则与clk相关,即同步的。

 

下面说明一下如何实现异步复位和同步释放的。

 

异步复位:显而易见,rst_async_n异步复位后,rst_sync_n将拉低,即实现异步复位。

同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_async_n撤除时,由于双缓冲电路的作用,rst_sync_n复位信号不会随着rst_async_n的撤除而撤除。

假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件,但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器clk来之前时的Q1输出状态。显然Q1之前为低电平,顾第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平。即同步释放。

 

module reset_gen ( 
output rst_sync_n, 
input clk, rst_async_n);

reg rst_s1, rst_s2;
wire rst_sync_n ;
always @ (posedge clk, posedge rst_async_n)

if (rst_async_n) begin 
rst_s1 <= 1'b0;
rst_s2 <= 1'b0;
end
else begin
rst_s1 <= 1'b1;
rst_s2 <= rst_s1;
end

assign rst_sync_n = rst_s2; 
endmodule

免责声明:文章转载自《异步复位和同步释放电路的详细解释》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在oracle里,如何取得本周、本月、本季度、本年度的第一天和最后一天的时间ORACLE DELETE数据慢的案例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL---触发器

一、什么是触发器? 一段SQL代码,挂到某个表的某个增、删、改的操作上。 当这个表执行相应的操作时,就会触发这段相应的SQL代码。 触发器与存储过程的区别: 1.存储过程是独立于表存在的,触发器需要依附某个表的某个操作。 2.存储过程需要使用名称去调用才能执行,触发器则在表的操作过程中自动被触发调用。 二、触发器的分类: after触发器 ——先执行表的增...

关于for循环里面异步操作的问题

一、使用自执行函数   1、当自执行函数在循环当中使用时,自执行函数会在循环结束之后才会运行。比如你在自执行函数外面定义一个数组,在自执行函数当中给这个数组追加内容,你在自执行函数之外输出时,会发现这个数组当中仕么都没有,这就是因为自执行函数会在循环运行完后才会执行。   2、当自执行函数在循环当中使用时,要是自执行函数当中嵌套ajax,那么循环当中的下标...

iTerm2配置优化

一、使用lszrz实现快速传输文件 很多时候我们需要在本机和远端服务器间进行文件传输,通常都是使用scp命令进行传输,但其实通过Zmodem传输起来更方便。 什么是 Zmodem Zmodem是针对modem的一种支持错误校验的文件传输协议。Zmodem是Ymodem的改进版,后者又是Xmodem的改进版。Zmodem不仅能传输更大的数据,而且错误率更小。...

Jenkins常见的构建触发器

Jenkins内置4种构建触发器: 触发远程构建 其他工程构建后触发( Build after other projects are build) 定时构建( Build periodically) 轮询 SCM(Poll SCM) 触发远程构建   其他工程构建后触发1)创建pre_job流水线工程 2 )配置需要触发的工程   定时构建  ...

[代码]JAVA触发器,Spring的quartz配置

Spring的quartz中的配置代码,spring-quartz.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/...

sql server2008系统表详细说明sys.开头的表

一、库里有多少个表,表名等 select * from INFORMATION_SCHEMA.TABLES 二、查询表、字段、类型、是否主键、长度、小数位、是否允许空、默认值等详细查询 效果: SELECT (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空...