关于FPGA中的同步复位与异步复位,之前从未考虑过两者之间的区别,使用时也是随意使用。本篇笔记主要记录一下二者之间的区别,内容均摘自百度、博客等。
https://www.zhihu.com/question/20280893
1.同步复位
同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。同步复位RTL代码:
//Synchronous Reset
module sync_rst(
input clk_i,
input rst_n,
input din,
output reg dout
);
always @(posedge clk_i) begin
if(!rst_n)
dout <= 0;
else
dout <= din;
end
endmodule
//作者:Kevin Zhang
//链接:https://www.zhihu.com/question/20280893/answer/465957602
//来源:知乎
2.异步复位
异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。异步复位RTL代码:
//Asynchronous Reset
module async_rst(
input clk_i,
input rst_n,
input din,
output reg dout
);
always @(posedge clk_i or negedge rst_n) begin
if(!rst_n)
dout <= 0;
else
dout <= din;
end
endmodule
//作者:Kevin Zhang
//链接:https://www.zhihu.com/question/20280893/answer/465957602
//来源:知乎
3.同步复位异步复位优缺点比较
(1)同步复位的优点:一般能够确保电路是百分之百同步的。确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段。
(2)同步复位的缺点:复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,就会耗费较多的逻辑资源。
(3)异步复位优点:异步复位信号识别方便,而且可以很方便的使用全局复位。由于大多数的厂商目标库内的触发器都有异步复位端口,可以节约逻辑资源。
(4)异步复位缺点:复位信号容易受到毛刺的影响。复位结束时刻恰在亚稳态窗口内时,无法决定现在的复位状态是1还是0,会导致亚稳态。
P.S.
FPGA里现在建议同步复位,新一代的器件触发器都富裕,一个LUT拖2个触发器的。
异步复位有两个问题,一个是复位会出现一个大网络,占用全局网络资源,另一个复位和时钟之间是有recover time检查的,单独的一个大复位还好,如果中间再有一些可控的小复位,很多的recover time路径要手工隔离麻烦。
对于上电启动复位次序要求不高的电路同步异步区别不大,对于启动次序要求高或者复位不好会出异常的电路建议启动状态机加同步复位控制启动。