平时接触到的复位有三种,分别是同步复位、异步复位还有异步复位同步释放
·1、同步复位
同步复位里,复位做为使能信号,就不存在因为不满足建立时间而产生的亚稳态,但是如果复位信号有效
周期小于一个时钟周期的话,会出现复位信号采样不到的问题。
always @(posedge clk ) begin if(!rst_n) a <= 1'd0; else a <= b; end
2、异步复位
异步复位比同步复位节省资源,但是如果异步复位结束之后,紧跟着一个时钟上升沿,这时候会产生亚稳态
现象
always @(posedge clk or negedge rst_n) begin if(!rst_n) a <= 1'd0; else a <= b; end
3、异步复位同步释放
异步复位同步释放:这里我参考CB的书上的定义
reg sys_rst_n ; always @(posedge clk) begin sys_rst_n <= rst_n; end always @(posedge clk or negedge sys_rst_n) begin if(!rst_n) a <= 1'd0; else a <= b; end
第一个always块实现了外部时钟的同步化,第二always块将同步的sys_rst_n做为D触发器的复位端。