vivado 管理宏

管理宏

宏存储为XDC约束。根据定义,它们是Tcl命令。这允许要在XDC约束文件和Tcl脚本中使用并交互使用的宏。宏是使用write_xdc命令编写的。使用read_xdc读取宏命令-cell选项可用于将作用域限制为特定的单元格。-cell选项特别适用于将一个宏的相对放置应用到不同层次结构中的相似实例。

管理宏示例一

在内存中写入所有XDC约束,包括宏:
% write_xdc constrs.xdc
管理宏示例二

设计包含单元的三个实例:

inst_0、inst_1和inst_2。

在inst_0中创建了一个宏:
% create_macro m0
% update_macro m0 {reg0 X0Y0 reg1 X0Y1}
% write_xdc -cell inst_0 inst_0.xdc
管理宏示例三

为单元inst_0写入包括宏m0在内的所有XDC约束:
% write_xdc -cell inst_0.xdc inst_0.xdc
管理宏示例四

从单元inst_0读取XDC约束,包括宏m0,并将其应用于inst_1和inst_2:
% read_xdc inst_0.xdc -cell {inst_1 inst_2}
% get_macros
m0 inst_1_m0 inst_2_m0
宏属性

宏对象具有以下特性:

•绝对网格

•等级

•名称

•RLOCS

宏属性示例
% report_property [get_macros m1]
Property Type Read-only Visible Value
ABSOLUTE_GRID bool true true 0
CLASS string true true macro
NAME string true true m1
RLOCS string* true true u2/sr0 X0Y0 u2/sr1 X0Y1
以下是对属性的描述。

绝对网格

布尔属性,反映RLOC是否使用默认网格系统或绝对网格系统。默认值为false。如果update_macro与-absolute_grid一起使用,则该属性为true。绝对栅格使用与场地RPM_X和RPM_Y特性对齐的坐标,以允许从放置在不同场地类型的单元创建宏。

将对象标识为宏。

名称

宏对象的名称,create_macro使用的名称或宏名称当使用readxdc-cell时,以单元格层次结构为前缀。

RLOCS

包含宏单元格列表及其RLOC属性的字符串,格式与update_macro命令。

宏单元格具有以下附加属性:

•RLOC:单元格的相对位置属性(RLOC)值。

•MACRO_NAME:单元格所属宏的名称。

使用前面的宏特性示例:
% get_property RLOC [get_cells {u2/sr0 u2/sr1}] X0Y0 X0Y1
% get_property MACRO_NAME [get_cells {u2/sr0 u2 "X0Y0 X0Y1" is the output
of the get_property command
/sr1}]
m1 m1
通过opt_design保留XDC宏

opt_design可以自由地优化和删除属于XDC宏的LUT,尽管RLOC约束。为了防止opt_design优化XDC宏内部的逻辑在属于XDC的所有单元格上将属性DONT_TOUCH设置为TRUE所必需的宏。DONT_TOUCH属性可以通过RTL或XDC设置。

高级XDC宏示例

本节提供以下高级XDC宏示例:

•相对网格宏示例

•绝对网格宏示例

相对网格宏示例

默认情况下,相对栅格用于宏RLOC坐标,因为最常见的宏是由属于同一网站类型的单元格组成的。以下简单示例说明了从宏RLOC派生的相对位置。这个宏由一对SRL>FF>FF电路组成,这些电路将以2x2模式排列。请参阅如下图所示。

要创建所需的相对放置,按如下方式为单元分配RLOC:
srl[0] X0Y0
regs0[0] X0Y0
regs1[0] X1Y0
srl[1] X0Y1
regs0[1] X0Y1
regs1[1] X1Y1
以下命令使用名称m0创建此宏:
create_macro m0
update_macro m0 {srl[0] X0Y0 regs0[0] X0Y0 regs1[0] X1Y0 srl[1] X0Y1
regs0[1] X0Y1 regs1[1] X1Y1}
宏可以由放置器自动放置,也可以作为一个集合手动放置。宏位置显示如下图所示:

宏包含基于LUTRAM的SRL,并且只能放置在SLICEM中键入切片。这对宏的可能位置进行了轻微的限制。宏可以仅位于SLICEL列位于SLICEM列右侧的位置。附近过多密集的切片会导致拥塞,从而降低可路由性并且可能对性能产生负面影响。

绝对网格宏示例

将不同场地类型的单元组合到宏中时,必须使用绝对网格。绝对网格(也称为RPM网格)是一个绝对坐标系,定义基于站点在设备内的位置的站点坐标。绝对网格还考虑网站的大小。RAM和DSP块具有比切片更宽的间隔。绝对网格如图所示如下图所示:

在本例中,使用绝对网格。该示例包括从输入端口经过两个阶段的输入数据路径寄存器,然后块RAM。如下图中的示意图所示。

宏创建需要使用绝对值的单元格及其相对位置(RLOC)列表网格创建宏时,可能很难可视化绝对值的相对位置网格宏。

细胞首先被手动放置并排列在它们所需的位置,如下图:

尽管绝对栅格指定了绝对位置,但生成的宏可以放置在任何位置设备内可以容纳宏的相对放置的位置。在这个例如,使用左下角作为的点来指定相对位置参考但是,绝对栅格位置仅指定相对放置,而不是绝对放置。这允许宏位于设备中维护相对安置由于该示例有些复杂,由ILOGIC、切片和块RAM组成宏位置有一定的限制,但可以放置在三个位置中的任何一个下图中以橙色突出显示:

若要确定绝对栅格RLOC,请使用场地RPM_X和RPM_Y特性。例如下部块RAM被放置在位置RAMB36_X0Y0处。选择场地(而不是单元)会显示以下值:RPM_X为33,RPM_Y为0(图103)。这些是绝对网格坐标。相应的RLOC值为X33Y0。

同样的方法用于确定切片的绝对RLOC(图104)。细胞在该切片内具有X31Y0的RLOC。

有两个命令用于创建名为m0的宏:
create_macro m0
update_macro m0 -absolute_grid <cell0 rloc0 cell1 rloc1 cell2 rloc2 ... cellN
rlocN>
如果宏像本例中那样包含许多单元格,Tcl可以用于简单地构建和指定update_macro所需的单元格rloc列表。给定一个放置的单元格,绝对网格RLOC可以使用以下Tcl proc getAbsRLOC来确定:
proc getAbsRLOC {cell} {
set site [get_sites -of [get_cells $cell]]
set X [get_property RPM_X $site]
set Y [get_property RPM_Y site\] return "X{X}Y${Y}"
}
示例:将变量rloc分配给块RAM单元rloc的字符串值
% set rloc [getAbsRLOC $ram0]
X33Y0

Tcl-dict命令可用于构建单元格和绝对值的字典(关联数组)update_macro命令的网格RLOC。Tcl关联数组是一系列键值对。可以使用dict命令将单元和RLOC排列为串联。数组键是宏单元对象。数组值是单元RLOC。这有助于自动化创建具有多个单元格的宏的过程。以下示例使用绝对栅格,但是该方法同样适用于普通网格。假设cells是宏单元格的列表,并且cells的每个单元格都已被放置以形成所需的宏模式,下面的Tcl过程为update_macro命令。
proc buildRLOCList {cells} {
set rlocs [dict create] # initialize dictionary called rlocs
foreach cell $cells {

dictionary key is cell, value is absolute RLOC

dict set rlocs $cell [getAbsRLOC $cell]
}
return $rlocs
}
示例:为示例电路构建RLOC列表

create macro cell list: input register stage and BRAM cells

set cells [get_cells -hier [list ireg0* ireg1* *SIMPLE_PRIM36.ram]]
create_macro m0
update_macro m0 -absolute_grid [buildRLOCList cells\] 要查看buildRLOCList创建的字典列表,请执行以下操作: puts [buildRLOCList $cells]
{ireg0[6]} X2Y10 {ireg0[5]} X2Y11 {ireg0[4]} X2Y6 {ireg0[3]} X2Y7 . . .
如果层次结构中隐藏了许多宏单元和宏单元,则指定的显式列表单元RLOC对可能变得复杂并且容易出错。XDC的创建和管理使用Tcl可以简化宏

相关推荐
apple_ttt13 小时前
SystemVerilog学习——虚拟接口(Virtual Interface)
fpga开发·fpga·systemverilog·uvm
学习路上_write1 天前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
jjjxxxhhh1231 天前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发
诚实可靠小郎君95271 天前
FPGA高速设计之Aurora64B/66B的应用与不足的修正
fpga开发·aurora·高速通信
百锦再1 天前
基于Zynq FPGA对雷龙SD NAND的测试
fpga开发
∑狸猫不是猫2 天前
HDLBIts习题(4):边沿检测、分频计数器、多位BCD计数器
fpga开发
黑旋风大李逵2 天前
FPGA使用Verilog实现CAN通信
fpga开发·can通信·sja1000t·fpga实现can通信
hi942 天前
PYNQ 框架 - 中断(INTR)驱动
嵌入式硬件·fpga开发·zynq·pynq
transfer_ICer3 天前
Vscode搭建verilog开发环境
vscode·fpga开发·编辑器
沐欣工作室_lvyiyi3 天前
汽车牌照识别系统的设计与仿真(论文+源码)
人工智能·单片机·fpga开发·汽车·单片机毕业设计·matlab车牌识别