时钟特性约束(四)

时钟特性约束


文章目录

  • 时钟特性约束
  • 前言
        • [1 提出背景:为什么"时钟"需要单独一节来讲约束?](#1 提出背景:为什么“时钟”需要单独一节来讲约束?)
        • [2 基本概念速览](#2 基本概念速览)
        • [3 约束语法与工程用法](#3 约束语法与工程用法)
          • [3.1 时钟不确定度------"买保险"](#3.1 时钟不确定度——“买保险”)
          • [3.2 时钟延迟------"把路程写清楚"](#3.2 时钟延迟——“把路程写清楚”)
        • [4 进阶扩展:四个常被忽略的细节](#4 进阶扩展:四个常被忽略的细节)
        • [5 小结:记住"3+1"原则](#5 小结:记住“3+1”原则)

前言


1 提出背景:为什么"时钟"需要单独一节来讲约束?
  1. 在同步数字电路里,只有时钟是"时间基准"。数据信号只要满足建立/保持时间即可,而时钟信号的任何畸变都会"放大"到整个芯片。
  2. 先进工艺(≤28 nm)+ 高频(≥500 MHz)+ 低电压(≤0.8 V)使得"ps 级误差"就能让硅片变成"硅砖"。
  3. 芯片失败成本指数级上升:一次 mask 费用几百万美元,流片失败比多写几行约束昂贵得多。
  4. 因此,**"把时钟的不确定性提前算清楚"**成为数字后端工程师的刚需,而不是可选项。

2 基本概念速览
名词 物理含义 量级(28 nm 典型) 备注
Jitter 时钟周期-周期边沿的随机漂移 30--80 ps RMS 源于 PLL、电源噪声、热噪声
Skew 同一时钟到达不同触发器的系统偏差 50--200 ps 源于 CTS、线长、负载差异
Latency 从时钟源端口到寄存器 CLK pin 的绝对延时 1--4 ns 分为 source + network
Uncertainty 人为追加的"保险丝"裕量 0--500 ps 用 set_clock_uncertainty 显式加

一句话:Jitter 是"自己抖",Skew 是"兄弟姐妹不齐",Latency 是"路上堵车",Uncertainty 是"再留条活路"。


3 约束语法与工程用法
3.1 时钟不确定度------"买保险"
tcl 复制代码
# 在 sys_clk 域内所有路径追加 500 ps 裕量
set_clock_uncertainty -from sys_clk -to sys_clk 0.5

# 跨时钟域再多留 1 ns
set_clock_uncertainty -from clk_a -to clk_b 1.0
  • 选项 -setup/-hold 可分别控制建立/保持侧裕量;缺省同时生效。
  • 为什么"过度优化"反而安全?
    -- 后期 ECO 阶段若发现某条路径因串扰或 IR-drop 突然违规,可直接提高 uncertainty 重新跑 STA,无需动时钟树结构,风险最小。
3.2 时钟延迟------"把路程写清楚"
tcl 复制代码
# 主时钟进入芯片管脚后的片外/片内延迟
set_clock_latency -max 1.0 -source [get_ports I_clk_p]
set_clock_latency -min 0.5 -source [get_ports I_clk_p]

# 寄存器时钟引脚的网络延迟(CTS 后)
set_clock_latency -max 3.0 -network [get_pins data_reg0_reg[0]/C]
set_clock_latency -min 2.0 -network [get_pins data_reg0_reg[0]/C]
  • -source 告诉工具"时钟进来前已经走了多久",常用于板级/封装延迟反标。
  • -network 在 CTS 前是"估计",CTS 后会被实际延迟取代;若仍显式写出,可作为"强制下限"防止工具过度优化。

4 进阶扩展:四个常被忽略的细节
  1. OCV/AOCV/POCV

    传统"flat uncertainty"一刀切太悲观;先进节点使用 On-Chip Variation 模型,按距离、电压、温度随机变量分配更真实裕量。

    tcl 复制代码
    set_timing_derate -early 0.9 -late 1.1 [get_clocks sys_clk]
  2. Clock Reconvergence Pessimism (CRPR)

    两条分支最终汇合到同一触发器,原本各自算最大/最小延迟会"重复计算"悲观值;工具需自动剪掉这部分悲观(或手动 set_analysis_config -enable_crpr)。

  3. Uncertainty ≠ Jitter + Skew

    工具默认把 jitter 算进 clock_uncertainty,但 skew 由 CTS 实际网络决定;不要简单把测量到的 jitter 和 skew 相加就填进去,否则双重计数。

  4. DFT 模式额外裕量

    扫描移位频率低,但 chain 上缓冲器多,串扰大;可单独加 uncertainty:

    tcl 复制代码
    set_clock_uncertainty -from clk_scan -to clk_scan 0.8

项目 ASIC/SoC FPGA
时钟源 片外 PLL + 自己设计 片内 ** hardened PLL/MMCM**,数据手册直接给 RMS jitter < 50 ps
时钟树 后端自己绕,skew 100 ps 算优秀 全域 Global Clock Network 是硅片级树+铜柱,skew 规格 50 ps 以内
不确定性 需要工程师逐条估算 器件厂商在 Timing Model 里打包好了 ,叫 "Component Uncertainty"
5 小结:记住"3+1"原则
步骤 目标 命令
定义 让工具认识时钟 create_clock
留裕 覆盖 jitter+额外悲观 set_clock_uncertainty
标延迟 反标板级/封装/网络 set_clock_latency
验因果 确认悲观/乐观源 报告 clock_timing + timing_derate

写约束的本质是**"把物理世界的不完美提前翻译成工具能懂的悲观值"**,而不是"让工具自己猜"。

时钟约束越早写、越写实,后端就越少熬夜, silicon 就越不容易变 "brick"。

相关推荐
江苏学蠡信息科技有限公司13 小时前
STM32中硬件I2C的时钟占空比
stm32·单片机·fpga开发
OliverH-yishuihan14 小时前
FPGA 入门 3 个月学习计划表
学习·fpga开发
FPGA狂飙17 小时前
传统FPGA开发流程的9大步骤是哪些?
fpga开发·verilog·fpga·vivado·xilinx
我爱C编程18 小时前
【硬件片内测试】基于FPGA的完整DQPSK链路测试,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·帧同步·viterbi译码·dqpsk·频偏锁定·定时点
szxinmai主板定制专家19 小时前
【NI测试方案】基于ARM+FPGA的整车仿真与电池标定
arm开发·人工智能·yolo·fpga开发
爱吃汽的小橘1 天前
基于ads1256的ADC控制实现
fpga开发
易享电子2 天前
基于单片机车窗环境监测控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
cycf2 天前
系统同步接口输入延迟(五)
fpga开发
cmc10282 天前
131.如何区分FPGA芯片型号是-2l还是-2方法
fpga开发