打印
[FPGA]

SP605调试SFP代码,在MAP时过到ERROR:Place:1111

[复制链接]
4786|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fencanyy|  楼主 | 2012-12-27 10:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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>位置有冲突,这个如何解决啊?



相关帖子

沙发
fencanyy|  楼主 | 2012-12-28 11:52 | 只看该作者
自己找到原因了,初学,心急,没细看《UG382 Spartan-6 FPGA Clocking Resources User Guide》,里面都讲的很详细关于各时钟的分配。
总结一下我这次问题的原因。


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_Src\Logic编译看到的对应关系如下:
        GTPA1_DUAL_X0Y0的GTPCLKOUT0[0]对应BUFIO2_X2Y28;
        GTPA1_DUAL_X1Y0的GTPCLKOUT0[0]对应BUFIO2_X4Y28;

    跟手册对不上啊,这是咋回事呢???

使用特权

评论回复
板凳
GoldSunMonkey| | 2012-12-28 22:37 | 只看该作者
把手册的表格和GTP的图片贴上来
我最近太懒了。不喜欢翻资料了。
他们之间的确有固定的约束关系

使用特权

评论回复
地板
GoldSunMonkey| | 2012-12-28 22:53 | 只看该作者
本帖最后由 GoldSunMonkey 于 2012-12-28 22:58 编辑


你耍我,上面的是100T/150T的例子。你自己是45T





使用特权

评论回复
5
fencanyy|  楼主 | 2012-12-29 12:42 | 只看该作者
我看那句了,我还以为都一样呢,,那45T的知道在哪个资料吗,翻了xilinx,我找来找去就只看到UG382
哈哈,还是谢谢猴哥,我再翻翻去

使用特权

评论回复
6
xjsxjtu| | 2012-12-29 23:14 | 只看该作者
仿佛没有,他只是举例子

使用特权

评论回复
7
GoldSunMonkey| | 2012-12-29 23:16 | 只看该作者
xjsxjtu 发表于 2012-12-29 23:14
仿佛没有,他只是举例子

我记得是这样的

使用特权

评论回复
8
GoldSunMonkey| | 2012-12-29 23:16 | 只看该作者
结帖吧

使用特权

评论回复
9
jackwei1987| | 2014-5-13 14:01 | 只看该作者
fencanyy 发表于 2012-12-28 11:52
自己找到原因了,初学,心急,没细看《UG382 Spartan-6 FPGA Clocking Resources User Guide》,里面都讲的 ...

前辈,这里算是sfp调通了吗?在下初学,来参考参考,谢谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

0

帖子

0

粉丝