SOC芯片的时钟来源有两种

1、外部oscillator(SOC芯片留有专用的PAD XTALI)

2、内部oscillator

外部oscillator采用分立的oscillator,可以生成超高精度的时钟,但其功耗较大,在实际应用中,具体采用外部oscillator或内部oscillator,一般要综合考虑时钟精度需求和功耗要求。在SOC芯片的功能仿真中,oscillator采用model,由于不需要考虑时钟精度和功耗等因素,且为了简化验证环境,时钟通常来自内部oscillator。内部oscillator分为RC oscillator和crystal oscillator两种。

RC oscillator(电阻电容震荡器)

由于电阻电容的的精度问题,且受到温度和湿度的影响,RC oscillator产生的时钟频率会有偏差,但RC oscillator可以较快的输出稳定的时钟,但实际上,这种频率偏差可以通过trim值(trim值通过OTP FUSE的方式,在芯片制造的时候烧写进去)来调校,因此,RC oscillator也可以输出较高精度的时钟。

crystal oscillator(晶体震荡器)

crystal oscillator输出的时钟频率精度较高,且其精度也可以通过trim值来调校,但其明显的缺陷是从起震到输出稳定时钟频率的时间较长。

由于crystal oscillator的稳定时间较长,而要求SOC芯片上电后能比较快速的进入user case,所以crystal oscillator不合适用于SOC芯片的boot,在完成boot阶段后,需要在pre_main函数(在main函数之前执行的C函数)中使能crystal oscillator,待稳定后,crystal oscillator便可以和RC oscillator一同为SOC芯片的所有模块提供时钟。

下面具体以我所做过的一款SOC芯片来说明

该SOC芯片提供了6个内部oscillator,其中2个crystal oscillator和3个RC oscillator

24MHZ crystal oscillator

32KHZ crystal oscillator

48MHZ RC oscillator

200MHZ RC oscillator

32KHZ RC oscillator

SOC芯片在boot阶段时,所有外设、CPU core以及总线的时钟直接是48MHz RC oscillator DIV2(二分频),即24MHZ,在SOC芯片boot完成后,可以重新为所有外设、CPU core以及总线配置相应频率的时钟。

24MHzMHz crystal oscillator作为所有PLL的第一参考电压,48MHz RC oscillator DIV2作为第二参考电压,200MHz RC oscillator、48MHz RC oscillator DIV2、PLL、PLL_DIV(DIV是指对PLL输出的时钟进行预分频)以及PLL_PFD(PFD是指对PLL输出的时钟进行相位操作)作为时钟源,时钟控制器模块可以通过配置寄存器选择一个合适的时钟源,然后进行分频,从而为外设、CPU core以及总线提供合适频率的时钟,oscillator、PLL、PLL_DIV以及PLL_PFD并不在时钟控制器模块中,因为它们是模拟模块,而时钟控制器模块是纯数字模块,只是时钟控制器模块可以选择来自PLL/PLL_DIV/PLL_PFD的时钟作为时钟源,且时钟控制模块可以控制PLL的开启与关闭。

在pre_main函数中,首先为PLL供电,然后使能24MHZ crystal oscillator且待其稳定后,仅仅需要重新配置一个最小系统(CPU core和BUS)的时钟即可,在这之前必须initial与之相关的PLL,但其他外设时钟依然都是24MHZ,这样做的原因有两点,一是把外设正常工作时钟的配置放在其对应的case中,可以缩短SOC芯片从上电到进入main函数的时间,二是外设时钟按需配置,因为SOC芯片往往只会用到一部分外设,把没有使用到的外设也配置成正常工作时钟,只会造成功耗的浪费。

32KHZ crystal oscillator和32KHZ RC oscillator产生的32KHZ时钟供时钟控制模块、全局功耗控制模块、复位控制模块以及实时计数器模块(RTC)使用,且这个32KHZ时钟是不能被关掉的。如果一个IP模块存在bug,不想开放给客户使用,或者客户没有为某个IP模块付钱,不想把该IP模块开放给客户使用,那么可以把IP模块fuse掉,关于fuse的原理,这里并不展开描述,fuse的效果是关掉IP模块的时钟,如果时钟被关掉,IP模块当然是没办法工作的。

如果一个IP不再使用了,那么可以通过时钟控制器关闭其时钟,以降低功耗,此外,在low power mode时,时钟控制器可以在全局功耗控制器的控制下关闭PLL以及IP时钟。对于IP而言,其输入的时钟有三类:

1、访问IP寄存器的时钟

2、用于读写其他内部寄存器的时钟

3、IP function时钟

这里要特别注意的是访问IP寄存器的时钟,实际上它是由两个时钟拼接而成,前面一段是由复位控制模块提供的复位时钟,后面一段是受控的总线时钟,CPU core在访问IP寄存器时,会拉高IP的module_en信号,只有当module_en信号有效时,访问IP寄存器的时钟才是总线时钟,这样做的目的是降低功耗(时钟翻转造成的功耗占比较高),而用于读写其他内部寄存器的时钟是总线时钟,总线时钟和IP function时钟是总是存在的(除非通过时钟控制模块关掉),SOC芯片由于规模比较大,通常分为几个MIX,每个MIX内所有IP模块共用同一个总线时钟,同样的,复位控制模块送出的异步复位信号以及复位时钟也是分别送到每个MIX,并且为每个MIX内的所有IP模块共用,而每个IP的function clk可能各不相同。

上面讲到,访问IP寄存器的时钟前面一段实际上是来源于复位控制模块,因此复位控制模块给IP提供复位时钟和异步复位信号,此时复位其实是同步复位,可能是从SOC的角度考虑到,为了避免异步复位信号释放时可能出现的亚稳态问题。IP模块的内部寄存器同样也需要复位,由于异步复位信号并没有同步到这些内部寄存器的读写时钟,因此,异步复位信号可能在时钟有效沿附近释放,从而导致寄存器出现亚稳态,因此,在IP模块内部,必须把异步复位信号的释放同步到读写时钟(总线时钟和IP function时钟)。实际上,在异步复位信号释放前,复位控制模块会发一个信号,使时钟控制模块关闭总线时钟以及所有的IP function时钟(32KHZ时钟不关闭),异步复位信号释放后,时钟再重新打开,显然,在异步复位信号释放时是没有时钟,因此不会出现亚稳态,以上三种措施可以保证异步复位信号在释放时不会造成触发器出现亚稳态问题。

SOC芯片的时钟生成策略相关推荐

  1. SOC芯片的功耗管理策略

    SOC芯片的功耗模式(power mode)如下表所示,其本质上是电压和时钟控制的组合,按照CPU是否进入sleep模式可以分为两大类. CPU不进入sleep模式的功耗模式 SOC芯片在完成boot ...

  2. SOC芯片的电源管理策略

    下面以我所做过的一款SOC芯片来说明 SOC芯片集成一个DCDC, 该DCDC具有动态电压调节,可以通过配置寄存器调节输出电压大小,另外DCDC输出的电压可能有偏差,通过TRIM值可以调节精度.SOC ...

  3. 2022世界传感器大会 | 龙芯中科发布龙芯2K0500多功能SoC芯片及解决方案

    8月21日,由工业和信息化部.中国科学技术协会.河南省人民政府共同主办的2022世界传感器大会在郑州开幕,众多诺奖.图灵奖获得者.海内外院士和专家学者出席,全球传感器领域最具影响力的相关企业参加.龙芯 ...

  4. Exynos4412芯片的时钟管理单元

    本章介绍Exynos4412芯片的时钟管理单元(CMU).CMU控制锁相环(PLL)并为Exynos4412芯片中的各个IP.总线和模块产生时钟.它们还与电源管理单元(PMU)通信,以便在进入某个低功 ...

  5. 如何通过设计验证让SoC芯片流片成功

    原文并没有介绍后仿.即netlist的presim/postsim(presim是未经过后端布局布线的netlist,sdf文件由PrimeTime产生:postsim是经过后端布局布线的netlis ...

  6. Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  7. hibernate之主键生成策略

    一.主键类型 1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性) 表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键. 例如:在person表中的身份证号,既是唯一的,又 ...

  8. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

  9. Hibernate各种主键生成策略与配置详解

    为什么80%的码农都做不了架构师?>>>    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibern ...

最新文章

  1. input输入框在移动端点击有阴影解决方法
  2. linux 服务器安装mysql5.6
  3. Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误
  4. springCloud - 第11篇 - Eureka 注册中心集群的实现
  5. python读取mysql数据库_Python操作MySQL数据库9个实用实例
  6. 安卓下拉框获取序号_中文编程:安卓的右上角菜单
  7. FPGA RAM存储器设计
  8. Unity3D游戏资源的提取
  9. x570支持Linux系统吗,苹果中国官网调整:Mac Pro正式支持选配AMD W5500X显卡
  10. 来诈金花嘛?Python实现的那种
  11. SVN代码迁移到Gitlab(保留SVN的提交记录)
  12. 新加坡国立大学招收博士生/博士后/研究助理/访问学生
  13. 牛客错题集C++(一)
  14. Oracle 游标遍历 显式游标 静态游标 OPEN v_cur(); WHILE v_cur%FOUND LOOP; LOOP FETCH v_cur INTO v_row
  15. 支付宝个人收款解决方案
  16. 2020G1工业锅炉司炉证考试及G1工业锅炉司炉作业模拟考试
  17. HP Proliant DL388 Gen9 服务器 BIOS 设置丢失,win2008 r2启动引导文件修复
  18. Linux环境下连连看游戏代码,C++实现连连看游戏核心代码
  19. web开发之需求分析
  20. Oracle 自动段空间管理(ASSM:auto segment space management)

热门文章

  1. JAVA 格式化英文日期
  2. 【DaVinci Developer工具实战】05 - DaVinci Developer 功能区概述和介绍
  3. 神经网络中的概率分布函数
  4. 【ShaderToy中图形效果转译到UnityShaderlab案例分享,数学计算八卦阵_Yin Yang】
  5. thx是什么意思_thx,np,kk,lol,2b?老外在游戏里说的英语什么意思?
  6. How the CLR Creates Runtime Objects
  7. drm-memory
  8. grubby - Unix,Linux命令 修复飘盘的情况
  9. java毕业设计牙科诊所信息化管理平台Mybatis+系统+数据库+调试部署
  10. java while语句打印三角形_Java 循环结构