谈谈我对这一块的理解:
在我的工程经历中所见到的复位大都是异步复位(本人小白,可能见到的不够多),那么为啥会有今天的这一个讨论呢?我认为我们在实际的模块设计中所使用的复位信号都是系统内的,而今天所探讨的应该是系统外输入的复位信号的处理。比如通过按键输入到系统的复位信号,这时这个复位信号进入系统就需要我们进行处理了,也就是今天要讨论的异步复位同步释放的问题。
对于复位信号进行复位,首先要满足setup time,不然复位信号可能会产生亚稳态。因此我们在设计中就要满足这个建立时间,从而避免亚稳态的产生。
同步复位:
module sync(
input clk,
input rst_n,
output reg rst_n_s
);
always @(posedge clk) begin
if(!rst_n)
rst_n_s <= 1'b0;
else
rst_n_s <= 1'b1;
end
endmodule
这样就可以将外部信号输入系统内部,同时实现同步,但是由于FPGA的大多数器件都是支持异步复位端口的,所以实现同步复位需要在这些端口间插入组合逻辑,这样浪费较多的逻辑资源,所以一般我们不这样同步复位