博客
关于我
复位策略
阅读量:525 次
发布时间:2019-03-08

本文共 1588 字,大约阅读时间需要 5 分钟。

在IC系统中,复位的目的是为了将芯片强制到一个已知的状态。同步复位与异步复位都能达到这个目的,但它们在工作原理上有明显的区别。

同步复位需要时钟信号有效沿到达寄存器之前才能起作用,这意味着在没有时钟信号的情况下,复位无法正常工作。这种设计在基于周期的仿真器中特别常见,因为它能有效地过滤掉复位信号的毛刺。然而,同步复位在实际应用中也存在一些缺点。复位信号需要通过复位树从上至下传播,这会导致复位路径的延迟较大。此外,如果在总线上出现反射或噪声,可能会引发短路问题,这时就需要额外的上电复位电路来解决。

异步复位与同步复位相比,不依赖时钟信号就能工作。这种设计无需时钟,简化了电路结构,减少了复位延迟对总线的影响。然而,异步复位也存在一些缺点。复位信号的毛刺需要通过特殊电路来消除,否则可能会导致寄存器状态异常。此外,异步复位的无效沿与时钟信号之间必须保持严格的时间序(recovery和removal)。综合来看,异步复位的优势在于不依赖时钟,但其复位毛刺处理和时序要求使得实际应用中需要额外考虑。

为了结合同步复位和异步复位的优点,工程师常采用混合的方式。通常,先通过强制驱动异步复位到同步器,再通过同步器输出至下一个阶段。这种设计既保证了复位信号的有效性,又避免了异步复位的时序问题。以下图展示了一种典型的复位同步器设计,外部的复位信号输入后,经过同步器处理后再传递到寄存器。

复位同步器的工作原理如下:当复位信号低电平有效时,同步器内的两个寄存器都会被置为低电平状态,输出复位信号会立即有效,无需等待时钟信号。只有当复位信号恢复高电平时,才需要等待时钟信号的跳变,才能确保输出信号的无效沿与时钟同步。这一设计巧妙地解决了异步复位时序问题,同时仍然能保证复位信号的高效传递。

以下是实现复位同步器的典型代码示例:

module async_resetFFstyle2(rst_n, clk, asyncrst_n);    output rst_n;    input clk, asyncrst_n;    reg rst_n, rff1;    always @(posedge clk or negedge asyncrst_n)    if (!asyncrst_n) {        rst_n, rff1 <= 2'b0;    } else {        rst_n, rff1 <= {rff1, 1'b1};    }endmodule

在实际应用中,复位信号的毛刺仍然是一个需要关注的问题。为了解决这一问题,可在输入复位信号前加入去毛刺电路。以下是一个常见的去毛刺方法:

// 去掉复位信号的毛刺always @(posedge clk_i)    global_rst_dly3, global_rst_dly2, global_rst_dly1 <=         {global_rst_dly2, global_rst_dly1, rst_n_hw};always @(posedge clk_i)    global_rst_n_no_glitch <=         global_rst_dly3 | global_rst_dly2 | global_rst_dly1;

这是一个基于时钟自带的去毛刺电路,其核心原理是通过延迟多个时钟周期,以确保复位信号稳定后再传播到各个使用的部件。

此外,确保上电复位电路的稳定性也非常重要。特别是在多个总线上使用复位信号时,需要预留足够的延迟和缓冲区,以防止晶振尚未稳定或锁相环未完全启动的时期所引起的总线冲突。

总结来说,综合考虑信号的时序、延迟以及电路复杂度,选择合适的复位方式至关重要。在实际设计中,需要根据具体需求和场景权衡同步复位和异步复位的优缺点,以达到最佳的系统性能与稳定性。

转载地址:http://aoviz.baihongyu.com/

你可能感兴趣的文章
Silverlight for linux 和 DLR(Dynamic Language Runtime)
查看>>
ASP.NET MVC Action Filters
查看>>
Windows SharePoint Services 3.0 Service Pack 2
查看>>
兰州大学百年校庆--风雨百年萃英路
查看>>
WCF WebHttp Services in .NET 4
查看>>
Powershell中禁止执行脚本解决办法
查看>>
HTTP协议状态码详解(HTTP Status Code)
查看>>
OO_Unit2 多线程电梯总结
查看>>
git clone 出现fatal: unable to access ‘https://github 错误解决方法
查看>>
Shader 入门笔记(一) 如何学习shader
查看>>
分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案
查看>>
04_Mysql配置文件(重要参数)
查看>>
python 序列化及其相关模块(json,pickle,shelve,xml)详解
查看>>
python 加密算法及其相关模块的学习(hashlib,RSA,random,string,math)
查看>>
js编写动态时钟
查看>>
JavaSE总结
查看>>
Consul安装使用
查看>>
手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
查看>>
Python IO编程
查看>>
CSS入门总结
查看>>