Aurora 64B66B IP核的硬件跑通
最近在尝试调用Aurora IP核使用ZCU106开发板上的gth接口资源,期间查阅了一些相关资料介绍,大多止步于介绍官方给的IP example仿真,关于硬件实际测试和多Aurora核的协调使用未能言明,现记录如下。
关于Aurora及gth接口的介绍可参考博客Aurora IP核理论,关于IP example的仿真可参考博客Aurora IP核例子简析与仿真(framing版)。博主写的非常详尽,对我自己做设计起了很大帮助。
Aurora 64B66B IP example 开发板运行
关于如何导入Xilinx的官方例程不做赘述,例化的整个例程可简化为下图:
模块信号定义表如下:
该模块可细分为下图:
可见 Aurora 模块通过AXI接口和其它模块实现数据交互,Frame_gen模块与Aurora TX接口相连接,Frame_check连结至RX接口,分别完成数据发送和接收工作,同时可通过外部的 tx/rx 高速接口与其它Aurora模块进行高速数据交互,该例程中为GTH。
官方testbench中,调用了俩次该设计,并将两个Aurora核的TX/RX互联形成回环操作:
下面主要说明对该例程的约束文件的修改操作。
约束文件可分为对输入时钟的约束及对信号管脚的约束两部分,其中输入时钟约束在官方提供的约束文件中已有,如下图:
注意约束周期根据自己的设计进行修改,我的init_clk为方便寻找时钟资源选用的是125M时钟,对应周期修改为8ns。
refclk选用默认156.25MHz时钟,在对应的开发板手册中查找资源,已ZCU106开发板为例:
step 1:从开发板上资源中找到156.25M时钟位置
step 2:查找该资源对应的芯片管脚,图中U10,U9
也可通过开发板的原理图进行查询:
定位到的管脚及是约束文件中的Reference clock location。
管脚约束官方约束文件只给了样例,需根据自己采用的开发板进行引脚位置更改,主要有两种方法:
1. 直接编辑xdc文件
这种方法最简单直接,直接查找手册中自己需要的管脚,然后手动代码约束位置及电平,当然比较耗费时间,同时需要参考所使用开发板的全引脚xdc文件确保约束正确。
2. 从Schematic中进行约束
重点介绍第二种方法
- 打开 synthesized 设计,点击 schematic 查看综合后的网表图
- 窗口中选择 I/O ports,即可在下方窗口看到每个port并选择约束位置及电平
- 对于硬件验证,单板只能进行单核自身回环,所以在约束 TX/RX ports时,将两者约束至开发板SMA接口,ZCU106开发板共提供五组GTH quads
其中Bank225提供一组差分GTH资源 - 收发接口约束至对应管脚,同时为init_clk找到对应时钟资源后,右键导出 I/O 约束
- 生成的约束文件添加进工程即可,之后重新综合布线,生成比特流文件。
(其余复位及状态显示port可根据个人需要约束至开关或LED资源)
用SMA线缆将Aurora TX与RX端对接,烧写比特流文件至开发板,通过观察channel UP, lane UP ,err LED 是否点亮判断Aurora工作状态。当然也可以在逻辑中添加 ila 模块方便进行硬件debug,具体操作在综合时点击set up debug即可。需要注意ila核时钟域的选择,与debug信号同时钟域同时必须是free running clock,即上电就跑的时钟。
外部SMA接线:
Aurora工作状态监控:(LED资源依次约束为err六位及lane up,channel up)
ila debug抓取无error:
硬件跑通完成,多Aurora核的使用时涉及主从核的问题,下一篇再说吧。
Fin