目录

1.Vivado中PLL/MMCM时钟约束方法

1.1 输入时钟约束

1.2 输出时钟约束

1.3 辅助约束

2.Vivado 中 PLL/MMCM约束的实现步骤


     在Vivado平台中,PLL(Phase-Locked Loop,锁相环)和MMCM(Mixed-Mode Clock Manager,混合模式时钟管理器)是实现时钟频率合成、相位调整、时钟同步的核心IP核。

1.Vivado中PLL/MMCM时钟约束方法

     Vivado通过XDC(Xilinx Design Constraints)约束文件实现时钟约束,核心命令包括create_clock(定义输入时钟)、create_generated_clock(定义PLL/MMCM 输出时钟),以及辅助约束(如set_input_jitterset_clock_uncertainty等)。

1.1 输入时钟约束

       PLL/MMCM的输入时钟(通常来自外部晶振、全局时钟输入引脚或其他模块的输出)需要用create_clock命令定义,这是PLL/MMCM正常工作的基础。其语法如下:

create_clock -name <时钟名称> -period <周期(ns)> [ -waveform {<上升沿时间> <下降沿时间>} ] <目标引脚/端口>

假设PLL的输入时钟来自FPGA的clk_in引脚,频率为50MHz(周期20ns),约束如下:

# 定义PLL的参考输入时钟(50MHz)
create_clock -name clk_ref -period 20 [get_ports clk_in]

1.2 输出时钟约束

       PLL/MMCM通过配置可生成多个不同频率、相位的输出时钟(如clk_out1clk_out2),这些时钟需用create_generated_clock命令定义,告知工具其与输入时钟的关系。其语法如下:

create_generated_clock -name <输出时钟名称> -source <输入时钟源> -multiply_by <倍频系数> -divide_by <分频系数> [ -phase <相位偏移(度)> ] <PLL/MMCM输出引脚>

假设PLL配置为:输入时钟clk_ref(50MHz),输出clk_out1为100MHz(倍频2,不分频)、相位0度;clk_out2为25MHz(分频2,不倍频)、相位90度,约束如下:

# 定义PLL输出时钟clk_out1(100MHz,0度相位)
create_generated_clock -name clk_100m -source [get_clocks clk_ref] \
                       -multiply_by 2 -divide_by 1 -phase 0 \
                       [get_pins pll_inst/clk_out1]

# 定义PLL输出时钟clk_out2(25MHz,90度相位)
create_generated_clock -name clk_25m -source [get_clocks clk_ref] \
                       -multiply_by 1 -divide_by 2 -phase 90 \
                       [get_pins pll_inst/clk_out2]

1.3 辅助约束

       输入抖动约束(set_input_jitter:外部输入时钟可能存在抖动(Jitter),需告知工具以优化时序分析。抖动值通常由时钟源datasheet 提供(如50ps)。

# 为PLL的输入时钟添加抖动约束(50ps)
set_input_jitter [get_clocks clk_ref] 0.05

       时钟不确定性约束(set_clock_uncertainty:考虑PLL/MMCM的输出时钟与输入时钟之间的相位偏差、环境变化(温度/电压)导致的不确定性,可通过该命令增加时序余量。

# 为PLL输出时钟添加不确定性(2ns)
set_clock_uncertainty 2 [get_clocks {clk_100m clk_25m}]

       时钟延迟约束(set_clock_latency):若需精确指定时钟从 PLL 输出到逻辑单元的延迟(如布线延迟),可使用此命令(通常由工具自动计算,无需手动设置,特殊场景下调整)。

2.Vivado 中 PLL/MMCM约束的实现步骤

例化PLL/MMCM IP

通过Vivado的IP Catalog搜索“PLL”或“MMCM”,根据需求配置输入时钟频率、输出时钟频率/相位/ 占空比,生成IP并实例化到设计中。

编写XDC约束文件

create_clock约束PLL/MMCM的输入时钟(参考时钟)。

create_generated_clock约束所有输出时钟(需与IP配置的倍频 / 分频系数、相位一致)。
按需添加set_input_jitter、set_clock_uncertainty等辅助约束。

验证约束有效性

在Vivado中执行“Report Clock Networks”,检查时钟是否被正确识别(频率、源、相位等参数是否匹配配置)。

执行 “Report Timing”,查看时序路径是否以约束的时钟为基准,是否存在时序违例(若违例,需调整约束或PLL参数)。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐