本帖最后由 fencanyy 于 2012-12-27 10:25 编辑
我的SFP测试代码修改自官方的sp605_BRD_rdf0033_13.3_c.zip,SP605_BRD/SP605_BRD_Src/Logic/
下载地址:
secure.xilinx.com/webreg/clickthrough.do?cid=176876&license=RefDesLicense&filename=sp605_BRD_rdf0033_13.3_c.zip
原来自带的代码中有对GTP收-发数据检验测试的,它测的是SMA接口,代码编译下装测试都OK的。
我修改了下代码准备测试SFP接口。
修改如下:
1、修改SP605_BRD.ucf文件
NET "RXN_IN" LOC = "C9";
NET "RXP_IN" LOC = "D9";
NET "TXN_OUT" LOC = "A8";
NET "TXP_OUT" LOC = "B8";
改成
NET "RXN_IN" LOC = "C13";
NET "RXP_IN" LOC = "D13";
NET "TXN_OUT" LOC = "A14";
NET "TXP_OUT" LOC = "B14";
INST gtp_lpbk/s6_gtpwizard_v1_3_i/tile0_s6_gtpwizard_v1_3_i/gtpa1_dual_i LOC=GTPA1_DUAL_X0Y0;
改成
INST gtp_lpbk/s6_gtpwizard_v1_3_i/tile0_s6_gtpwizard_v1_3_i/gtpa1_dual_i LOC=GTPA1_DUAL_X1Y0;
2、修改s6_gtpwizard_v1_3_top.v文件
.TILE0_RXN1_IN (RXN_IN),
.TILE0_RXP1_IN (RXP_IN),
.TILE0_TXN1_IN (TXN_IN),
.TILE0_TXP1_IN (TXP_IN),
改为
.TILE0_RXN0_IN (RXN_IN),
.TILE0_RXP0_IN (RXP_IN),
.TILE0_TXN0_IN (TXN_IN),
.TILE0_TXP0_IN (TXP_IN),
assign track_data_out_i = tile0_track_data1_i ;
改为
assign track_data_out_i = tile0_track_data0_i ;
然后Synthesize成功,Translate成功,在Map时出现如下错误:
ERROR:Place:1111 - Unroutable Placement! A BUFIO / BUFGMUX clock component pair
have been found that are not placed at a routable BUFIO / BUFGMUX site pair.
The BUFIO component <gtp_lpbk/gtpclkout0_0_bufg0_bufio2_i> is placed at site
<BUFIO2_X4Y28>. The BUFGMUX component <gtp_lpbk/gtpclkout0_0_bufg0_i> is
placed at site <BUFGMUX_X2Y9>. Each BUFGMUX site has a select set of BUFIOs
that can drive it. If these BUFIOs are not used, the connection is not
routable You may want to analyze why this problem exists and correct it. This
placement is UNROUTABLE in PAR and therefore, this error condition should be
fixed in your design. You may use the CLOCK_DEDICATED_ROUTE constraint in the
.ucf file to demote this message to a WARNING in order to generate an NCD
file. This NCD file can then be used in FPGA Editor to debug the problem. A
list of all the COMP.PINS used in this clock placement rule is listed below.
These examples can be used directly in the .ucf file to demote this ERROR to
a WARNING.
< PIN "gtp_lpbk/gtpclkout0_0_bufg0_bufio2_i.DIVCLK" CLOCK_DEDICATED_ROUTE =
FALSE; >
看意思好像是说<BUFIO2_X4Y28>与<BUFGMUX_X2Y9>位置有冲突,这个如何解决啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
总结一下我这次问题的原因。
1、 错误提示中可以看到GTPA1_DUAL_X1Y0的GTPCLKOUT0[0]只能连接专用的BUFIO2,即只能连到BUFIO2_X4Y28,依据手册BUFIO2_X4Y28的DVICLK输出只能连到BUFGMUX_X2Y4(因为使用的是BUFG原语,默认使用的是I0输入端)。
Map把<gtp_lpbk/gtpclkout0_0_bufg0_bufio2_i> 分配到 <BUFIO2_X4Y28>
把<gtp_lpbk/gtpclkout0_0_bufg0_i> 分配到 <BUFGMUX_X2Y9>
可以看到<gtp_lpbk/gtpclkout0_0_bufg0_i>走的不是时钟专用路由(不是使用<BUFGMUX_X2Y4>),看来是有另外的BUFG占用了<BUFGMUX_X2Y4>。
2、 在SP605_BRD.ucf添加< PIN "gtp_lpbk/gtpclkout0_0_bufg0_bufio2_i.DIVCLK" CLOCK_DEDICATED_ROUTE = FALSE; >语句,Map成功后。
运行FPGA Editor发现是<clocks/bufio_gmii_clk>占用了<BUFIO2_X3Y12>,<clock/bufg_gmii_rx_clk>占用了<BUFGMUX_X2Y4>。
对照UG382的Figure 1-3及Figure 1-9,<clocks/bufio_gmii_clk>的IOCLK要做为PHY_RXD的IO时钟,所以只能使用<BUFIO2_X3Y12>;GCLK7(即PHY_RXCLK)直接输入到BUFG,只能是使用<BUFGMUX_X2Y4>。
原因就出在这里了,(1)及(2)都只能用<BUFGMUX_X2Y4>,冲突了,一方只能换成不是专用时钟路由了。
解决方法:
还是看Figure 1-3,发现GCLK7还可以通过<BUFIO2_X4Y20>,再接到<BUFGMUX_X2Y1>,就可以连到全局时钟树上了。
在SP605_BRD_clocks.v中修改“GMII Receiver Clock Logic”如下:
- BUFIO2 bufio_gmii_rx_clk (
- .DIVCLK (),
- .I (CLK125_RX_int),
- .IOCLK (CLK125_RX_BUFIO),
- .SERDESSTROBE ()
- );
- BUFIO2 bufio_bufg_gmii_rx_clk (
- .DIVCLK (CLK125_RX_int1),
- .I (CLK125_RX_int),
- .SERDESSTROBE ()
- );
- // Route rx_clk through a BUFG onto global clock routing
- BUFG bufg_gmii_rx_clk (
- .I (CLK125_RX_int1),
- .O (CLK125_RX)
- );
复制代码编译成功,生成.bit文件,下装测试SFP口成功。
如果碰到时ERROR:Place:1108也可以参考查找解决处理。
希望能对有碰到类似问题的朋友们有点帮助:P
最后还是有点疑问:
Table 1-3中列出了各GTPCLKOUT对应的BUFIO2:
GTPA1_DUAL_X0Y0的GTPCLKOUT0[0]对应BUFIO2_X1Y0;
GTPA1_DUAL_X1Y0的GTPCLKOUT0[0]对应BUFIO2_X3Y0;
而我SP605_BRD_SrcLogic编译看到的对应关系如下:
GTPA1_DUAL_X0Y0的GTPCLKOUT0[0]对应BUFIO2_X2Y28;
GTPA1_DUAL_X1Y0的GTPCLKOUT0[0]对应BUFIO2_X4Y28;
跟手册对不上啊,这是咋回事呢???
我最近太懒了。不喜欢翻资料了。
他们之间的确有固定的约束关系
你耍我,上面的是100T/150T的例子。你自己是45T
我记得是这样的
一周热门 更多>