XDC 约束语法解析:set_false_path

示例命令

1
2
set_false_path -to [get_pins -hierarchical -filter {NAME =~ */xil_reset_sync/u_sync_r*/PRE}]
  

命令结构总览

set_false_path -to [get_pins -hierarchical -filter {NAME =~ */xil_reset_sync/u_sync_r*/PRE}]
  
│              │   │         │             │       │                                       │
  
│              │   │         │             │       └───────────────────────────────────────┘
  
│              │   │         │             │                    filter 表达式
  
│              │   │         │             └── 参数: 过滤条件
  
│              │   │         └── 开关: 递归搜索
  
│              │   └── 内嵌命令: 获取 pin 对象
  
│              └── 参数: 指定路径终点
  
└── 主命令: 设置 false path
  

XDC 与 Tcl 的关系

层次说明
Tcl底层语言,提供语法框架(变量、命令、括号、通配符等)
XDC基于 Tcl 的约束文件格式,定义了一组特定命令

XDC 本质上就是 Tcl 脚本,只是里面调用的命令是 Vivado 定义的时序/物理约束命令。


语法元素分解

1. Tcl 基础语法

语法元素写法含义示例
命令替换[命令]先执行 [] 内的命令,返回值替换到外层[get_pins ...] 返回 pin 集合
花括号引用{字符串}字符串原样保留,不做变量/命令替换{NAME =~ ...}
双引号引用"字符串"允许变量替换 $var这里没用
空格分隔cmd arg1 arg2命令和参数用空格分隔整条命令

2. XDC/SDC 命令语法

主命令: set_false_path

参数格式含义是否必需
-from-from [对象]路径起点可选
-to-to [对象]路径终点可选
-through-through [对象]路径经过点可选
-rise_from/-fall_from指定边沿可选
-setup/-hold只豁免特定检查可选

注:-from-to-through 至少指定一个


内嵌命令: get_pins

参数格式含义
pin名get_pins a/b/c直接指定 pin 路径
-hierarchical开关(无值)递归搜索所有层级
-filter-filter {表达式}过滤条件
-of_objects-of_objects [cell]获取某个 cell 的 pin

3. Filter 表达式语法

语法写法含义
属性名NAME, DIRECTION, IS_CLOCKVivado 对象的属性
等于-精确匹配
模式匹配-支持通配符 * ?
不等于!=, !~否定匹配
逻辑与&&多条件同时满足
逻辑或||多条件任一满足

4. 通配符语法 (Tcl glob)

符号含义示例
*匹配任意长度任意字符*/xil_reset_sync/*
?匹配单个任意字符u_sync_r? 匹配 u_sync_r0
[abc]匹配括号内任一字符[012] 匹配 012
[a-z]匹配范围内字符

完整语法树

set_false_path                          ← XDC 命令
  
├── -to                                 ← XDC 参数
  
│   └── [ ... ]                         ← Tcl 命令替换
  
│       └── get_pins                    ← XDC 命令
  
│           ├── -hierarchical           ← XDC 开关
  
│           └── -filter                 ← XDC 参数
  
│               └── { ... }             ← Tcl 花括号引用
  
│                   └── NAME =~ */xil_reset_sync/u_sync_r*/PRE
  
│                       ├── NAME        ← Vivado 属性
  
│                       ├── =~          ← 模式匹配运算符
  
│                       └── */.../*     ← Tcl glob 通配符
  

执行流程

步骤动作结果
1Tcl 解析 [...]发现需要先执行 get_pins
2执行 get_pins -hierarchical获取设计中所有层级的 pin
3应用 -filter筛选出 NAME 匹配通配符的 pin
4返回 pin 集合替换到 -to 参数位置
5执行 set_false_path对这些 pin 的路径设置 false path

常用 get_* 命令对比

命令获取对象典型用途
get_pinsCell 的端口约束到特定 pin(如 PRE/CLR)
get_cells实例化的 cell设置属性、LOC 约束
get_nets网线约束布线、debug
get_ports顶层 IO 端口input_delay / output_delay
get_clocks时钟对象时钟分组、false path

调试技巧

在 Vivado Tcl Console 中单独运行查询命令,确认匹配结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 查看匹配到哪些 pin
  
get_pins -hierarchical -filter {NAME =~ */xil_reset_sync/u_sync_r*/PRE}
  

  
# 查看某个 pin 的所有属性
  
report_property [get_pins u_xxx/u_sync_r0/PRE]
  

  
# 列出可用的属性名
  
list_property [get_pins u_xxx/u_sync_r0/PRE]
  

应用场景总结

场景约束写法
豁免复位同步器set_false_path -to [get_pins -hier -filter {NAME =~ *reset_sync*/PRE}]
豁免 CDC 同步器set_false_path -to [get_pins -hier -filter {NAME =~ *cdc_sync*/D}]
豁免静态配置信号set_false_path -from [get_cells cfg_reg*]
异步时钟之间set_clock_groups -asynchronous -group clkA -group clkB