按照之前跟中能聚控交流的内容,添加了下面两个模块。
该模块接收PS端配置的参数。通过cfg_update信号的上升沿来更新参数,并且在参数更新后将cfg_update_valid置高,表示参数已经更新完成并寄存,指示外部模块获取参数。
同时,内部添加状态机,用于存储当前系统状态。
状态机检测系统状态。当系统处于IDLE状态时,如果检测到cfg_update信号的上升沿,则将状态切换到ARM状态,等待采集开始;当接收到起始信号start_en时,如果系统处于ARM状态,则将状态切换到WORKING状态,表明当前系统开始采集数据;当系统处于WORKING状态时,如果检测到start_stop信号的下降沿,则将状态切换回IDLE状态,等待下一次采集。
暂时没有添加错误状态。
该模块接收aurora传输的数据,并根据接收到的信号数量控制采集的开始和停止。
当接受到起始信号start_en时,拉高start_stop信号,开始采集数据。
One Shot模式下,当接收到的信号数量达到sample_point_num时,拉低start_stop信号,停止采集,并结束接收aurora传输的数据。Stream模式下,采集持续进行,直到接收到外部的停止信号stop_triggger。
系统中,将这几个新加的模块加入到PL端中。
拉高cfg_update后,PL端将会读取PS端通过AXI传输过来的参数并寄存,同时系统状态跳转为ARM状态;
之后GPIO输入采集起始信号start_en,状态机跳转为WORKING状态,PL端拉高START_STOP信号,进行采集工作,采集数据于b64模块降采样后输出数据到上位机,同时通过dma将数据传输到PS端文件系统;
完成采集后,系统拉低START_STOP信号,结束采集工作,同时回到IDLE状态。
aurora相关端口、SFP+光通信相关端口:直接配置物理引脚
相关参数与参数配置信号cfg_update: 通过PS端将参数与信号值提前写入到AXI寄存器中,系统读取到cfg_update值改变后,将其他寄存器中寄存的参数缓存入PL端寄存器;
start_en:分配独立的AXI GPIO端口,外部通过写这个 AXI GPIO 的对应位来启动系统工作。
stop_trigger: 直接配置物理引脚,连接系统对应按键,内部进行消抖后,STREAM模式下使用该信号停止系统采集工作。
相关系统时钟信号:通过clk_wiz ip核获取差分时钟信号后生成并提供。
本文章使用limfx的vscode插件快速发布