D-DAQ模块添加与PS端对接_20260506

目前添加的模块

按照之前跟中能聚控交流的内容,添加了下面两个模块。

config_set

该模块接收PS端配置的参数。通过cfg_update信号的上升沿来更新参数,并且在参数更新后将cfg_update_valid置高,表示参数已经更新完成并寄存,指示外部模块获取参数。

同时,内部添加状态机,用于存储当前系统状态。
状态机检测系统状态。当系统处于IDLE状态时,如果检测到cfg_update信号的上升沿,则将状态切换到ARM状态,等待采集开始;当接收到起始信号start_en时,如果系统处于ARM状态,则将状态切换到WORKING状态,表明当前系统开始采集数据;当系统处于WORKING状态时,如果检测到start_stop信号的下降沿,则将状态切换回IDLE状态,等待下一次采集。

暂时没有添加错误状态。

sampling_ctrl

该模块接收aurora传输的数据,并根据接收到的信号数量控制采集的开始和停止。

当接受到起始信号start_en时,拉高start_stop信号,开始采集数据。

One Shot模式下,当接收到的信号数量达到sample_point_num时,拉低start_stop信号,停止采集,并结束接收aurora传输的数据。Stream模式下,采集持续进行,直到接收到外部的停止信号stop_triggger。

模块对接PL端程序

系统中,将这几个新加的模块加入到PL端中。

  1. 拉高cfg_update后,PL端将会读取PS端通过AXI传输过来的参数并寄存,同时系统状态跳转为ARM状态;
  2. 之后GPIO输入采集起始信号start_en,状态机跳转为WORKING状态,PL端拉高START_STOP信号,进行采集工作,采集数据于b64模块降采样后输出数据到上位机,同时通过dma将数据传输到PS端文件系统;
  3. 完成采集后,系统拉低START_STOP信号,结束采集工作,同时回到IDLE状态。

添加多子卡数据传输

多子卡情况下,对各个子卡的端口分别进行配置。

内部配置逻辑如下:

  1. 模块中,实际使用通道掩码来处理子卡是否插入系统;
  2. 若检测到子卡已插入,则对应子卡使用的通道掩码根据参数配置文件来设置;若子卡未插入,则对应子卡使用的通道掩码设定为32'h0000_0000。

另外,子卡是否插入,通过如下逻辑判定:

  1. 如果能够检测到aurora的数据传输,并且可以接收子卡状态参数信息,则该子卡定为已插入并正常工作;
  2. 如果对应子卡配置的aurora模块中,输出的指示信号表明并没有子卡aurora的tx端连接,则定为该子卡未插入;
  3. 其他可能的故障情况,子卡状态同样设定为故障,目前暂定为子卡未插入。

PL端对接PS端使用的端口

  1. aurora相关端口、SFP+光通信相关端口:直接配置物理引脚
  2. 相关参数与参数配置信号cfg_update: 通过PS端将参数与信号值提前写入到AXI寄存器中,系统读取到cfg_update值改变后,将其他寄存器中寄存的参数缓存入PL端寄存器;
  3. start_en:分配独立的AXI GPIO端口,外部通过写这个 AXI GPIO 的对应位来启动系统工作。
  4. stop_trigger: 直接配置物理引脚,连接系统对应按键,内部进行消抖后,STREAM模式下使用该信号停止系统采集工作。
  5. 相关系统时钟信号:通过clk_wiz ip核获取差分时钟信号后生成并提供;
  6. SFP+相关端口:直接配置物理引脚。

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