同步复位
描述:只有clk有效沿到来时,才会对输出信号进行复位。
verilog实现
同步复位的verilog实现如下:
always @(posedge clk) begin
if(!rstn) begin
out<=0;
end else begin
out<=in;
end
end
电路实现
暂时没画,稍后补上。
异步复位
描述:当clk有效沿来临,或复位信号有效时,就会对输出信号进行复位。
verilog实现
异步复位的verilog实现如下:
always @(posedge clk or negedge rstn) begin
if(!rstn) begin
out<=0;
end else begin
out<=in;
end
end
电路实现
暂时没画,稍后补上。
优缺点对比
同步复位 | 异步复位 |
---|---|
✅能够过滤掉复位信号中的毛刺,以防产生亚稳态 | ❌如果复位信号包含毛刺,则电路可能被意外复位 |
✅复位信号是同步信号,更利于时序分析的收敛 | ❌复位信号是异步信号,释放时有可能产生亚稳态 |
❌信号需要做同步、浪费器件资源 | ✅标准单元库的寄存器大多带有异步复位端 |
❌需要clk才能做复位,因此刚上电没有clk的时候容易产生x态 | ✅异步复位逻辑相对简单 |
异步复位同步释放
一般而言电路更多采用异步复位,针对异步释放的缺点,可以做一些改进,也就是异步复位同步释放。
verilog实现
异步复位同步释放的verilog实现如下:
always @(posedge clk or negedge rstn_async) begin
if(!rstn_async) begin
q1 <= 0;
q2 <= 0;
end else begin
q1 <= 1;
q2 <= q1;
end
end
assign rstn_sync = q2;
时序图
暂时没画,后面补上。