Vivado/TCL get_cells 动态正则表达式

Vivado/TCL get_cells with dynamic regexp

我已经写了一个小例子来说明我想做什么以及我收到什么输出。

set a 0
set tmp [get_cells -hier -regexp [ format .*latch\[%d\].* $a ] ]
puts [ llength $tmp ]

set tmp [get_cells -hier -regexp {.*latch\[0\].*}]
puts [ llength $tmp ]

输出:

WARNING: [Vivado 12-180] No cells matched '.*latch[0].*'. [C:/dev/jesd204b_clock_gen/logic/proj/xilinx/2017.4/Test1/Test1.srcs/sources_1/tdc/TDCConstraints.tcl:24]
0
16

如您所见,第一个 get_cells 调用 returns 一个警告和 0 个元素,即使它与第二个调用具有相同的正则表达式,后者成功
我做错了什么,我该如何解决这个问题?
非常感谢您的回答。

然而它们并不完全相同:

% format .*latch\[%d\].* $a
.*latch[0].*
% puts {.*latch\[0\].*}
.*latch\[0\].*

您必须在 format 中使用大括号,或者对字符串进行双重转义,即使用:

format {.*latch\[%d\].*} $a

或者

format .*latch\\[%d\\].* $a