系统分为3部分结构:
子卡设计为可插拔模块化结构,从而支持多种类型的采集和输出功能。
子卡与主卡之间,通过aurora 8b/10b高速串行通信协议进行数据传输与参数配置交流。
主卡对子卡的控制,目前考虑继续沿用之前的《板卡间Aurora数据传输协议设计v0.2》,具体内容参考文件《设计文档_板卡间aurora数据传输协议设计.pdf》,并在此基础上对协议拓展,针对80M AO采集卡,DIO输出卡拓展。
旧有设计中,只包含了针对2M32ch AO采集卡的配置设计,并没有考虑80M AO采集卡所需的更高采样率,更可控的通道数控制,以及DIO输出卡的相关配置需求。此外,旧有设计默认子卡为2M32ch AO采集卡,并未考虑到子卡类型的多样性,导致主卡可能会在不同紫卡情况下接收或传输数据时,无法区分不同类型的子卡数据帧,无法对不同类型的子卡进行有效的参数配置和状态监控。
当前内容为初步设计思路,后续将根据实际需求和测试结果进行协议的优化和完善。
板卡间通过通过aurora 8b/10b高速串行通信协议进行数据传输。当前设计格式:
| 字序号 | 数据内容 | 说明 |
|---|---|---|
| Head1 | 32'h55AA_BCBC |
数据传输帧头 |
| Head2 | {4'h1,12'h0,length[15:0]} |
数据传输帧头, 高4位4'h1表示发送的是数据传输帧,低16位表示本次传输的数据帧长度。例如,按照2M32ch AO采集卡的规格,需要传输32通道的16位位宽采集数据,即16个32位数据,因此这部分填充16'h00_10。 |
| Word1 | 通道1、2数据 | 两个16bit通道数据拼接为32bit |
| Word2 | 通道3、4数据 | 两个16bit通道数据拼接为32bit |
| ... | ... | ... |
| WordN | 通道2N-1、2N数据 | 最后一个采集数据字,该字传输时拉高tlast |
该设计需要了解80M AO采集卡和DIO输出卡的具体数据传输需求,以上方案不代表最终设计。
目前设计思路为,子卡在非工作状态下,周期性发送当前状态信息帧。状态信息帧需要至少包括以下内容:
主卡检测到对应槽位插入子卡后,接收到状态信息帧,根据信息帧解析子卡类型,从而根据子卡类型进行不同的参数配置和数据传输链路连接。
参数配置通过aurora 8b/10b高速串行通信协议进行传输,主卡根据子卡类型以及所需参数配置,发送不同的参数配置帧,子卡接收到参数配置帧后解析对应的参数进行配置。
当前针对2M32ch AO采集卡,已完成基本的采样率和增益配置帧设计。当前设计里面,通过数据帧中CTRL_TYPE字段区分不同的配置,后续添加新的配置信息,可通过继续拓展CTRL_TYPE字段来实现。
当前数据帧设计格式:
| 字序号 | 数据内容 | 说明 |
|---|---|---|
| Head1 | 32'h55AA_BCBC |
Aurora数据帧头 |
| Head2 | {CTRL_TYPE,28'b0} |
高4位表示配置类型 |
| words | ······ | 参数配置信息,根据CTRL_TYPE字段的值进行区分,根据所需配置的信息具体设计字段内容 |
需要注意,目前的设计里面,子卡参数配置帧CTRL_TYPE字段只有4位,位宽较小,后续如果需要添加更多的配置类型,可能需要考虑增加位宽或者通过其他方式进行区分。
另外,增益配置帧只有32通道的增益配置,后续如果需要支持更灵活的通道数量的增益配置,可能需要考虑重新设计数据帧格式。
此外,当前设计针对旧有的参数配置功能,只需要配置向载板发送采集数据的采集卡。在后续,会涉及到DIO输出卡,此时载板同时需要向子卡发送3.1中描述的数据传输帧和3.3中描述的参数配置帧,此时帧头信息存在冲突,需要重新设计数据帧帧头格式,或者通过其他方式进行区分。
载板主卡分为两部分:
载板主卡上数据链路分成三部分:
载板首先根据5个槽位对应的aurora协议是否连接,检测是否有子卡插入。插入后,载板主卡接收子卡发送的状态信息帧,解析子卡类型,从而根据子卡类型进行不同的参数配置和数据传输链路连接。
当前载板有两部分数据的IO端口,一部分是与子卡端的aurora接口,另一部分是与上位机端的UDP包axis数据传输接口。在目前的设计里面,子卡端aurora接口为125M时钟域的32位宽格式,上位机端UDP包axis数据传输接口为GTH的156.25M时钟域的64位宽格式。
当前设计里面,系统设计为,子卡传输的采集数据经过载板整理后,在100M时钟域里面组装成512位宽的采集数据,之后系统使用锁存的采集数据,转换成100M时钟域下的64位宽数据,最后系统对64位宽数据组包后,转化到156.25M时钟域的64位宽格式。该设计存在较多的数据位宽转换和时钟域跳变,需要通过fifo等设计实现位宽转换和时钟同步操作,一方面资源占用较多,另一方面会影响到系统延时,且锁死的中间数据位宽导致灵活度也欠缺。
后续设计考虑,将子卡内部数据设计成两部分:
需要注意,五条Aurora链路分别有自己的用户时钟,不能直接视为同一个时钟域。
aurora数据分成四部分来处理:DMA数据整理输出,实时数据传输整理与UDP组包,数据预处理,DA数据输出处理。
以上四部分模块的输入/输出端口, 统一数据输入/输出端口格式为aurora数据接收后,经过解包并整理为适合模块内部传输的输出格式。
该模块将数据整理成适配PS端DMA传输的格式。PS端接收输出的数据后,将数据流盘处理。
该模块数据输出格式根据PS端需求具体设计,不与其他模块关联。
该模块分成两部分设计:实时传输数据整理模块(如现有的b64_data_gen)和UDP包组包模块(如现有的ad_slice_packet_gen)。
实时传输数据整理模块,由两部分数据输入,一部分是直接的aurora数据接收后解包数据,另一部分是数据预处理模块。该模块将数据格式转换成适配UDP包组包的格式。输出的数据单元为一个采样点的数据。
UDP组包模块,获取实时传输数据整理模块的输出数据,并根据当前已有的Blob/Slice数据封装逻辑,将数据整理成UDP包,交给UDP包发送模块,通过SFP+光通信的tx端发送至上位机。
该模块相当于并联于aurora数据传输至UDP组包的数据通路,输入、输出格式统一为aurora传输后的数据格式。在实时输出采集传输链路中,该模块连接到实时数据传输整理与UDP组包模块的输入端口中,可以被该模块视为逻辑上第六张子卡的输出。
模块内部,数据完成预处理后,对数据锁存,后续模块需要数据时,同步读取已经被预处理并完成锁存的端口输出数据。
该模块数据接收上位机数据DIO输出实时传输链路中,上位机发送数据包模块输出的数据,同时对数据进行缓冲处理后,再按照设定的输出频率以及其他参数配置输出。该模块输出数据格式为aurora数据适合传输的格式,该格式与前面三个模块的数据输入格式统一。
在上位机数据DIO输出实时传输链路中,数据可能同样需要经过数据预处理模块。
该模块中数据组包整理后,按照UDP包发送或接收的流程进行整理并输出。发送和接收,使用同一个SFP+光通信模块,可以使用不同的端口号进行区分。
系统PL端工作参数可以允许上位机和载板PS端两部分进行配置。配置后,载板记录原始配置信息、当前参数配置,以及当前参数配置来源。目前已有相关模块,可以在此模块基础上,添加新的配置信息端口,以及上位机配置相关信息的配置协议。
本文章使用limfx的vscode插件快速发布