使用Chip2Chip+Aurora实现一个简单的DEMO

描述

以下文章来源于OpenFPGA,作者碎碎思

你有没有遇过这种情况:系统里有两块 FPGA 或者 FPGA + CPU + FPGA,需要它们之间高速、低延迟、可靠地互传数据,甚至需要像访问本地内存那样访问对方的寄存器与 BRAM?这时候传统的 SPI / UART /以太网通信带来的延迟、带宽与开销就显得捉襟见肘。

什么是 Chip2Chip + Aurora 通信?

先说两个组件:

Aurora 协议:Xilinx 提供的一种轻量级串行高速链路协议,适合 FPGA 间用高速串行收发器(GT 或 GTY / SERDES)连接。好处是延迟低、链路效率高。

Chip2Chip IP 核:Chip2Chip(AXI Chip2Chip)是一款由 Xilinx (AMD) 公司提供 的低引脚数、高性能AXI协议软核IP,主要用于实现多设备SoC系统中的FPGA与SoC之间的高效通信。它通过通道复用、数据宽度转换和支持多种物理层接口(如SelectIO和Aurora),能够将AXI4和AXI4-Lite接口透明地桥接起来,可以让一个 FPGA 向另一个 FPGA(或一个拥有对应 IP 的芯片)发起 AXI 或 AXI-Lite 总线访问,就好像对方走在自己的地址图里那样,读写对方的内存或寄存器。

接下来我们就使用Chip2Chip + Aurora 实现一个简单的DEMO。

实际用例

在这个例子里,用的是 Aurora 64b/66b,速率 10.3125Gbps。

Chip2Chip 的 主端会对外提供 AXI 接口(如果启用了,还会有 AXI-Lite 接口)。这样一来,不管是片上的处理器、MicroBlaze,还是其他的 AXI master,都能通过这个 IP 发起读写操作,去访问对端设备的 AXI 地址空间。

把 Chip2Chip IP 接到 Aurora 上其实很简单,主要就是连上复位、初始化逻辑,还有一些状态信号(比如 channel_up)。

在测试的时候,主端这边挂了一个 AXI Traffic Generator 来制造读写流量,通过 Chip2Chip 传过去。

以太网

在 从端这边,随便接个 BRAM,让它当成内存映射的目标。

以太网

时钟这块,两边的配置保持一致:初始化时钟 50MHz,AXI 时钟 200MHz,GT 参考时钟用的是 156.25MHz。

这些子模块(BDCs)最后会组合在顶层 IP Integrator 里,里面还会连收发器(GTs)和时钟管理模块(比如 Clocking Wizard 之类的)。

要注意的一点是:主从两边的地址映射一定要对齐,否则互相访问时就会错位。

这种架构可以直接拿来仿真,不用真的接两块板子。仿真的时候你能看到:

以太网

先在主端这边发起 AXI 写操作

过一小会儿,就能在从端那边看到对应的写入

开源链接

https://github.com/ATaylorCEngFIET/mz616

小结

我比较喜欢这个 IP,原因是有些场景确实很实用。比如在工业应用里,经常需要不同模块之间保持电气隔离,这时候用光纤 + Aurora + Chip2Chip 就特别合适,可以很方便地在设备之间传数据。

它让我们不必把所有交互都扔给软件来完成,也不必忍受传统通信方式那么多中间层的折损。对于追求低延迟、高确定性、模块化重用的工程项目,这一对组合确实能“提速不少”。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分