当前位置: 代码迷 >> 综合 >> vivado block design下使用aurora ip core
  详细解决方案

vivado block design下使用aurora ip core

热度:5   发布时间:2023-12-12 13:19:15.0

在使用vivado的官方aurora IP时,调用ip example参考可对自身设计提供一定帮助,但毕竟大部分设计是在block design下连线完成的,aurora的官方回环自测demo提供的帮助并不是特别直观,网上看来看去也没有比较直接的教程(求求了别再分析ip example了,都写烂了)。正好最近工程中涉及aurora的配置使用,现测试完成后记录一下过程,方便各位参考。

1. aurora ip的基本情况介绍
关于aurora的一些基本资源的介绍,包括主从核的一些基本概念可以参考多aurora ip核设计开发,不做赘述

2. aurora发送中的数据接口
相信各位大部分调用这个ip都是为了解决高速数据传输的问题,相较于uart传输,gth接口进收发要快的多,满足大量数据传输(例:跨开发板读写DDR数据)的设计需求。
在这里插入图片描述以个人的一个跨开发板读写DDR数据为例,数据通过一个AXI FULL接口从PS侧读出至PL侧,经过分包操作转换为axi stream接口形式,再通过aurora模块的gt接口发出。数据流走向:AXI FULL ——》axi stream ——》GTH。

3. block design下的aurora设计
了解了数据流后,正片开始
在这里插入图片描述在使用aurora core时,确保至少有一个IP核为主核,为所有aurora提供工作的user_clk时钟域。

在一般情况下,aurora所在的时钟域与系统时钟域是不同的(当然如果整个设计中只有aurora核那就都一样,比如官方的example【?】)。例:左边红框中为系统时钟99.99…MHz,右边绿框为aurora user_clk100MHz

在这里插入图片描述
在这里插入图片描述所以在设计中调用aurora ip时,需要考虑跨时钟域的操作,这里有两种方法:

1.直接采用axis interconnect完成跨时钟域
这一方法十分直接,及interconnect的主从接口分别接入各自的工作时钟和复位(记得使能接口fifo防止异步读写数据丢失)。

2. 用异步axis fifo分割开时钟域
思路与方法1一致,只不过这样看起来更直观,如下图
在这里插入图片描述
红色为系统时钟域,绿色为aurora工作时钟域,reset模块为该时钟域生成复位信号。

解决时钟域问题后,最后来看aurora core在block design下各输入接口的连线(主核):
在这里插入图片描述
ref_clk, init_clk输入输出数据接口不做赘述,基本都没有问题,重点注意以下几个接口
1.gt_rxcdrovrden_in以及powder_down: 给到常值0;
2.loopback[2:0]:设置aurora的回环模式,默认给到000,具体如下表:
在这里插入图片描述
在这里插入图片描述
3. reset_pb & pma_init
最坑的两个信号,这俩分别是aurora全局复位和硬件资源复位的控制信号,如果作为控制使用约束至开关或按钮,但是!如果不做控制,也一定要给到常值0,不能悬空不接,否则aurora模块无法正常工作(只收不发)

接收端接线及数据流走向与发送一致,各位可以自行reverse一下(【T E N E T】)。

之后生成比特流balabala。。。

附aurora自回环测试ila debug抓的aurora 接收端stream输出:
在这里插入图片描述

Fin

  相关解决方案