ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

主时钟与虚拟时钟约束

主时钟与虚拟时钟约束 1.主时钟约束1.1 核心定义主时钟代表进入 FPGA 芯片的原始时钟源一般来自外部晶振输入 FPGA 顶层端口外部时钟发生器输出到 FPGA 引脚⚠️ MMCM/PLL 输出的时钟不属于主时钟属于派生时钟 generated_clock用create_generated_clock。主时钟实体时钟、Primary Clock真实物理时钟源时钟源绑定 FPGA 端口 / 内部引脚用来驱动 FPGA 内部寄存器逻辑、时钟树综合 CTS、内部 reg‑to‑reg 时序分析。命令create_clock带上端口 / 引脚对象时钟会传播进时钟网络工具计算时钟树延迟、抖动、skew可以生成派生时钟create_generated_clockMMCM/PLL 输出不能用来精准建模外部芯片独立时钟的 IO 延迟1.2完整语法create_clock ‑name 时钟名称 ‑period 周期ns [-waveform {rise_time fall_time}] [-add] [get_ports / get_pins / get_nets 物理对象]参数详解period时钟周期定义频率waveform设置初始相位、占空比不写默认{0 T/2}50% 占空比add同一个端口创建多个时钟差分时钟、多模式时钟标准主时钟#100MHz端口clk默认50%占空比0ns上升沿 create_clock -name clk_100m -period 10 [get_ports clk] # 100MHz上升沿2ns下降沿7ns占空比50%相位偏移2ns create_clock -name clk_phase -period 10 -waveform {2 7} [get_ports clk]主时钟配套约束# 1.源延迟时钟从板上晶振到达FPGA引脚的PCB延时 set_clock_latency -source 1.2 [get_clocks clk_100m] # 2.时钟抖动 set_clock_jitter 0.3 [get_clocks clk_100m] # 3.时钟不确定性时序余量 set_clock_uncertainty 0.5 [get_clocks clk_100m]1.3时钟特性约束在FPGA中时钟信号通常由芯片外部的晶振产生通过时钟引脚输入芯片内部。随后时钟信号经过芯片内部的一系列处理如PLL、自定义的分频/倍频逻辑等来生成所需的时钟频率信号。实际的时钟的七个关键特性①时钟周期clock period两个相邻时钟上升沿的时间间隔单位 ns。通常表示为一个完整的时钟周期。决定最高工作频率、建立时间余量基础。频率是周期的倒数公式为频率1/T_period。②时钟占空比clock duty cycle高电平持续时间与时钟周期之比表示时钟信号在一个周期内高电平持续时间的占空比。默认工具 50%非 50% 时钟用-waveform指定create_clock -name clk -period 10 -waveform {2 7} [get_ports clk]③时钟相位clock phase时钟沿相对于时间零点 (0 ns) 的偏移量影响时钟边沿的相对时间位置。waveform 本质就是设置时钟初始相位常用于多时钟、同源相位偏移接口④时钟转换时间clock transition time时钟信号从低电平转换为高电平或从高电平转换为低电平所需的时间。⑤时钟延时clock latency时钟信号从生成到到达目标位置所花费的时间分为源延迟 Source‑Latency、网络延迟 Network‑Latency源延迟 source latency时钟从时钟源外部晶振 / PLL到达 FPGA 芯片引脚的延时PCB 走线延迟。网络延迟 network latency时钟进入 FPGA 后从端口走到寄存器时钟引脚的延时时钟树延迟⑥时钟偏斜clock skew同一个时钟信号到达不同寄存器时钟端的时间差通常由时钟路径不同引起。全局 skew芯片上最远两个寄存器时钟到达时间差分为有用偏斜、有害偏斜CTS 时钟树综合目标减小时钟 skewJitter同一个寄存器时钟沿每次飘多少随时间波动Skew同一时刻不同寄存器之间时钟到达时间差空间差⑦时钟抖动clock jitter时钟边沿的短期不稳定性导致时钟边沿的实际到达时间与预期时间存在偏差。时钟沿偏离理想位置的不确定性偏差是时序余量杀手。周期抖动 (Period Jitter)单周期和理想周期的偏差长期抖动 (Long‑term Jitter)多个周期累积偏差输入抖动 (Input Jitter)晶振带来外部引入 FPGA系统抖动 (System Jitter)PLL/MMCM 产生的抖动2虚拟时钟约束2.1 核心定义虚拟时钟Virtual Clock仅时序参考标尺无物理载体不绑定任何端口、引脚、网线不会驱动 FPGA 内部任何触发器唯一用途作为 set_input_delay /set_output_delay 的参考时钟做 FPGA 与外部芯片之间接口时序检查。虚拟时钟是一个数学上理想的时钟波形在硬件电路中没有对应的走线、引脚、端口。 FPGA 芯片不会收到这个时钟信号工具不会对它做时钟树布线时钟不会传播到任何寄存器。命令create_clock不带端口 / 引脚对象只写‑name不会经过时钟树综合无内部时钟延迟只用于 IO 边界时序检查绝对不能当做内部寄存器驱动时钟2.2 完整语法create_clock ‑name 虚拟时钟名字 ‑period 周期 [-waveform {rise fall}] #后面【绝对不能】加 get_ports / get_pins示例#外部ADC芯片时钟时钟信号没有接入FPGA引脚 create_clock -name vclk_adc -period 202.2 什么时候必须用虚拟时钟场景 1外部器件时钟没有接到 FPGA 的任何引脚外部 ADC、DAC、传感器在板上自己产生时钟该时钟并没有连到 FPGA 引脚FPGA 只能收到数据信号收不到对方时钟。 此时 IO 延迟的参考时钟只能创建虚拟时钟否则工具没有时钟基准做建立 / 保持检查。#外部芯片50MHz时钟未输入FPGA create_clock -name vclk_ext -period 20 set_input_delay -max 8 -clock vclk_ext [get_ports data_in] set_input_delay -min 2 -clock vclk_ext [get_ports data_in]场景 2外部发送时钟 和 FPGA 接收时钟同源但存在额外 PCB 偏移同频异相晶振输出一路给到外部芯片另一路给到 FPGA 引脚两条 PCB 走线长度不一样时钟到达两边时间不一样。 如果直接拿 FPGA 主时钟做 input_delay 参考工具会忽略外部 PCB 时钟延迟时序分析错误。解决方案创建 FPGA 引脚主时钟供内部逻辑使用创建虚拟时钟代表外部芯片收到的时钟给虚拟时钟加上‑source延迟模拟 PCB 差值# FPGA收到的真实时钟 create_clock -name clk_fpga -period 10 [get_ports clk] #虚拟时钟代表外部芯片侧时钟 create_clock -name vclk_ext -period 10 #外部时钟比FPGA时钟晚1.5ns到达 set_clock_latency -source 1.5 [get_clocks vclk_ext] #IO延迟约束使用虚拟时钟 set_input_delay -max 5 -clock vclk_ext [get_ports data_in]场景 3FPGA 输出数据下游芯片采样时钟独立无随路时钟FPGA 发送数据下游芯片用自己的时钟采样下游时钟并没有来自 FPGA。set_output_delay必须以虚拟时钟作为参考。create_clock -name vclk_dac -period 10 set_output_delay -max 4 -clock vclk_dac [get_ports dac_data]如果直接用 FPGA 内部 MMCM 生成时钟去做 input_delay 参考此时工具会自动叠加上 FPGA 内部时钟树延迟造成 IO 时序结果悲观失准。场景 4多异步接口外部时钟频率与 FPGA 时钟频率相同相位未知为了保守、安全地检查 IO 时序单独建虚拟时钟当做异步时钟域处理。3.区别create_clock命令既可以创建主时钟真实时钟也可以创建虚拟时钟唯一区分标志命令后面有没有绑定物理对象端口 / 引脚# 主时钟绑定FPGA顶层端口clk有物理源头 create_clock -name clk_100M -period 10 [get_ports clk] # 虚拟时钟无任何物理节点‑name之后不带任何端口/引脚/net create_clock -name vclk_ext -period 10核心本质区别主时钟真实时钟源工具会生成时钟树、传播时钟、驱动寄存器参与片内 Reg‑to‑Reg 时序检查。虚拟时钟纯时序标尺硬件不存在该时钟信号不会在 FPGA 内部传播不会驱动任何触发器不做时钟树综合 CTS唯一使命作为set_input_delay/set_output_delay的参考时钟检查 FPGA 和外部芯片之间的 IO 时序。对比主时钟Primary Clock虚拟时钟Virtual Clock创建时是否绑定物理引脚 / 端口✅ 必须绑定❌ 禁止绑定任何物理对象硬件是否真实存在FPGA 引脚上真实存在仅时序模型硬件不存在时钟是否在 FPGA 内部传播✅ 可以传播到寄存器❌ 不会传播时钟树综合 CTS✅ 参与工具生成时钟树布线❌ 不参与无时钟树资源消耗能否驱动内部触发器✅ 是片内寄存器时钟源❌ 绝对不能驱动寄存器典型用途片内 reg‑to‑reg 时序分析、内部逻辑、PLL 输入IO 边界时序set_input_delay /set_output_delay 参考基准时钟延迟设置source latency network latency 均可设置仅推荐设置 source latency是否支持派生时钟 create_generated_clock✅ 支持❌ 不支持IO 时序风险直接用于 IO 会带入 FPGA 内部时钟树延迟时序分析出错无内部时钟树延迟IO 时序分析精准
返回列表