大多数博客都介绍了gtp quad有四个channel和一个gt common资源,gt common中包含两个CPLL或者说就是pll0和pll1,gt common有两个专用的gt refclk输入管脚,可以在gt common原语上配置pll0和pll1的输入源。

理论上,a7 35t有4个gtp channel,可以跑在2种线速率上,因为pll0和pll1可以分别配置。但我在应用一个pcie ip和aurora ip时,会出现了gt refclk无法route的错误。经过一番折腾,找到了解决办法。

1. 首先我很早就知道了gt common只有一个,因此例化ip时要选择gt common在example design中。在top顶层单独例化gt common。ref0输入经pll0输出给pcie的pll0。ref1输入经pll1输出给aurora的pll0。

2.问题在于aurora和pcie ip在例化时都不能选择gtpe2 channel上的txsysclk和rxsysclk的来源,固定就是pll0。这一点可以看源码,追溯到gtpe2 channel原语上,看到TXSYSCLKSEL为2'b00,就表示用的pll0,当然2bit选择不同位置,具体看手册就明白了。也就是说gt common的pll0和pll1不能分别到gtpe2 channel的pll0(粗略看了几个相关手册,猜测的)。 那么我就改变一下思路,先设置ip和global模式,再把它的is manage属性去掉,手动修改aurora ip核的gtp原语上的TXSYSCLKSEL和RXSYSCLKSEL为2'b11,选择pll1输入,然后将gt common的pll1输出到aurora ip核上的pll1,把aurora ip核上的pll0固定接0。

就可以正常编译了。

如果有人因为看到我这个博客而解决了类似的问题,我将感到不胜荣幸。

 

04-13 04:30