本文主要是提供了 ASIC 设计中关于复位技术相关的概念和设计。
当时钟上升沿检测到复位信号时,执行复位操作(有效的时钟沿是前提)。
always @( posedge clk )begin
if(!rst_n)
b <= 0;
else
b <= a;
end
同步复位的 RTL 电路图
优点
缺点
无论时钟上升沿是否到来,只要复位信号有效,就执行复位操作。
always @( posedge clk or negedge rst_n )begin
if(!rst_n)
b <= 0;
else
b <= a;
end
异步复位的 RTL 电路图
优点
缺点
推荐异步复位、同步释放的方式,并且复位信号为低电平有效:异步复位、同步释放指的是复位信号的到来与撤除都与 clk 无关,但是复位信号的撤除是在下一个 clk 到来之后才执行,也就是复位信号 rst_sync_n 由高到低时实现异步复位。电路的目的是防止复位信号的撤除时可能产生的亚稳态。
珍贵的手绘图
对于同步释放,这个是关键,即当复位信号 rst_async_n 撤除时(由低到高),由于双缓冲电路(双寄存器)的作用,rst_sync_n 不会随着 rst_async_n 的撤除而撤除。假设 rst_async_n 撤除时发生在 clk 上升沿,如果不加此电路则可能发生亚稳态事件。
但是,加上此电路之后,假设第一级 D 触发器 clk 上升沿时 rst_async_n 正好撤除,(第一个 DFF 此时是出于亚稳态的,假设此时识别到高电平;若是识别到低电平,则增加一个 Delay)则 DFF1 输出高电平,此时第二级触发器也会更新输出,但是输出值为前一级触发器 clk 来之前时的 Q1 输出状态。显然,Q1 之前为低电平,所以第二级触发器输出保持复位低电平,直到下一个 clk 来之后,才随着变为高电平,即同步释放。
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
rst_r <= 2'b00;
else
rst_r <= {rst_r[0],1'b1};
end
assign sys_rst_n = rst_r[1];
always @(posedge clk or negedge sys_rst_n)begin
if(!sys_rst_n)
b <= 1'b0;
else
b <= a;
end
异步复位、同步释放的 RTL 电路图
全部0条评论
快来发表一下你的评论吧 !