【芯片设计- 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,最终花费了两个时钟有效沿移除了主复位信号,进而整个设计开始正常工作(即所谓"同步释放")。

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


如有侵权,请联系删除

相关推荐
廊桥遗梦7282 小时前
STM32外设篇:超声波测距模块
stm32·单片机·嵌入式硬件
L_Z_J_I5 小时前
HAL库:中断 方式按键检测:抬起执行、按下执行、长按短按检测、延时执行
汇编·stm32·单片机
soupT8 小时前
6-1 STM32F405--DAC输出(软件触发)
stm32·单片机·嵌入式硬件
m0_619731198 小时前
USB详解,配置及难点
开发语言·stm32·单片机·嵌入式硬件
做一道光10 小时前
51单片机——按键控制
单片机·嵌入式硬件·51单片机
做一道光11 小时前
51单片机——LED灯控制
单片机·嵌入式硬件·51单片机
钟剑锋-JeffChong12 小时前
USART之串口发送+接收应用案例
stm32·单片机·usart·嵌入式开发·串口收发
嵌入式详谈12 小时前
基于STM32开发的智能家居语音控制系统
stm32·嵌入式硬件·智能家居
define_mine14 小时前
我的香橙派闹钟-v0.1 mini
linux·python·嵌入式硬件
南耿先生15 小时前
我主编的电子技术实验手册(18)——认识电感
单片机·嵌入式硬件