原思路是通过外部信号控制系统工作状态,但是约束引脚看文档还是找不到,浪费时间太多,干脆就换了个简单点的思路,直接子卡预设好采样周期和采样点数,然后写一个周期产生的信号ad_valid,每30s产生一次,ad_valid模拟外部触发信号,子卡根据该信号决定ad采样时钟信号上升沿,通过预设的采样周期和采样点数控制采样时钟信号。
ila抓取信号:
设定的是200Khz采样率,ila始终为200Mhz时钟,一个ad_en信号周期有1000个ila时钟周期长度,计算200k*1000=200M,符合。
图中发现存在问题:第一个ad采样时钟信号上升沿时,并没有产生ad_data,还正在排查问题。另外为了易于主卡检测工作状态,设定的采样数为2M,需要采样10s才能完成,暂时还没有确定ad_en信号产生的采样点数是否符合预设。
当子卡ad采样时钟信号工作时,子卡产生数据:
后面观察了其中每个周期内的数据,数据正常,可以将采集数据按照编码规则发送出去。
抓取主卡接收端接受的编码数据:
观察可见,主卡接收端接收的采集内容符合子卡编码发送的内容,数据可以传输过去。但是控制字符rx_ctrl_align存在问题。经检查,发现是子卡端未将控制字符tx_kchar发送出去。修改后,主卡可以正常接收并解码输出采集数据。
最终输出到用于对接b64_data_gen的data_recv_gen模块中,信号抓取截图:
观察可知,最终可以实现子卡将数据传输到主卡并由主卡处理。
本文章使用limfx的vscode插件快速发布