1. 前言
CRG(Clock and Reset Generation,时钟复位生成模块) 模块扮演着关键角色。这个模块负责为整个系统提供稳定可靠的时钟信号,同时在系统上电或出现故障时生成复位信号,确保各个模块按预期运行。简而言之,CRG模块就像是SoC系统的心脏,提供着整个系统需要的时钟和复位信号。
出于时钟复位结构规范设计和DFT可控的目的,一般会把相关电路放在一个集中的模块中管理,由专门的设计人员按需求进行设计与维护。对于时钟分频、MUX、切换、DFT测试结构埋入等等,均在模块内部实现。复位类似。
涉及到的主要技术:自动解复位,复位顺序,复位切频,时钟门控,亚稳态的恢复,异步复位同步释放,毛刺清除的技术细节。不用公司,不同芯片,因为场景不同,对于CRG的要求也不尽相同,但是具体的技术原理大同小异。CRG中主要包含这些东西:
2. 复位基本概念
2.1 复位源
复位的作用:使电路(主要是触发器)进入一个能稳定操作的确定状态,主要表现为:
- 使电路从确定的初始状态下开始运行
- 修复系统,实现故障自愈,使电路从错误状态回到可以控制的确定状态
复位源:硬复位、上电复位、软复位、异常复位
复位控制:系统、应用环境决定何时复位
2.2 复位结构
3. 复位类型
3.1 同步复位
复位信号在时钟有效沿到来时生效。
优点:确保电路是同步的,触发器面积小,时钟可以滤除复位上的毛刺
缺点:依赖时钟,需要确保复位时钟必须有且保持足够时间,否则复位无法生效
3.2 异步复位
不依赖时钟,立即生效。
异步复位撤离问题:
recovery time:复位撤离时,复位信号从有效跳变为无效的(由1变为0)时刻与下一个时钟沿之间的时间,类似于同步电路中的setup time。
remove time:复位撤离时,复位信号从有效跳变为无效时与上一个时钟沿之间的时间,类似于同步电路中的hold time。
如图所示,rst_n为0表示复位,clk上升沿触发,rst_n从0到1的上升沿与时钟上升沿必须不小于recovery time才能保证寄存器恢复到正常状态。rst_n保持为0经过clk上升沿后仍需要保持一段时间,才能保证寄存器有效复位,防止亚稳态。
解决办法:异步复位,同步释放。
4. 异步复位同步撤离
4.1 为什么需要异步复位,同步撤离
原因主要是:
- 如果同步复位,同步释放,需要对复位信号进行同步,对于外部复位来讲容易形成锁死的问题。这是个鸡生蛋蛋生鸡的问题。复位信号用寄存器同步,然后用同步后的信号复位寄存器,我复位我自己?所以同步复位同步释放多用于软复位。
- 如果异步复位,异步释放,异步的释放操作非常容易导致亚稳态。相当于没有复位。
- 如果同步复位,异步释放,emmm 感觉上一般没有人这么折腾自己。
所以就剩下了一种办法,异步复位,同步释放。这个较为简单和典型。记住即可。硬复位信号都应该这么产生。
4.2 方案
4.3 毛刺问题
当外部输入的异步信号产生毛刺时,任何满足触发器最小复位脉冲宽度的输入都有可能引起触发器复位
解决办法:使用滤毛刺电路