Zynq与PC间的以太网通信实验(一)——方案确定
目标:将PL侧的数据通过以太网接口传给PC。
Zynq板卡选用的是ZC706,上面有板载的以太网PHY芯片,因此需要在Zynq上(至少)实现一个MAC层的功能。
最初的想法是直接用vivado的IP核(Tri mode Ethernet MAC)在PL侧实现一个以太网的MAC层功能,这样实时性比较高,如果使用千兆以太网协议的话,应该可以达到接近于1Gbps的传输速率。
但是后来发现我所使用的板卡ZC706应该是不支持PL侧的以太网接口的。因为原理图上可以看出,ZC706将PHY芯片的相关引脚直接连接到了PS侧的MIO:
所以只能通过在PS侧编写程序来实现与PC机的以太网通信。
因此方案更改为:
将PL侧的数据通过DMA传输到DDR中,然后PS侧从DDR中读取数据,再通过以太网协议传输到PC机,PC上通过网络调试助手(因此这就需要在PS侧形成完整的以太网帧)来接收数据。其中,为了防止DDR的读写冲突,在DDR中开辟一段双缓冲存储结构,DMA向其中一块缓冲写数据的同时,以太网应用程序从另一块缓冲里读数据。
本次设计主要来自于米联客教学视频。
PL侧设计:
ctrl是数据产生模块,将产生的数据写入FIFO中,然后通过DMA写入到DDR中,PS侧可以通过GP接口控制GP通过GPIO开启数据的产生。
PS侧参照了SDK自带的LWIP例程,对应PS侧设计的思想应该是:
初始化DMA和LWIP,使能DMA中断,开启数据产生,开启DMA传输。
在DMA传输完成中断产生时,启动以太网传输,然后再开启另一段缓冲的DMA传输……
参考:
米联客视频教程及《Zynq SOC修炼秘籍》