当前位置: 首页 > news >正文

FPGA时序约束(五)--衍生时钟约束

前言

        本文从衍生时钟的定义,它起到的作用来帮助大家理解衍生时钟约束的意义。同时也给出了具体的约束方法和实例帮助大家实际的使用。

衍生时钟是什么

        衍生时钟是由FPGA内部的时钟管理单元(如MMCM、PLL)或普通逻辑(如寄存器)对​​主时钟(Primary Clock)​​ 进行变换(分频、倍频、相位移动等)后所产生的新时钟。
​​来源​​:
1.时钟管理单元​​(MMCM/PLL):这是最常见、最可靠的方式。产生的是频率/相位精确的时钟。
2.​​RTL逻辑​​:通过寄存器对主时钟进行分频或门控产生。这种方式产生的时钟质量较差(容易产生毛刺、高时钟偏移),通常不推荐用于高速设计。
​​        关键特性​​:衍生时钟的时序特性(周期、相位)完全​​依赖于其源时钟(Source Clock)​​。它不是独立的。

为什么必须约束衍生时钟​

​核心原因:为静态时序分析(STA)工具建立清晰的时钟派生关系模型。​​如果不约束,工具会将衍生时钟信号视为​普通数据信号​​,而不是时钟。这将导致:
1.​​无法识别时钟树​​:工具不知道这个信号是时钟,不会为其分配低偏移的全局时钟资源(BUFG),导致时钟质量差。
2.​​时序路径缺失分析​​:由这个衍生时钟驱动的所有寄存器之间的路径,以及它与其它时钟域之间的路径,都会被标记为 ​unconstrained(未约束)​而无法得到有效检查,从而隐藏了严重的时序违例风险。
3.错误的时序计算​​:即使工具识别出它是时钟,如果不告知其与主时钟的关系,工具也无法知道其准确的周期和边沿位置,计算出的时序结果毫无意义。
        约束衍生时钟,就是明确地告诉STA工具:“这个信号是时钟,它是由那个主时钟通过某种方式产生的,请你按照这个关系去分析所有与之相关的时序路径。”​

衍生时钟约束命令

基本语法:

create_generated_clock -name <generated_clock_name> \-source <source_clock_pin> \-divide_by <N> | -multiply_by <N> | -edges <edge_list> \[get_pins <generated_clock_pin>]

-name​:为衍生时钟命名。这个名字将用于后续的时序约束引用。
-source​:​​这是最重要的参数!​​ 它指定了衍生时钟的​​物理源点​​。这个点必须是​​主时钟直接驱动的物理引脚​​,例如:
PLL/MMCM的输入时钟引脚 [get_pins mmcm0/CLKIN]
PLL/MMCM的输出时钟引脚 [get_pins mmcm0/CLKOUT0](用于多级生成)
驱动衍生逻辑的寄存器时钟引脚 [get_pins clk_div_reg/C]
​​-divide_by-multiply_by​​:定义分频或倍频系数。例如,主时钟100MHz,-divide_by 2生成50MHz时钟。
-edges​​:最灵活的定义方式,通过主时钟的边沿列表来精确定义衍生时钟的波形。
  -edges {1, 3, 5}表示衍生时钟的第一个上升沿对应主时钟的第一个边沿(上升沿),下降沿对应主时钟的第三个边沿(下降沿),下一个上升沿对应第五个边沿。
[get_pins]​:指定衍生时钟的​​物理产生点​​。这同样是关键!
对于PLL/MMCM,是其输出引脚 [get_pins mmcm0/CLKOUT0]
对于RTL分频,是寄存器输出引脚 [get_pins clk_div_reg/Q]

 GUI实现

        像之前的主时钟约束一样,延时时钟也可以用GUI来实现。
首先打开综合界面下的Edit Timing Constraints

进去之后点击Create Generated Clock

图中的配置和约束命令是对应的,GUI可能会更加方便些。

衍生时钟约束实例

      场景1:基础二分频时钟​

        主时钟 clk_100m (100MHz, 10ns period) 通过一个寄存器进行二分频,产生一个 50MHz 的时钟 clk_50m

create_clock -period 10.000 -name clk_100m [get_ports clk_in]create_generated_clock -name clk_50m \-source [get_ports clk_in] \-divide_by 2 \[get_pins div_reg/Q]
  •  source: 指向原始时钟的源头 clk_in 端口。这是计算新时钟时序的起点。
  •  divide_by 2: 定义分频系数,频率变为主时钟的 1/2。
  •  [get_pins div_reg/Q]: 指定生成时钟的物理源点,即分频寄存器的输出引脚 Q。工具会从这里开始传播新的时钟网络。

场景2:PLL 倍频时钟

        使用芯片内部的 PLL 或 MMCM 硬核资源来产生一个更高频率的时钟。主时钟 clk_50m 输入到 PLL,PLL 产生一个倍频后的 200MHz 时钟 clk_200m 并从 clk_out1 引脚输出。

create_clock -period 20.000 -name clk_50m [get_ports clk_in]create_generated_clock -name clk_200m \-source [get_pins pll_inst/CLKIN] \-multiply_by 4 \[get_pins pll_inst/CLKOUT1]

总而言之,衍生时钟约束是主时钟约束的延伸。它通过建立清晰的时钟派生树,将芯片内部的时钟生成逻辑纳入时序分析的范围,确保了整个设计时序分析的完整性和正确性。​​ 


文章转载自:

http://lJpL36pt.xckqs.cn
http://nSRaFBUq.xckqs.cn
http://TOdlpVcP.xckqs.cn
http://Tvc615wk.xckqs.cn
http://cTKDo9mR.xckqs.cn
http://OYMBzzCX.xckqs.cn
http://eSmNdkWU.xckqs.cn
http://zNwI75dm.xckqs.cn
http://UYJHm7Lo.xckqs.cn
http://rL0Poj8i.xckqs.cn
http://UseN8D82.xckqs.cn
http://ASDCFjtu.xckqs.cn
http://voUAsiUo.xckqs.cn
http://G2qqhEHu.xckqs.cn
http://drTZd3Ub.xckqs.cn
http://FSfIz82r.xckqs.cn
http://HrCukFhN.xckqs.cn
http://bRSc0sqf.xckqs.cn
http://e8AoLi6A.xckqs.cn
http://KQhdocAY.xckqs.cn
http://irnRAuj2.xckqs.cn
http://KXskxMXB.xckqs.cn
http://6aCiFKfa.xckqs.cn
http://Szxy5vXV.xckqs.cn
http://clmqDq99.xckqs.cn
http://TsUzLAKK.xckqs.cn
http://bu4Jzl1l.xckqs.cn
http://VwFYlYMc.xckqs.cn
http://8IqUGIrr.xckqs.cn
http://b5IFB5IC.xckqs.cn
http://www.dtcms.com/a/384802.html

相关文章:

  • 【C语言】第八课 输入输出与文件操作​​
  • 滤波器模块选型指南:关键参数与实用建议
  • 现有的双边拍卖机制——VCG和McAfee
  • Linux 系统、内核及 systemd 服务等相关知识
  • 企业级 Docker 应用:部署、仓库与安全加固
  • 倍福TwinCAT HMI如何关联PLC变量
  • 2025.9.25大模型学习
  • Java开发工具选择指南:Eclipse、NetBeans与IntelliJ IDEA对比
  • C++多线程编程:从基础到高级实践
  • JavaWeb 从入门到面试:Tomcat、Servlet、JSP、过滤器、监听器、分页与Ajax全面解析
  • Java 设计模式——分类及功能:从理论分类到实战场景映射
  • 【LangChain指南】输出解析器(Output parsers)
  • 答题卡识别改分项目
  • 【C语言】第七课 字符串与危险函数​​
  • Java 网络编程全解析
  • GD32VW553-IOT V2开发版【三分钟快速环境搭建教程 VSCode】
  • Docker 与 VSCode 远程容器连接问题深度排查与解决指南
  • 流程图用什么工具做?免费/付费工具对比,附在线制作与下载教程
  • IT运维管理与服务优化
  • javaweb XML DOM4J
  • 用C#生成带特定字节的数据序列(地址从0x0001A000到0x0001C000,步长0x20)
  • 解析预训练:BERT到Qwen的技术演进与应用实践
  • PCB 温度可靠性验证:从行业标准到实测数据
  • 机器人要增加力矩要有那些条件和增加什么
  • MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
  • 6U VPX 板卡设计原理图:616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡
  • 【芯片设计-信号完整性 SI 学习 1.2.2 -- 时序裕量(Margin)】
  • Elasticsearch核心概念与Java实战:从入门到精通
  • Flink 内部状态管理:PriorityQueueSet解析
  • ChatBot、Copilot、Agent啥区别