同步复位和异步复位的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
针对数字系统的设计,我们经常会遇到复位电路的设计,对初学者来说不知道同步复位与异步复位的区别与联系,今天我对这个问题简要的阐述下,希望对初学者有一定的参考意义,若有不正确的地方愿大家明示。
同步复位原理:同步复位只有在时钟沿到来时复位信号才起作用,则复位信号持续的时间应该超过一个时钟周期才能保证系统复位。
异步复位原理:异步复位只要有复位信号系统马上复位,因此异步复位抗干扰能力差,有些噪声也能使系统复位,因此有时候显得不够稳定,要想设计一个好的复位最好使用异步复位同步释放。
同步复位与异步复位的优劣:异步复位消耗的PFGA逻辑资源相对来说要少些,因此触发器自身带有清零端口不需要额外的门电路,这是其自身的优势,通常在要求不高的情况下直接使用异步复位就OK。
下面我用verilog来演示下同步复位与异步复位。
同步复位的verilog程序如下:
module D_FF
(
//Input ports
SYSCLK,
RST_B,
A,
//Output ports
B
);
//========================================= //Input and output declaration
//========================================= input SYSCLK;
input RST_B;
input A;
output B;
//========================================= //Wire and reg declaration
//=========================================
wire SYSCLK;
wire RST_B;
wire A;
reg B;
//========================================= //Logic
//========================================= always@(posedge SYSCLK)
begin
if(!RST_B)
B<=1'b0;
else
B<=A;
end
endmodule
综合后的RTL级电路图如下:
异步复位的verilog程序如下:
module D_FF
(
//Input ports
SYSCLK,
RST_B,
A,
//Output ports
B
);
//========================================= //Input and output declaration
//========================================= input SYSCLK;
input RST_B;
input A;
output B;
//========================================= //Wire and reg declaration
//=========================================
wire SYSCLK;
wire RST_B;
wire A;
reg B;
//========================================= //Logic
//========================================= always@(posedge SYSCLK or negedge RST_B)
begin
if(!RST_B)
B<=1'b0;
else
B<=A;
end
endmodule
综合后的RTL级电路图如下:
通过比较显然异步复位消耗的逻辑资源要少些,因此通常的设计中都采用异步复位的方式,需要进一步的学习的话,可以再研究下其它的资料。