问题描述
随MIG 2.0提供的SL361电路板文件包含一个布局错误,其中“cntrl0_ddr_ck [1]”连接到N引脚,“cntrl0_ddr_ck_n [1]”连接到P引脚,如下所示:
NET“cntrl0_ddr_ck [1]”LOC =“E1”;
NET“cntrl0_ddr_ck_n [1]”LOC =“E2”;
这些时钟由OBUFDS驱动,其中O引脚应连接到FPGA的P引脚,OB引脚应连接到FPGA的N引脚。由于此布局错误,连接反转并导致设计在MAP期间失败,并显示以下错误消息:
“错误:包装:1107 – 无法将以下符号组合到单个DIFFM组件中:
PAD符号“cntrl0_ddr_ck [1]”(填充信号= cntrl0_ddr_ck [1])
BUFINV符号“main_00 / top0 / iobs0 / infrastructure_iobs0 / r1”(输出信号= cntrl0_ddr_ck [1])
以下每个约束都为DIFFM类型的组件指定了非法物理站点:
符号“cntrl0_ddr_ck [1]”(LOC = E1 [物理站点类型= DIFFS])
组件类型由逻辑类型及其包含的逻辑的属性和配置决定。请仔细检查逻辑元件的类型及其所有相关属性和配置选项是否与约束的物理站点类型兼容。请相应地更正约束。
错误:打包:1107 – 无法将以下符号组合到单个DIFFS组件中:
PAD符号“cntrl0_ddr_ck_n [1]”(填充信号= cntrl0_ddr_ck_n [1])
BUFINV符号“main_00 / top0 / iobs0 / infrastructure_iobs0 / r1 / N”(输出信号= cntrl0_ddr_ck_n [1])
以下每个约束都为DIFFS类型的组件指定了非法物理站点:
符号“cntrl0_ddr_ck_n [1]”(LOC = E2 [物理站点类型= DIFFM])
组件类型由逻辑类型及其包含的逻辑的属性和配置决定。请仔细检查逻辑元件的类型及其所有相关属性和配置选项是否与约束的物理站点类型兼容。请相应地更正约束。“
解决/修复方法
要解决此问题,请对“infrastructure_iobs_0.vhd”文件进行以下更改:
- 交换r1 OBUFDS实例的O和OB输出,以匹配FPGA的P(E2)和N(E1)引脚。 O输出产生ddr_ck_n(1)信号,OB输出产生信号ddr_ck(1)信号。
- 将180度相移时钟连接到r1的输入I引脚。
- 通过将clk0和clk180信号反转为C1和C0输入,从实例“U1:FDDRRSE”生成180度相移时钟ddr1_clk_q(1)。
以下是代码:
库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_unsigned.all;
使用work.comp64_parameters_0.all;
库UNISIM;
使用UNISIM.VCOMPONENTS.all;
实体comp64_infrastructure_iobs_0是
港口(
ddr_ck:out std_logic_vector((CLK_WIDTH-1)downto 0);
ddr_ck_n:out std_logic_vector((CLK_WIDTH-1)downto 0);
clk0:在std_logic中
);
end comp64_infrastructure_iobs_0;
comp64_infrastructure_iobs_0的架构弧是
signal vcc:std_logic;
信号gnd:std_logic;
信号clk180:std_logic;
signal ddr1_clk_q:std_logic_vector((CLK_WIDTH-1)downto 0);
开始
gnd <=’0′;
vcc <=’1′;
clk180 <= not clk0;
— *******************************
—-这包括输出DDR触发器的实例化
—-对于ddr clk和dimm clk来说
—-输出ddr clk和dimm clk的缓冲区
—- ********************************************** *************
– 原始代码
– gen_clk:for i in 0 to CLK_WIDTH-1 generate
– U0:FDDRRSE
– 港口映射(
– Q => ddr1_clk_q(i),
– C0 => clk0,
– C1 => clk180,
– CE => vcc,
– D0 => vcc,
– D1 => gnd,
– R => gnd,
– S => gnd
– );
– 结束生成gen_clk;
– 修改过的代码
U0:FDDRRSE
港口映射(
Q => ddr1_clk_q(0), – clk0
C0 => clk0,
C1 => clk180,
CE => vcc,
D0 => vcc,
D1 => gnd,
R => gnd,
S => gnd
);
U1:FDDRRSE
港口映射(
Q => ddr1_clk_q(1), – clk 180
C0 => clk180,// clk180和clk0互换以产生180度相移时钟。
C1 => clk0,
CE => vcc,
D0 => vcc,
D1 => gnd,
R => gnd,
S => gnd
);
U2:FDDRRSE
港口映射(
Q => ddr1_clk_q(2), – clk 0
C0 => clk0,
C1 => clk180,
CE => vcc,
D0 => vcc,
D1 => gnd,
R => gnd,
S => gnd
);
U3:FDDRRSE
港口映射(
Q => ddr1_clk_q(3), – clk 0
C0 => clk0,
C1 => clk180,
CE => vcc,
D0 => vcc,
D1 => gnd,
R => gnd,
S => gnd
);
r0:OBUFDS
港口映射(
I => ddr1_clk_q(0),
O => ddr_ck(0),
OB => ddr_ck_n(0)
);
r1:OBUFDS
港口映射(
I => ddr1_clk_q(1),
O => ddr_ck_n(1),//互换O和OB输出
OB => ddr_ck(1)
);
r2:OBUFDS
港口映射(
I => ddr1_clk_q(2),
O => ddr_ck(2),
OB => ddr_ck_n(2)
);
r3:OBUFDS
港口映射(
I => ddr1_clk_q(3),
O => ddr_ck(3),
OB => ddr_ck_n(3)
);
端弧;
此问题已在MIG 2.1中得到解决。
没有回复内容