摘要:Aurora、Chip2chip、Ethernet共用一个gt时钟的正确的解决方案以及在实际实现以及在实现过程中遇到的其它的问题。
我在实际中遇到的困难如下:
现在需要将三个ip共用一对GT时钟,一个Ethernet IP,一个Ethernet IP(这个IP在block design中),一个aurora IP。现在还有一个以太网ip存在于blockdesign中,这个ip的gt和core在设置中并没有分离,并且我们暂时没有办法改动这部分。所以aurora需要gt时钟,在block design中的以太网同样需要gt时钟,现在只有一对gt时钟。在不改动block design里的Ethernet ip的情况下,有什么好的办法可以让三个IP共同使用一对gt时钟。
5. 正确的解决方法
同一个Quad里面,只能例化一个GT Common。
不同的Quad,例化一个I,BUFDS_GTE4,然后例化各自的GT Common。
这些都是硬连接,不能随意更改连接的。
按照图中的方法,其它的IP都可以连在经过了bufds的单端口上。那么需要如下改动:
在与xilinx FAE沟通中还提到了南北的概念:
但是我看部分改与不改,并未对我的工程有什么实际影响,所以并没有深究。
6. 功能验证
6.1 Aurora功能验证
这个比较简单,因为通过aurora ip生成的example design里面提供了generator module和check module,所以直接用这两个模块再加上ILA进行数据产生和验证即可。
6.2 Chip2chip功能验证
这个同理,可以用generator module和check module验证是否成功连接,再配上寄存器,看看寄存器能否通过chip2chip正常读写,即可验证功能是否正常。需要注意,slave先启动,再启动master,这样两端的chip2chip才能够link上。
6.3 Ethernet回环验证
这是两块板子的以太网回环测试,并且生成用于serdes的以太网ip将gt剥离了出来,所以之前的测试内外回环的方法在这里并不适用。需要更改gt_loopback_in去验证内外回环。
外回环我并没有按照图中的方法,而是直接修改了一端以太网的代码,另外一端不动,然后loopback设置成000,即可实现一端外回环的验证。修改的代码如下(需要改代码的这端需要注释掉xxx_ethernet_X_pkt_gen_mon):
有几个改几个,下面同理:
在测试内外回环的时候,发现了一个问题:总有零个或一个Lane的内外回环是好的,其它的都是错误的,从返回的status状态得出这样的结论
原因:
1. 没有create_clock gt,所以vivado不分析gt的时钟,一些路径的时序没有建立好,从而导致数据乱掉。
2. 约束红色路径必须一条一条点到点进行约束,如果约束的时钟到时钟,也会让一些路径时序不分析,从而导致数据乱掉。
如图所示:
总结
学无止尽