Vivado约束 – 了解层次结构分隔符“/”如何在XDC和UCF中使用通配符*-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Vivado约束 – 了解层次结构分隔符“/”如何在XDC和UCF中使用通配符*

描述

在ISE中,我可以在UCF中使用以下命令  在设计中查询寄存器“a_inst / b_inst / c_inst / data_out_reg_r”:

INST“* / data_out_reg_r”TNM =“group1”;

但是,当我使用相同的模式在Vivado中查询相同的寄存器(保留设计层次结构)时,我得到以下内容:

%get_cells * / data_out_reg_r
警告:[Vivado 12-180]没有单元格匹配’* / data_out_reg_r’。
%get_cells -hier * / data_out_reg_r
警告:[Vivado 12-180]没有单元格匹配’* / data_out_reg_r’。

通过查询其全名,可以在设计中找到该寄存器:

%get_cells a_inst / b_inst / c_inst / data_out_reg_r
a_inst / b_inst / c_inst / data_out_reg_r

Vivado中的“get_cells”命令有什么问题?

对象名称中的层次结构分隔符“/”在XDC和UCF中的工作方式不同。

在Vivado中,通配符*不会跨层次结构解析。
在Vivado中查询对象时,对象层次结构名称中表示保留层次结构边界(1)的“/”字符不能替换为通配符*。

在UCF中,对象层次结构名称中的层次结构分隔符“/”只是名称的一部分,可以用通配符*替换。
这就像Vivado中的场景一样,其中所有层次结构都是扁平化的,并且所有设计对象都处于同一级别。

在上面的示例中,“get_cells * / data_out_reg_r”在顶级下的第一级子模块中搜索名为“ data_out_reg_r” (2)的单元格。

“get_cells -hier * / data_out_reg_r”在所有级别的层次结构中搜索名为“* / data_out_reg_r”的单元格。

所以这两个命令不会返回任何对象。

要返回正确的对象,应使用以下命令之一。

get_cells * / * / * / data_out_reg_r
get_cells -hier data_out_reg_r
get_cells -hier -filter {NAME =〜* / data_out_reg_r}
get_cells -hier -regexp。* data_out_reg_r
要在UCF中以类似的方式搜索对象,可以使用对象的NAME属性。

get_cells -hier -filter {NAME =〜* / data_out_reg_r}

NAME属性中的层次结构分隔符“/”是普通字符,就像在UCF中一样。
有一点需要注意的是,Vivado中的引脚分层名称中的“/”意味着两个不同的东西。

例如,对于引脚“a_inst / b_inst / c_inst / data_out_reg_r / Q”,最后一个“/”是引脚名称“data_out_reg_r / Q”的一部分。

另一个“/”是层次结构分隔符。

虽然最后一个“/”不是层次结构分隔符,但它仍然不能被通配符*替换。

因此,可以通过以下命令返回此引脚:
get_pins * / * / * / data_out_reg_r / Q.
get_pins -hier data_out_reg_r / Q.
get_pins -hier data_out_reg_r / *
get_pins -hier * / Q.
以下命令不捕获“a_inst / b_inst / c_inst / data_out_reg_r / Q”:

%get_pins * Q.
警告:[Vivado 12-508]没有引脚匹配’* Q’。
%get_pins a_inst / b_inst / c_inst / data_out_reg_r *
警告:[Vivado 12-508]没有引脚匹配’a_inst / b_inst / c_inst / data_out_reg_r *’。
%get_pins -hier Q.
警告:[Vivado 12-508]没有引脚匹配’Q’。
%get_pins a_inst / b_inst / c_inst / *
—此命令返回c_inst边界上的分层引脚(例如a_inst / b_inst / c_inst / I1),但不返回此层次结构中的任何引脚。
笔记:
(1)可以通过以下方法保留层次结构边界:
一个。 -flatten_hierarchy = none或重建
湾模块/实体级别的“keep_hierarchy = true”
C。模块/实体级别的“dont_touch = true”

(2)对象的名称和层次名称:“data_out_reg_r”是对象的名称,“a_inst / b_inst / c_inst / data_out_reg_r”是对象的层次名称。
但是,当设计层次结构变平时,对象的名称将变为“a_inst / b_inst / c_inst / data_out_reg_r”,因为所有对象都处于同一级别。
请登录后发表评论

    没有回复内容