SmartFusion2入门级课程——理论学习<3>时钟系统
修订日期:2024年8月3日
目录
前言
一、时钟概述
二、时钟源概述
2.1、片上振荡器
2.2、Fabric CCCs
2.3、MSS CCC
2.4、global buffers
2.5、Dedicated global I/Os(专用的全局I/O)
三、时钟方案
3.1、global buffers
3.2、片上振荡器
3.3、Fabric CCC
3.4、base clocks
3.4.1、MSS CCC
四、FPGA Fabric 全局网络架构
4.1、全局网络架构介绍
4.1.1、专用的全局I/O
4.1.2、Fabric CCC
4.1.3、VCCC
4.1.4、Global Buffer
4.2、推荐的全局网络设计
4.2.1、Global Macros
4.2.2、在Synplify Pro中使用Global Macros
4.2.3、Global Promotion and Demotion Using PDC
五、片上振荡器
5.1、四种振荡器介绍
5.1.1、1MHz RC振荡器
5.1.2、50MHz RC振荡器
5.1.3、主晶振
目录
前言
一 时钟概述
二 时钟源概述
2.1 片上振荡器
2.2 Fabric CCCs
2.3 MSS CCC
2.4 global buffers
2.5 Dedicated global I/Os(专用的全局I/O)
三 时钟方案
3.1 global buffers
3.2 片上振荡器
3.3 Fabric CCC
3.4 base clocks
(一)MSS CCC
四 FPGA Fabric 全局网络架构
(一)全局网络架构介绍
(一)专用的全局I/O
(二)Fabric CCC
(三)VCCC
(四)Global Buffer
(二)推荐的全局网络设计
(一)Global Macros
(二)在Synplify Pro中使用Global Macros
(三)利用PDC进行Global Promotion and Demotion
五 片上振荡器
(一) 四种振荡器介绍
(一) 振幅为l MHz 的RC 振荡器
(二) 频率为50 MHz 的RC 振荡器
(三) 主晶振
(四) 辅助晶振
(二) 如何使用片上晶振
六 Fabric CCC
(一) Fabric CCC的位置
(二) Fabric CCC的输入
(三) 如何使用Fabric CCC
(一) 配置页面
(二) 推荐配置流程
七 MSS CCC
(一) MSS C CC功能组成
(一) MPSL
(二) FACC
FACC 分频器(FACC Dividers)
多路复用器(No-Glitch Multiplexers)
(三) PLL监控机制
(二) MSS 的时钟配置
(三) 如何将MSS 和FIC 子系统进行时钟同步
(四)
前言
作者指出,在实际操作前,有三个关键方面需要进行详细说明:电源、时钟以及复位。
在数字电路系统中,时钟信号被视为最为关键且具有特殊性质的控制信号。
FPGA系统内部的多数器件运行均依赖于时钟信号的上升沿或下降沿。无论是输入输出过程,还是寄存器之间的数据传输,只要涉及到对时钟边沿的采样,都会牵涉到建立时间与保持时间这两个重要参数。
首先,系统中大部分器件的操作均基于时钟跳变沿执行,因此对时钟信号的延迟差异提出了极高要求。若延迟过大,则可能导致时序逻辑出现错误;
其次,时钟信号往往在系统中拥有最高的频率;
第三,由于其承载了大量操作任务,时钟信号通常也是负载最重的信号之一,因此需要科学地分配负载。
基于上述原因,在诸如FPGA等可编程器件内部通常配置有多个专用于驱动系统时钟的全局网络。这些网络具备以下特点:一是具备极强的负载能力,任意一条全局时钟驱动线均可驱动芯片内的触发器;二是具有极小的延迟差异;三是能够有效减少波形失真问题,并确保良好的工作稳定性。
如需获取更详尽的信息,请查阅官方手册UG0449。
一、时钟系统原理与功能概述
时钟,亦即clock信号,是通过晶体激发所产生的振荡电路。在模拟端,借助多种技术(如PLL、DPLL)生成具有规律性和周期性变化的信号,并将其传输至数字端。数字端则利用该信号的边沿执行过程性赋值操作。
时钟在FPGA设计中占据着关键地位,因此深入理解FPGA中的时钟资源具有重要意义。
二、时钟源概述
SmartFusion2系列的时钟源配置详情如下表所示,具体包括:四种振荡器类型(其中两个为芯片内部集成的振荡器)、Fabric CCC(时钟调节电路)、MSS CCC、全局缓冲器以及专为全局I/O设计的专用缓冲模块。

2.片上振荡器设计与实现
片上时钟源可划分为以下四类:1、片上主晶体振荡器;2、片上25/50MHz RC振荡器;3、片上1MHz RC振荡器;4、片上Auxiliary(辅助)晶体振荡器。(RC振荡器属于电阻电容振荡器,其主要缺陷在于输出频率存在偏差,且易受环境温度与湿度变化的影响,此类特性与所采用的元器件制造工艺密切相关)
第四类Auxiliary(辅助)晶体振荡器被专门配置于MSS RTC模块中。
2.2、Fabric CCCs
该结构能够生成具有不同频率及相位特性的时钟信号,每个CCC具备生成四种独立时钟的能力,其最高频率可达到400MHz。在FPGA Fabric CCC中,均配置有专用的PLL以满足Fabric的不同需求,同时Fabric CCCs还可为芯片内部的IP模块提供时钟信号(CLK_BASE),例如MSS(其中MCCC_CLK_BASE连接至MSS CCC)、FDDR以及高速串行接口等。
2.3、MSS CCC
SmartFusion2集成了专门设计的CCC模块,用于MSS的时钟管理。该MSS CCC的主要功能是生成对齐的时钟信号,以实现MSS模块与用户FPGA程序之间的同步操作,从而确保MSS程序能够稳定运行。
2.4、global buffers
SmartFusion2架构中的global buffers(GBs)构建了一个具有低倾斜特性的全局网络,能够贯穿整个FPGA fabric,并且这些缓冲器被分配至不同的时钟域。global buffers不仅能够提供低倾斜率的时钟信号,还可用于实现高扇出网络。所谓高扇出,指的是某一输出信号被多个接收端所获取的情况,常见于复位信号、时钟信号以及使用频率较高的信号中。这一概念通常属于后端设计范畴,也可能指代模块直接调用的下级模块数量。若该数值过大,则在FPGA中可能表现为较大的网络延迟,从而影响时序收敛效果,因此需要特别关注高扇出问题,以避免出现过高的时序延迟现象。
2.5、Dedicated global I/Os(专用的全局I/O)
作为外部输入时钟进入内部全局时钟网络的初始接入点,专用全局I/O负责直接驱动GBs。
三、时钟方案设计与分析
如下图表展示了多种时钟信号、MSS CCC、Fabric CCCs以及GBs之间的关联性。
图示中呈现了一个Fabric CCC的结构,其余类型的CCC在输入与输出方面均表现出相似的特性。通过该图可以发现,第一类振荡器为外部主晶体振荡器,其工作频率范围可设定在32KHz至20MHz之间的外部晶振。

3.1、global buffers
GBs为FPGA fabric提供具有较低倾斜率的全局信号,其驱动方式共有四种:第一种是专用于全局I/O的接口,第二种是虚拟的CCCs(Virtual CCCs,VCCCs),第三种是Fabric CCCs,第四种则是通过FPGA结构路由实现的连接方式。
部分特定的全局I/O可以直接与GBs相连,而其余部分则需借助VCCCs或Fabric CCCs进行连接,并且必须通过规则化的I/O或内部信号经由FPGA结构路由完成传输。
每个CCC模块中的四个全局时钟输出(GLx,x=0至3)均通过硬件与GBs实现连接。此外,GLx还能生成四个核心时钟信号(Yx,x=0至3),用于驱动FPGA结构路由资源。需要注意的是,这些核心时钟并未经过全局时钟缓冲器的布局处理,因此在实际使用过程中可能会出现信号失真现象,进而导致结果偏离预期。
3.片上振荡器设计与分析
MSS以及所有fabric CCCs均通过硬件方式与片上1MHz RC振荡器、50MHz RC振荡器和主晶体振荡器相连接,这些振荡器可作为多个分系统的时钟源,具体包括:第一,fabric CCCs;第二,由FPGA fabric routing构建的用户时钟网络;第三,Flash*Freeze模式下的MSS;第四,MSS RTC。
3.3、Fabric CCC
每个fabric CCC均配备专属的参考时钟,该时钟可由以下来源获取:第一,四个专用于全局I/O的时钟信号(CCC_xyz_CLKIw,其中w的取值范围为0至3);第二,来自FPGA fabric的输入时钟信号(CLKx,其中x的取值范围为0至3);第三,芯片内部集成的时钟源。

3.4、base clocks
所有基础时钟(MCCC_CLK_BASE或CLK_BASE)在传输至MSS或FDDR、SERDESIF之前,必须经过FPGA fabric进行处理。这些基础时钟可通过Fabric CCC模块或内部与外部时钟源生成。MSS CCC模块以基础时钟为基准,利用MPLL生成各类同步时钟信号。而FDDR与SERDESIF子系统则各自配备PLL时钟控制器,用以生成其所需的特定时钟信号。
3.4.1、MSS CCC
SmartFusion2芯片中配置了专门的CCC模块,其作用是生成同步时钟信号,以确保MSS子系统与用户自定义的FPGA fabric逻辑之间的通信能够正常进行。MSS CCC(即MCCC_CLK_BASE)时钟信号可来源于Fabric CCC模块,或者通过FPGA fabric连接至外部时钟源。为了对MCCC_CLK_BASE时钟进行合成与校正,MSS CCC会借助专用的PLL(MPLL)模块实现。
MCCC_CLK_BASE的频率范围为1MHz至200MHz。
MSS(M3_CLK)时钟的最大频率可达166MHz。
MDDR时钟(即MDDR_CLK)的最大频率为333MHz,该频率应为M3_CLK频率的1/2/3/4/6/8倍之一。
用于MDDR fabric接口的时钟(DDR_FIC_CLK)频率为MDDR_CLK频率的Ratio值,具体包括1、2、3、4、6、8、12和16倍。
针对MSS APB0/1外设所使用的时钟频率(APB_0_CLK和APB_1_CLK),其数值为M3_CLK频率的Ratio值,涵盖范围包括1、2、4和8倍。
FPGA fabric接口所对应的时钟信号(FIC_0_CLK和FIC_1_CLK)同样基于M3_CLK进行比例设定,其Ratio值分别为1、2、3、8、16和32倍。
四、FPGA Fabric 全局网络架构
4.1、全局网络架构介绍
4.1.1、专用的全局I/O
SmartFusion2的用户I/Os被细分为多标准I/O(MSIO和MSIOD)以及DDRIOs,其中部分用户I/O可被配置为专用的全局I/O,这些用于驱动全局路由网络或本地路由网络的I/O被称为复用I/Os。
这些专用的全局I/O可作为输入端口,将外部时钟信号引入FPGA fabric,同时它们也具备通用I/O的功能,支持输入或输出操作。
部分专用的全局I/O可以直接与GBs相连,而另一些则需要通过VCCCs或fabric CCCs进行连接。每个Fabric CCC均配备四个专用的全局I/O作为输入,并能够驱动四个GBs。
硬件连接方式被用于将全局专用I/Os与Fabric CCCs、VCCCs及GBs进行连接。
对于全局专用I/Os而言,其命名采用通用格式,例如:IOxyBz/GBn/CCCtype_xyz_CLKIw
专用的全局I/O电压与其所在的IO Bank电压保持一致。对于未使用的IO而言,其配置方式与其他通用IO相同,即设置为输入缓冲器禁用,并且输出为三态弱上拉状态。
4.1.2、Fabric CCC
Fabric CCC能够生成4个独立的全局时钟信号(GL0、GL1、GL2、GL3)以及4个核心时钟信号(Y0、Y1、Y2、Y3),其中全局时钟用于控制GBs的运行,而核心时钟则用于驱动FPGA fabric内部的本地路由资源。
Fabric CCC所输出的核心时钟信号(Yx)可作为内部逻辑模块的驱动源,同时无需占用全局网络资源。然而,由于FPGA fabric内部的路由结构,这些核心时钟信号在传输过程中会产生一定的延迟。因此,在需要减少全局网络资源使用或优化关键路径(Critical Path)的情况下,合理利用core clock显得尤为重要。所谓关键路径,即设计中对时序要求最为严格的路径,通常也是最难满足时序约束的部分。分析该路径的方法主要包括以下几点:首先,应检查该路径是否存在绕远路的情况;其次,需评估clock tree是否均衡,一般来说越均衡的clock tree越有利于满足时序要求;可以通过查看launch clock path与capture clock path之间的delay差值来判断clock tree的质量;最后还需关注data path上是否存在不良缓冲器、过高的负载或过渡效应以及较长的布线等问题。
与全局时钟GLx相关的GBs可被用户自定义逻辑所调用。
4.1.3、VCCC
每个VCCC模块均配备4个专属的全局IO引脚用于输入操作,这些引脚能够驱动4个GBs。VCCC模块不具有与fabric相关的输入输出接口,并且各模块之间无法实现相互连接。
通过Libero SOC开发工具,可以基于专用全局IO对VCCC模块进行自动化的实例化操作,而该过程无法由人工进行干预和执行。

在Libero SOC开发工具中,VCCCs不具备动态配置的能力,然而在FPGA fabric时序编程过程中,可通过设置flash bits来实现相应的配置操作。

4.1.4、Global Buffer
GB作为一种多路复用器,其主要功能是生成相互独立的全局信号。该装置能够由全局专用输入输出端口、织物内部CCC模块、VCCC组件或织物路由结构等多种方式加以驱动。

Libero SoC设计软件依据fabric CCC生成的输出(GL0 - GL3)来完成全局缓冲区(GBs)的配置与分配。
4.2、推荐的全局网络设计
4.2.1、Global Macros
Global macros的功能在于将信号分配至全局网络。下图展示了SmartFusion2中可使用的global macros类型。CLKBUF、CLKBIBUF、GCLKBUF以及GCLKBIBUF macros能够实现将时钟信号从全局专用I/Os布线至GBs,从而确保达到最低的延迟。CLKINT与GCLKINT则用于将内部时钟信号或通用I/O信号通过FPGA fabric routing连接到GBs上。

4.2.2、在Synplify Pro中使用Global Macros
Synplify综合工具能够自动将全局宏单元插入至那些扇出数量超过工具所设定阈值的网络中。该阈值可通过约束命令set_option -globalthreshold进行配置,其中所设定的数值表示扇出负载的最小数量,默认情况下该值为1。
4.2.3、Global Promotion and Demotion Using PDC
Libero SOC设计工具支持用户借助PDC指令,将某一信号升级至全局网络或调整为普通网络。
升级信号的语法格式: assign_global_clock -net netname
该信号在网络编译完成后,系统将自动将其连接至CLKINT进行驱动操作。
将信号降级至普通网络的指令为:unassign_global_clock -net netname
在此过程中,CLKBUF会被转换为INBUF,而CLKINT则会被从对应网络中移除。
五、片上振荡器设计与分析
5.1、四种振荡器介绍
用户逻辑或fabric CCCs的驱动可借助Libero开发工具中提供的Chip Oscillators macro进行片上振荡器配置。
5.1.1、1MHz RC振荡器
1MHz RC振荡器为芯片的核心电压VDD提供电源支持

5.1.2、50MHz RC振荡器
芯片核心电压VDD的供电来源于50MHz RC振荡器

5.1.3、主晶振
主晶振可通过外部连接一个晶体元件以提供信号源,其具备两个I/O接口,分别为XTLOSC_MAIN_EXTAL与XTLOSC_MAIN_XTAL。当未启用主晶振功能时,这两个引脚可保持悬空状态。
该主晶振支持接入三种不同的信号源类型,包括晶体振荡器、电阻电容振荡器以及陶瓷振荡器。这三种信号源所生成的输出频率范围各不相同。


主晶振具备四种不同的运行方式,当在Libero设计工具中对IP核进行配置并选择相应的输入源时,系统将自动完成模式的转换。有关这四种运行方式的具体信息,请参见下表所示内容。



5.1.4、 Auxiliary Crystal Oscillator
为MSS RTC提供辅助功能的晶振需外部连接,其对应的两个I/O接口分别为XTLOSC_AUX_EXTAL与XTLOSC_AUX_XTAL。

5.2、如何使用片上晶振
利用Libero SOC设计工具,能够对三种片上晶体振荡器以及Fabric CCCs进行设置与调整。

当在SmartDesign画布中双击Chip Oscillators以生成时钟信号时,系统将自动弹出对应对话框。用户可从以下三种配置方案中进行选择:采用外部主晶体作为时钟源、使用芯片内部的25/50M频率振荡器、或启用片上1M振荡器。

通过细致分析可以得知,无论从三种选项中挑选哪一种(排除辅助晶体振荡器的情况),均存在两个可行方案:其一是驱动Fabric(FPGA)的CCC,其二是驱动Fabric(FPGA)逻辑。

当采用Main Crystal(主晶振)与fabric CCC进行连接时,其对应的CCC配置界面将呈现如下内容,其中clock选项应当设置为选用主晶振(main crystal oscillator)。

片上晶体振荡器用于驱动fabric CCC(s)的连接方式如下:

片上晶振驱动用户逻辑的具体实现方式如下:

推荐采用主晶体或辅助晶体来生成MSS RTC所需的时钟信号。

六、Fabric CCC架构分析
Fabric CCC的配置方式有两种,一种是借助Libero工具进行设定,另一种则是通过APB3总线接口实现动态调整。

图中所标注的N值表示在特定芯片上可部署的CCC组件总数,例如M2S150型号芯片能够容纳从FCCC_0至FCCC_7共计8个CCC模块。

Fabric CCC具备以下特性:
1、支持接入内部及外部时钟信号源;
2、能够生成四种类型的时钟信号,最高频率可达400MHz;
3、在完成PLL锁定后,可自动输出同步信号;
4、提供可配置的相位误差窗口,用于确定PLL锁定状态;
5、允许对PLL锁定过程进行延迟设置;
6、具备扩频时钟生成(SSCG)功能;
7、实现无故障的动态时钟切换机制;
8、支持时钟延迟或提前调整;
9、可进行时钟相位偏移操作;
10、具备时钟信号反转能力;
11、支持时钟保持功能;
12、实现时钟门控控制。


6.1、Fabric CCC的位置
所有可利用的fabric CCC均与特定的PLL存在对应关系。例如,与CCC-NE1相匹配的PLL支持32 KHz参考时钟输入,而其余如NE0、NW0、NW1、SW0、SW1等所对应的PLL则适用于1 MHz至200 MHz范围内的参考时钟输入。

各类器件所集成的CCC组件数目存在差异,具体范围在2至8个之间。
6.2、Fabric CCC的输入
在采用PLL的情况下,其参考时钟频率需处于1MHz至200MHz的范围之内(其中CCC-NE1例外,必须采用32KHz频率);而在未启用PLL的情形下,fabric CCC的输入时钟频率上限可达到400MHz。
6.3、如何使用Fabric CCC
6.3.1、配置页面
Basic页面的配置界面如下,具体为CCC配置相关内容

Reference Clock 提供三种配置选项:专用输入、Fabric 输入以及振荡器。
专用输入:
编号为 0~3 的专用输入对应管脚名称 CCC_xyz_CLKIw(其中 w 为 0~3),其中 xy 表示 CCC 所处的位置(NE、NW、SE、SW),z 表示 CCC 的序号(0、1)。
根据原理图设计,用户可选择时钟源是否采用差分输入方式。例如在第二张图中,左下角部分展示了相关原理图内容。


Advanced页面的CCC配置界面如下

6.3.2、推荐配置流程
1、确定预期生成的时钟信号数量;
2、设定每条时钟输出通道的工作频率;
3、针对每一个已选定的输出时钟,从中挑选所需的参考时钟(NGMUX主时钟),该参考时钟将用于生成输出。所选参考时钟可为以下任意一种:CCC模块的一个输入时钟(PLL旁路模式)、8个PLL输出相位中的某一个;
4、如需进行相关设置,配置NGMUX从属时钟频率及对应的参考时钟,以实现数据的提取与输出。所选参考时钟可为以下任意一项:CCC模块的一个输入时钟(PLL旁路模式)、8个PLL输出相位中的某一个;
5、若采用PLL:
a)确定PLL的参数化时钟源及其工作频率;
b)指定用于反馈的PLL时钟信号;
c)根据电路板上的电源电压情况,选择适用于PLL的模拟电压值,即2.5V或3.3V;
d)如有需要,通过调整延迟参数来激活可编程延迟组件;
6、输入每个已选定的时钟源频率。配置工具将基于这些频率计算出PLL的参考分频器和反馈分频器参数,以及GPD模块的相关分频系数,如上图所示。
7、在PLL选项配置界面中,设置多项高级参数,例如GPD输出同步配置、PLL SSCG功能以及锁定控制等选项卡中的各项控制参数。

七、MSS CCC模型分析
在SmartFusion2架构中,MSS模块的时钟信号由专有的CCC生成机制提供,其主要作用是实现用户在fabric区域所设计的逻辑电路(即user logic)与系统时钟的同步。具体而言,MSS_CCC作为该模块的基础时钟源,其生成途径可源自fabric CCC或通过FPGA fabric接口引入的外部时钟输入信号。

MSS CCC系统中配置了专用的PLL(MPLL),其主要功能是实现时钟信号的合成,并对MSS时钟输入信号(MCCC_CLK_BASE)进行相应处理。通过构建相关程序,可以观察到在默认配置状态下,MSS接口的具体情况如图所示,其中MCCC_CLK_BASE被定义为MSS时钟输入端口。



MSS部分的CCC模块具备以下可配置功能:
1、MSS所采用的时钟输入信号MCCC_CLK_BASE的频率范围设定为1MHz至200MHz
2、MSS内部时钟(M3_CLK)的最大支持频率可达166MHz
3、MSS中DDR控制器(MDDR)对应的时钟信号(MDDR_CLK)最高频率为333MHz,其值应为M3_CLK频率的1、2、3、4、6、8倍
4、MDDR模块既可由MSS进行控制,也可由Fabric进行控制。在Fabric控制模式下,其对应的时钟信号(DDR_FIC_CLK)为MDDR_CLK除以1、2、3、4、6、8、12或16,具体见下图
5、与MSS APB0/1接口相关的外设时钟(APB_0_CLK和APB_1_CLK)来源于对M3_CLK进行分频处理,分频系数包括1、2、4和8,详情参见下图
6、针对MSS与Fabric之间的接口时钟(FIC_0_CLK和FIC_1_CLK),其来源是将M3_CLK分别按照系数1、2、4、8、16和32进行分频处理,具体见下图
7、设置相位误差参数以完成对MPLL锁定状态的配置(待进一步理解后进行修改)
8、调整并设定用于实现MPLL锁定延时的相关参数
9、“PLL LOCK assertion interrupt”中断信号的生成与锁相环(PLL)是否处于失锁状态密切相关。当锁相环无法维持与输入信号在频率及相位上的稳定关系时,则会进入失锁状态,并由此触发“PLL LOCK assertion interrupt”中断。该中断随后将被传递至位于MSS中的Cortex-M3处理器中
10、“将来自MPLL的信号输出至Fabric”功能的支持情况
11、“若由Fabric CCC生成的信号作为输入源供给至MCCC_CLK_BASE,则需启用Fabric PLL lock monitor”功能
12、“在Flash*Freeze模式运行状态下,需从四种片上可用时钟源中选择适合作为MSs系统时钟源的一个选项”

MDDR的时钟频率为M3_CLK的1、2、3、4、6、8倍。

MSS APB0/1的外设时钟(APB_0_CLK与APB_1_CLK)来源于M3_CLK,并通过1、2、4、8这几个分频系数进行分频处理。

若需配置FIC的时钟功能,首先应启用FIC接口。

MSS的fabric接口时钟(FIC_0_CLK与FIC_1_CLK)所采用的时钟源为M3_CLK,并通过分频系数1、2、4、8、16以及32进行频率调整。

9、PLL锁定确认中断
10、将MPLL的信号传输至fabric区域
7.1、MSS CCC功能组成
MSS CCC由MPLL与FACC(fabric alignment clock controller)共同构成,其主要功能是产生与用户逻辑同步的时钟信号。下方图表展示了MSS CCC所生成的同步时钟信号,该信号以蓝色线条进行标识。

7.MPLL模型设计与实现
MCCC_CLK_BASE作为MPLL的基准时钟信号,在经过MPLL处理后能够被提升至333MHz的频率。该基准时钟信号可由fabric CCC/PLL模块生成,也可源自芯片内部的时钟资源,或者通过全局I/O接口直接接入外部提供的时钟源。

在MPLL成功锁定MCCC_CLK_BASE信号之后,将产生一个名为MCCC_MPLL_LOCK的锁定信号,该信号所具备的频率偏差范围可进行调节,具体区间为500ppm至32000ppm。
7.1.2、FACC
FACC模块承担与MPLL的交互任务,用于生成MSS子模块运行所需的各类时钟信号,并实现与fabric接口时钟的同步控制。

FACC功能模块示意图
以下所列时钟信号均由FACC模块生成

7.1.2.1、FACC分频器(FACC Dividers)
FACC由两个分频组件构成,其功能是将MPLL生成的高频时钟信号调整为MSS各功能模块所需求的时钟频率。
7.1.2.1、多路复用器(No-Glitch Multiplexers)
FACC系统中配置了四通道无故障多路复用器(NGMUXs),在上电初始阶段、FlashFreeze模式以及在线升级IAP(in-application programming)过程中,MPLL尚未完成初始化或暂时处于不可用状态,此时MCCC_CLK_BASE将无法启用。在此情况下,多路复用器会从三个集成在芯片内部的振荡器中选取一个作为替代时钟源(CLK_STANDBY),默认选用50MHz的RC晶振作为备用选项。在FlashFreeze模式下,可选择1MHz或50MHz的RC振荡器作为时钟来源;而在IAP操作期间,多路复用器必须被设定为使用50MHz RC振荡器作为时钟输入。


在MPPL初始化阶段,FACC的配置流程(以绿色线条标识,涉及时钟源的选择过程)
7.1.3、 PLL的监控
MSS CCC模块配备了一个输入引脚,其功能是用于监测fabric PLL的锁定状态,该引脚需与fabric PLL输出的锁定信号进行连接。



MCCC_PLL的锁定状态信号(MCCC_MPLL_LOCK)需由Cortex-M3处理器或用户逻辑代码进行实时监测。
在MSS模块中,存在四个与PLL锁定相关的中断信号,具体划分为fabric PLL锁定中断与MPLL锁定中断两类。相关中断信息可通过访问MSS系统的寄存器实现读取操作。

7.2、MSS的时钟配置


7.3、如何将MSS和FIC子系统进行时钟同步
在MSS与FPGA结构中的FIC子系统之间,同步通信需严格遵守SmartFusion2架构所设定的若干规范:
1、应使用与System Builder向导中Clocks配置选项卡内为特定子系统定义的频率相匹配的时钟信号,驱动每一个FPGA结构中的FIC子系统。
2、所有FPGA结构中FIC子系统的时钟信号中,频率最低的那个必须用于驱动MSS的CLK_BASE信号。
3、确保所有FPGA结构中FIC子系统的时钟信号完全对齐;尽管这些时钟可以具有不同的频率,但需将较慢时钟的上升沿与最快时钟的上升沿进行精确对齐。
当前我的理解是:FIC子系统的时钟来源于Fabric CCC模块,并且Fabric CCC模块还负责为MSS_BASE_CLK提供相应的时钟信号。

7.4、启动后MSS时钟配置顺序
以下将阐述上电后MSS时钟配置的顺序。
1、在完成上电复位之后,MSS将由50MHz RC振荡器时钟通过CLK_STANDBY进行驱动,此时MDDR仍处于复位状态。在此阶段,用户在编写逻辑代码时可通过监测MPLL lock信号来防止代码尝试访问MSS。然而,MSS仍可继续以一种受限模式运行(无法使用FIC);
2、配置fabric CCC、MPLL以及FACC的分频比例:需等待fabric CCC的锁定信号,同时等待MPLL的锁定信号;
3、在完成锁定后,系统控制器会将M3_CLK、HCLK、APB_0/1_CLK以及DDR_FIC_CLK等信号从默认的50MHz切换至FACC设定的频率值;
4、解除对MDDR和fabric接口的复位信号;
词汇表
CCC
Clock conditioning circuitry
FAB_CCC
Fabric CCC configurator
FACC
Fabric alignment clock controller
FBCLK
Fabric PLL feedback clock input
FBDIV
Fabric PLL feedback clock divider
FBDLY
Fabric PLL feedback clock programmable delay
FBMUX
Fabric PLL feedback clock multiplexer
GB
Global buffer
GPD
General purpose frequency divider
GPMUX
General purpose multiplexer
MPLL
Memory subsystem PLL
MSS_CCC
MSS CCC configurator
NGMUX
No-Glitch multiplexer
PLL
Phase-locked loop
RDLY
Fabric PLL reference clock programmable delay
REFCLK
Fabric PLL reference clock input
RFDIV
Fabric PLL reference clock divider
RFMUX
Fabric PLL reference clock multiplexer
SSC
Spread spectrum clock
SSCG
Spread spectrum clock generation
VCCC
Virtual clock conditioning circuitry
专用术语
FPGA fabric
Programmable logic portion of the SmartFusion2 and IGLOO2 devices
Base clock (MCCC_CLK_BASE)
Reference clock input to the MSS and HPMS from the FPGA fabric
On-chip oscillators
Includes various oscillator circuitry available on SmartFusion2 and IGLOO2 devices.
Fabric PLL
The PLL which is used in conjunction with the fabric CCC for generating clocks for the logic implemented in the fabric
Fabric CCC
Provides clock conditioning capabilities to the logic implemented in the FPGA fabric.
High-speed serial interfaces
On-chip SERDES interfaces
User Logic
The logic implemented in the FPGA fabric portion of the SmartFusion2 and IGLOO2 devices
VDD
Device core power supply or core supply voltage
MPLL
The PLL which is dedicated for the MSS and HPMS clocking
Static configuration
Configured using Libero SoC tool and cannot be modified at run time.
Dynamic configuration
Configuration can be modified at run time by writing to appropriate registers.
Glitch free clock switching
Switching the clock source of a subsystem without any glitches.
Clock holding
Stopping the clock signal without any glitches by asserting CCC control input (NGMUX_HOLD_N). It holds the clock signal at Low.
Clock gating
You can enable or disable the global clocks by driving the control signal (GLx_EN) from the FPGA fabric.
