一、复位的类型和划分
通常,芯片的复位信号分为两大类,全局复位和局部复位;
全局复位:能够确保每个寄存器都处于可控的状态;
局部复位:基于软件功能的需求而存在的独立复位,对于某一个模块的单独控制,建议使用局部复位;
(等待完善)
二、同步复位
定义
只有在时钟有效沿采样到复位信号的有效电平时,才会执行复位操作;
代码
always @(posedge clk) begin
if(!rst_n)
out <= 1'b0;
else
out <= in;
end
综合后电路
可能一:
可能二:
优缺点
优点:
一般可以确保电路是同步电路,有利于静态时序分析;
有利于仿真器的仿真;
可以滤除复位信号频率大于时钟频率的毛刺;
缺点:
如综合电路图所示,因为逻辑器件库中的DFF只有异步复位端口,所以综合器会在DFF的数据输入端增加组合逻辑,浪费资源;
复位的有效时长必须大于一个时钟周期;
如果时钟关闭,则无法完成复位;
三、异步复位
定义
无论时钟有效沿是否到,只要复位信号有效,就会立刻进行复位操作;
代码
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
out <= 1'b0;
else
out <= in;
end
综合后电路
优缺点
优点:
复位信号不依赖于时钟,可以实现无时钟复位,这是低功耗技术之一;
与同步复位相比,可以节省资源,保证数据路径上相对干净;
与同步复位相比,复位逻辑与数据路逻辑无关,所以数据路径更好收敛;
缺点:
电路容易受到复位信号上毛刺的影响;
复位信号具有随机性,容易导致recovery time/removal time 为例,进而导致亚稳态;
不利于进行静态时序分析;
四、异步复位的时序分析(recovery time/removal time)
定义
异步复位,时序违例是发生在复位信号释放的时候(从复位状态到非复位状态);下面以rst_n为例
恢复时间和移除时间(recovery time/removal time)
removal time:移除时间
复位信号释放时,有效电平在时钟有效沿到来之后的保持时间,类似于hold time;
recovery time:恢复时间
复位信号释放时,恢复到无效电平在时钟有效沿到来之前的保持时间,类似于setup time;
五、异步复位,同步释放
定义
就是在复位信号到来的时候不受时钟信号的同步,在复位信号释放的时候受到时钟信号的同步;
代码
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
rst_n_d0 <= 1'b0;
rst_n_d1 <= 1'b0;
end
else begin
rst_n_d0 <= 1'b1;
rst_n_d1 <= rst_n_d0;
end
end
assign rst_n_sync = rst_n_d1;
always @(posedge clk or negedge rst_n_sync) begin
if(!rst_n_sync)
out <= 1'b0;
else
out <= in;
end
综合后电路
优缺点
优点:
快速复位,只要复位信号有效,电路会立刻复位;
有效捕捉复位,短脉冲复位不会丢失;文章来源:https://www.toymoban.com/news/detail-420125.html
复位的释放是同步的,有良好的撤离时序和足够的恢复时间;文章来源地址https://www.toymoban.com/news/detail-420125.html
到了这里,关于verilog设计技巧 (1) :复位技术(同步复位、异步复位、异步复位同步释放)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!