以太网协议栈与PS工程的融合

在PL端的以太网协议栈(HUTP实现)搭建完成,经过测试无误后,下一步的工作是和我之前在PS端的工程相结合

一开始我选择将两个大工程直接融合,结果一口吃不成大胖子,直接融合规模太大了,而且出问题了不知道从哪里定位,然后就制定了一个目标四步走计划

总目标:让PL端的以太网协议栈工程和PS端的参数控制,NVME,DMA传输三部分工程完美融合,功能协调相互配合,形成一个完整的系统

四步走

STEP1:纯PS端+以太网协议栈

纯PS端指PS端未实现任何功能,逻辑上和纯PL端以太网协议栈是完全一致的,但是以太网协议栈的时钟不再是由底版提供,而是由ZYNQ IP引出的frabic clock提供的

其Block Design如下所示

step1bd

STEP2:参数控制+以太网协议栈

在STEP1的基础上融入参数控制功能,修改了以太网协议栈的参数(从写死改成从外部写入)

step2bd

在PS端参数控制的实现由驱动文件config_drv.c和应用文件config_app.c实现

大致框架见我以前的文章:参数配置框架搭建

现在的配置文件如下所示:

zynqmp:
    led_lite: 1
    sample_rate: 2000000
    total_sample_num: 100
    sample_num: 50
    channel_mask1: 0xffffffff
    channel_mask2: 0xffffffff
    channel_mask3: 0xffffffff
    channel_mask4: 0xffffffff
    channel_mask5: 0xffffffff
    channel_mask6: 0xffffffff
    sample_coef: 1
    stream_mode: 0

然后现在在zynq linux控制台输入

config_app w

就将配置文件读取并写入到PL端了

STEP3:磁盘管理+参数控制+以太网协议栈

这一部分在代码技术上没什么难度,主要是工程变得很大,然后Vivado这个软件有个问题,就是工程很大的时候跑综合实现很容易报错(其实是没有任何错的,因为电脑性能不够)

我当时跑的时候就跑了两三次花了一个多小时一直报错,然后以为有什么问题反复排查不出来,最后发现只需要报错后重新实现,只要你尝试的次数够多就能跑出来

step3bd

然后回顾我之前的文章 Linux磁盘管理

STEP4:DMA+磁盘管理+参数控制+以太网协议栈

在上一步的基础上加上DMA,同样需要驱动文件和应用文件的配合

step4bd

DMA可以参考之前的文章 AD采集 DMA传输 Linux端显示数据

最终实现的效果就是,在配置好参数后,控制台运行

dma_app

以太网就会开始发数据包,PS端也能接受到PL端传来的DMA数据

cmd0

以太网0

不过DMA传来的数据还是有些小问题,之后再排查一下问题,然后进行一个全面的测试和排查,如果有问题再修复,然后就完成一个阶段性目标了


本文章使用limfx的vscode插件快速发布