【芯片设计- RTL 数字逻辑设计入门 9.1 -- CRG模块】

请阅读【芯片设计 RTL 数字逻辑设计扫盲 】


转自:芯片设计基础 -- CRG模块


文章目录

CRG模块

CRG是芯片里的时钟和复位生成模块,全称是 Clock Reset GeneratorCRG模块提供整个系统所需要的时钟和复位信号。本文主要介绍一下CRG时钟系统和复位系统的基本模块和概念。

CRG时钟系统

CRG的时钟部分一般都包括时钟源、锁相环(PLL )、时钟分频、片上时钟控制器(OCC )、时钟门控(ICG)、时钟切换、时钟buffer等电路结构。

  • 时钟源 一般来自外部的晶振。常见的外部晶振有32.768KHz时钟和24MHz时钟(这个频率可变)。32.768KHz时钟一般提供给RTC模块等,用于产生系统时钟、时间戳等。24MHz时钟一般用做PLL的参考时钟。

  • 锁相环(PLL) 基于晶振提供的基准时钟,生成稳定的高频时钟。

  • 时钟分频Divider) 将锁相环输出的高频时钟进行分频,从而满足不同模块的时钟需求。

  • 片上时钟控制器(OCC,On--chip Clock Controller) OCC是插在SoC上的逻辑电路,用来做DFT测试。在自动测试机台上对芯片进行全速测试时,根据scan信号控制选通ATE时钟或芯片内部时钟。

  • 时钟门控(ICG,Integrated Clock Gating) ICG通常是用于控制打开和关闭时钟,从而降低功耗。一般模块级的ICG是手动加,寄存器级别的ICG是综合工具自动加。

  • 时钟切换 一般分为clk mux和clk switch。

clk mux是组合逻辑 ,用于静态切换,动态切换的话会出现 glitch ,如下图所示。

clk switch,时序逻辑 ,可用于动态切换。在两个电平相反的时候切换时钟,肯定有毛刺;电平相同的时候,即使不产生毛刺,时钟切换后的第一个时钟的周期或占空比也不是理想的。所以为避免毛刺的产生,需要在两个时钟都为低电平时进行切换。一种典型的无毛刺时钟切换电路如下所示。

该电路利用时钟下降沿对时钟选择信号 sel_clk 进行缓存。同时一个时钟选择信号对另一个时钟进行反馈控制,保证同一时刻只能有一路时钟有效。最后采用或操作将两路时钟合并,完成时钟切换的过程。

  • 时钟buffer 增强时钟信号的驱动能力。

CRG复位系统

在芯片设计中,复位逻辑是一个很重要的部分。复位是让芯片进入一个能稳定操作且确定的初始状态,从而避免芯片在上电后进行某个随机的状态而死机,或者是运行过程中出现了问题,能通过看门狗等方式产生复位而恢复初始状态。

芯片中的复位源一般分为 片外reset 源和 片内 reset源。

片外的reset源一般有来自PMIC的power reset,来自系统板上的pad reset,jtag reset等。片内的reset源有watchdog timeout reset,software reset及其他硬件机制产生的reset等。一个模块的reset可能由几种或者全部reset源控制。

复位的类型包括同步复位、异步复位、异步复位同步释放。

同步复位

同步复位是指复位信号只有在时钟有效沿到来时,才能有效。同步复位的verilog代码如下:

cpp 复制代码
always @(posedge clk) begin  
   if (!rst_n) begin
     out <= 1'b0;  
   end 
   else if (load) begin
     out <= in;  
   end
end

其综合得到的电路如下

同步复位的优点
  • 同步复位一般能确保电路是100%同步的,有利于时序分析,综合出来的最高频率一般较高;

  • 同步复位会综合成更小的触发器,特别在该复位信号被触发器的输入逻辑门控时;

  • 同步复位确保复位只发生在有效时钟沿。时钟可以作为过滤掉复位毛刺的手段;

在一些设计中,复位必须由一组内部条件产生。推荐在这样的设计中使用同步复位信号,这样可以将时钟之间的复位毛刺过滤掉。

同步复位的缺点

大多数逻辑器件库中的DFF只有异步复位端口,所以使用同步复位,综合器会在寄存器的数据输入端插入组合逻辑,一是会耗费组合逻辑资源,二是综合器无法分辨复位信号和其他数据信号,需要判断综合出的复位信号是否满足设计需求。

复位信号的有效时间必须大于时钟周期,才能保证被可靠地识别,完成复位。所以有时需要脉冲展宽器,以保证复位信号能出现再时钟有效沿处。

门控时钟电路情况:同步复位需要时钟来复位电路。在使用门控时钟时可能出现问题。在复位信号发出时,时钟可能关闭,在这种情况下只能使用异步复位,并在时钟恢复前移除复位信号。

异步复位

异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。使用异步复位的触发器在设计时就加入了一个独立的复位引脚,通过有效的复位信号即可将触发器进入复位初始状态。

下面是带有异步复位信号的触发器的verilog代码:

c 复制代码
always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    out <= 1'b0;
  end 
  else if (load) begin
    out <= in;
  end
end

上述代码所综合出的电路结构如下:

异步复位的优点
  • 异步复位最大的优点是不增加数据路径的延迟,保证数据路径上是干净的,这对于时序很紧张的数据路径来说非常友好。

  • 大多数器件库的DFF都有异步复位端口,采用异步复位可以节省逻辑资源。

  • 最明显的优势是有没有时钟都可以复位,在芯片上电或者门控时钟也能正常复位触发器。

异步复位的缺点
  • 在复位信号释放的时候可能会出现亚稳态问题:复位释放在时钟有效沿附近;

  • 容易受到毛刺的影响

异步复位同步释放

与数据信号需要满足的建立时间和保持时间类似,复位信号也需要满足恢复时间(recovery time)和撤销时间(removal time):

  • 恢复时间:指的是异步复位被设置为无效后,在下一个时钟有效沿到来之前需要保持稳定的最短时间。类似于同步电路中的setup time。

  • 撤销时间:指在时钟有效沿来临之后,异步复位信号需要继续保持有效的最短时间。类似于同步电路中的hold time。

如果不满足异步复位信号的恢复时间和撤销时间,那么可能产生亚稳态。因此需要在异步复位信号释放时对其进行同步(异步复位同步释放),即使用复位同步器,结构如下图所示:

verilog代码如下

csharp 复制代码
always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    rst_dff1 <= 1'b0;
    rst_dff2 <= 1'b0;
  end else begin
    rst_dff1 <= 1'b1;
    rst_dff2 <= rst_dff1;
  end
end
assign masterrst_n = rst_dff2;

首先,当异步复位信号有效时,两个触发器都会被复位为0值,进而驱动主复位信号masterrst_n通过复位缓冲树,再到达设计中的其他触发器,然后整个设计都异步复位(即所谓"异步复位")。

当复位信号被置为无效时,第一个复位寄存器将在时钟的控制下被置为1,随后下一个周期,第二个复位寄存器也会被置为1,最终花费了两个时钟有效沿移除了主复位信号,进而整个设计开始正常工作(即所谓"同步释放")。

上述两个过程合起来称为异步复位同步释放。


如有侵权,请联系删除

相关推荐
蓝斯4978 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip9 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程9 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工9 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip10 小时前
CAN与CANopen的本质区别
单片机
lilihewo11 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET12 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院12 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰13 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥14 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5