对于复杂结构,除了RLOC。BEL约束必须用于将RPM集中的单元格对齐,例如将LUT与寄存器对齐。LOC约束不常见,通常不使用因为RPM设置是在设备中的特定位置上强制的并且不能被放置器移动。每当需要指定某些BEL或LOC约束时,重要的是不要混合这些约束的来源。BEL/LOC约束应通过RTL或通过XDC,但不是两者的组合。以下是BEL约束的示例在RTL中指定。
注意:为了简化,INIT字符串已被省略。
在以下示例中,RPM在RTL处定义,但指定了BEL约束通过XDC。
Verilog file:
(*RLOC="X0Y0"*) LUT6 S0_LUTH (...);
(*RLOC="X0Y0"*) LUT6 S0_LUTG (...);
(*RLOC="X0Y0"*) LUT4 S0_LUTF (...);
(*RLOC="X0Y0"*) LUT4 S0_LUTE (...);
(*RLOC="X0Y0"*) LUT6 S0_LUTD (...);
(*RLOC="X0Y0"*) LUT6 S0_LUTC (...);
(*RLOC="X0Y0"*) LUT4 S0_LUTB (...);
(*RLOC="X0Y0"*) LUT4 S0_LUTA (...);
(*RLOC="X0Y0"*) CARRY8#(.CARRY_TYPE("DUAL_CY4")) S0_CARRY8(...);
(*RLOC="X0Y0"*) FD FD_out5 (...);
(*RLOC="X0Y0"*) FD FD_out4 (...);
(*RLOC="X0Y0"*) FD FD_out3 (...);
(*RLOC="X0Y0"*) FD FD_out2 (...);
(*RLOC="X0Y0"*) FD FD_out1 (...);
(*RLOC="X0Y0"*) FD FD_out0 (...);
Note
:
The INIT string has been omitted for simplification.
XDC file:
set_property BEL CARRY8 [get_cells S0_CARRY8]
set_property BEL HFF2 [get_cells FD_out5]
set_property BEL GFF2 [get_cells FD_out4]
set_property BEL FFF2 [get_cells FD_out3]
set_property BEL DFF2 [get_cells FD_out2]
set_property BEL CFF2 [get_cells FD_out1]
set_property BEL BFF2 [get_cells FD_out0]
set_property BEL A5LUT [get_cells S0_LUTA]
set_property BEL B6LUT [get_cells S0_LUTB]
set_property BEL C6LUT [get_cells S0_LUTC]
set_property BEL D6LUT [get_cells S0_LUTD]
set_property BEL E5LUT [get_cells S0_LUTE]
set_property BEL F6LUT [get_cells S0_LUTF]
set_property BEL G6LUT [get_cells S0_LUTG]
set_property BEL H6LUT [get_cells S0_LUTH]
基于绝对RPM栅格的坐标
RPM_GRID系统用于异构RPM,其中RPM中的单元属于不同的站点类型(例如切片、块RAM和DSP的组合)。这是绝对的映射到特定AMD设备的坐标系。由于细胞可以占据各种大小的位点,RPM_GRID系统使用绝对RPM_GRID坐标。RPM_GRID值在的“场地属性”窗口中可见选择特定站点时使用Vivado IDE。也可以使用Tcl查询坐标使用RPM_X和RPM_Y场地特性的命令。
RPM_GRID坐标VHDL示例
以下VHDL示例使用RPM_GRID坐标定义RLOC约束。
?相对于块RAM放置两个移位寄存器。
?四个阶段连接输入。
?四级连接输出。
attribute RLOC : string;
attribute RPM_GRID : string;
attribute RLOC of di_reg3 : label is "X25Y0";
attribute RLOC of di_reg2 : label is "X27Y0";
attribute RLOC of di_reg1: label is "X29Y0";
attribute RLOC of di_reg0 : label is "X31Y0";
attribute RLOC of ram0 : label is "X34Y0";
attribute RLOC of out_reg3 : label is "X37Y0";
attribute RLOC of out_reg2 : label is "X39Y0";
attribute RLOC of out_reg1 : label is "X41Y0";
attribute RLOC of out_reg0 : label is "X43Y0";
设置属性以调用RPM_GRID系统
要使用RPM_GRID系统,请在RPM集中的任何单元上设置一个特性:
attribute RPM_GRID of ram0 : label is "GRID";
只要至少有一个单元的RPM_GRID属性等于GRID,则RPM_GRID使用坐标系。尽管RPM_GRID坐标是基于目标设备的绝对坐标,但它们定义了RPM集合的元素的相对位置。在实施过程中,RPM组可以放置在设备上的任何合适位置。
RPM_GRID坐标值
RPM_GRID坐标值与上SLICE的坐标值有很大不同FPGA。这些坐标:
?存储为Vivado工具中设备站点上的RPM_X和RPM_Y属性。
?可以使用get_property进行查询。以下示例执行以下操作:
?从所选SLICE获取RPM坐标。
?使用联接以所需格式输出X和Y坐标。
join "X[get_property RPM_X [get_selected_objects]]Y[get_property RPM_Y
[get_selected_objects]]"
X25Y394
直接在RTL源文件中定义RLOC属性
由于标准栅格简单且相对,因此可以定义RPM的RLOC属性直接在RTL源文件中。
因为RPM_GRID坐标必须从目标设备中提取,所以您可能会需要:
?对设计进行迭代,以在合成后找到正确的RPM_GRID值。
?将坐标添加为RTL源文件中的属性。
?放置之前重新合成网表。