IC每日一题
- [1 代码题:异步复位,同步释放](#1 代码题:异步复位,同步释放)
- [2 八股题:同步复位VS异步复位](#2 八股题:同步复位VS异步复位)
初步打算新开一个系列会包括:一个代码题 + 一个基本知识题;
1 代码题:异步复位,同步释放
题目:使用verilog来设计实现一个异步复位,同步释放功能;
问题:对于D触发器来说,当rst_n1'b0时,D触发器发生复位,当rst_n1'b1时,D触发器正常工作;
但是当rst_n信号重新回到1的时间和clk上升沿到来的信号非常接近时,D触发器可能会输出亚稳态,造成信号无法识别是1还是0;
解决办法:
异步复位:对为0的复位信号不做处理,让其正常异步复位;
同步释放:对为1的复位信号打两拍,使其拉高时对齐时钟边沿,避免亚稳态;
时序图如下:
代码图如下:
verilog
module rst_asy(
input clk,
input rst_n,
output rst_n_out
);
reg rst_n_r1;
always@(posedge clk or negedge rst_n) begin
if(rst_n==1'b0) begin
rst_n_out <= 1'b0;
rst_r1 <= 1'b0;
end else begin
//rst_r1 <= rst_n; //rst_n==1'b1;
rst_r1 <= 1'b1;
rst_n_out <= rst_r1;
end
end
endmodule
综合实现电路如下:
2 八股题:同步复位VS异步复位
概念: 同步复位:当时钟上升沿检测到复位信号,执行复位操作(以时钟沿采样为基准)--always @(posedge clk);
异步复位:无论时钟沿信号是否到来,只要复位信号有效,就对系统进行复位----always @(posedge clk or negedge rst_n);
优缺点:
同步复位:
优点:1.可以使设计的系统成为同步时序电路,有利于时序分析;2.因为只在时钟沿有效,可以过滤低于时钟周期的复位毛刺;
缺点:1.不能及时响应复位逻辑操作;2.复位信号有效时长需大于时钟周期;3.需要额外的同步逻辑
异步复位:
优点:1.DFF基本都有异步复位端口,不需要额外逻辑;2.异步复位信号响应及时;
缺点:1.属于异步逻辑,当复位释放接近时钟沿时,触发器输出可能进入亚稳态;2.可能因为毛刺造成假复位;
总结解决方法:复位信号低电平有效,异步复位,同步释放;----->为了解决复位信号撤销时,D触发器输出亚稳态;
[ref]
1.https://blog.csdn.net/dongdongnihao_/article/details/79827076?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-79827076-blog-131870231.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.6&utm_relevant_index=11