指定相对位置
使用RLOC特性可以为设计对象指定相对位置。RLOC属性指定RPM集中每个单元的相对X-Y坐标。要指定RLOC特性,请使用两个不同的轴网坐标系中的任意一个:
?基于相对切片的坐标
?基于绝对RPM网格的坐标使用以下语法:
RLOC=XmYn
?m是一个整数,表示对象的相对或绝对X坐标。
?n是一个整数,表示对象的相对或绝对Y坐标。
基于相对切片的坐标相对网格系统:
?也称为标准网格。
?对于大多数RPM而言已足够。
?用于均质RPM,其中RPM中的所有细胞都属于相同的位点类型(例如作为片、块RAM和DSP)。
注意:对象相对于同一RPM集中的其他对象进行定位。
相对格线是标准矩形格线,其中每个格线元素的大小相同。对于例如,下面的Verilog代码示例导致具有FD单元的八片高位列在每个切片中:
(* RLOC = "X0Y0" *) FD sr0 (.C(clk), .D(d[0]), .Q(y[0]));
(* RLOC = "X0Y1" *) FD sr1 (.C(clk), .D(d[1]), .Q(y[1]));
(* RLOC = "X0Y2" *) FD sr2 (.C(clk), .D(d[2]), .Q(y[2]));
(* RLOC = "X0Y3" *) FD sr3 (.C(clk), .D(d[3]), .Q(y[3]));
(* RLOC = "X0Y4" *) FD sr4 (.C(clk), .D(d[4]), .Q(y[4]));
(* RLOC = "X0Y5" *) FD sr5 (.C(clk), .D(d[5]), .Q(y[5]));
(* RLOC = "X0Y6" *) FD sr6 (.C(clk), .D(d[6]), .Q(y[6]));
(* RLOC = "X0Y7" *) FD sr7 (.C(clk), .D(d[7]), .Q(y[7]));
BEL/LOC约束
对于复杂结构,除了RLOC。BEL约束必须用于将RPM集中的单元格对齐,例如将LUT与寄存器对齐。LOC约束不常见,通常不使用因为RPM设置是在设备中的特定位置上强制的并且不能被放置器移动。每当需要指定某些BEL或LOC约束时,重要的是不要混合这些约束的来源。BEL/LOC约束应通过RTL或通过XDC,但不是两者的组合。以下是BEL约束的示例在RTL中指定。
Verilog文件:
(*BEL="H6LUT",RLOC="X0Y0"*) LUT6 S0_LUTH (...);
(*BEL="G6LUT",RLOC="X0Y0"*) LUT6 S0_LUTG (...);
(*BEL="F6LUT",RLOC="X0Y0"*) LUT4 S0_LUTF (...);
(*BEL="E5LUT",RLOC="X0Y0"*) LUT4 S0_LUTE (...);
(*BEL="D6LUT",RLOC="X0Y0"*) LUT6 S0_LUTD (...);
(*BEL="C6LUT",RLOC="X0Y0"*) LUT6 S0_LUTC (...);
(*BEL="B6LUT",RLOC="X0Y0"*) LUT4 S0_LUTB (...);
(*BEL="A5LUT",RLOC="X0Y0"*) LUT4 S0_LUTA (...);
(*BEL="CARRY8",RLOC="X0Y0"*) CARRY8#(.CARRY_TYPE("DUAL_CY4"))
S0_CARRY8(...);
(*BEL="HFF2",RLOC="X0Y0"*) FD FD_out5 (...);
(*BEL="GFF2",RLOC="X0Y0"*) FD FD_out4 (...);
(*BEL="FFF2",RLOC="X0Y0"*) FD FD_out3 (...);
(*BEL="DFF2",RLOC="X0Y0"*) FD FD_out2 (...);
(*BEL="CFF2",RLOC="X0Y0"*) FD FD_out1 (...);
(*BEL="BFF2",RLOC="X0Y0"*) FD FD_out0 (...);
注意:为了简化,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源文件中的属性。
?放置之前重新合成网表。