本周基本在与中能聚控进行程序对接,并按照讨论的需求添加模块功能。
子卡状态接收,通过aurora协议接收子卡状态数据帧。
由于该功能添加之前,已经有子卡通过aurora协议传输子卡采集数据的采集数据帧功能,因此状态数据帧编码需要体现区分。状态数据帧编码格式如下:
状态信息帧用于子卡向主卡上报自身状态。状态帧使用独立帧头,与采集数据帧区分。
| 序号 | 数据内容 | 说明 |
|---|---|---|
| Head1 | 32'h55AA_BCBC |
Aurora 数据帧头 |
| Head2 | {4'h2,12'h0,length[15:0]} |
状态信息帧头,高 4 位 4'h2 表示传输的是子卡状态信息,低 16 位表示后续状态数据长度,当前填充 16'h0004 |
| Word1 | {16'd0, channel_num[7:0], serial_number[2:0], error_code[4:0]} |
子卡基础状态字,序列号 3 位可表示 0 到 7 号板卡;错误码 5 位可表示 32 种状态;错误码和序列号共 8 位,对应主卡状态机 8 位,可直接用于汇报错误信息 |
| Word2 | hardware_id[31:0] |
子卡硬件型号 ID |
| Word3 | firmware_id[31:0] |
子卡固件版本 ID |
| Word4 | max_sample_rate[31:0] |
子卡支持的最大采样率,按照设计可以定为 2M 采样率;该字段传输时拉高 last |
主卡接收到 32'h55AA_BCBC 后,继续读取 Head2 判断帧类型:当 Head2[31:28] == 4'h2 时按状态信息帧解析,否则按采集数据帧解析。状态信息帧应在采集数据帧之间发送,不应插入到一帧采集数据帧中。
主卡原来已经添加了基本的工作状态。初始IDLE状态,参数配置好后进入ARM状态,起始信号输入后进行采集,进入WORKING状态,采集完毕回到IDLE状态。
子卡状态接收逻辑添加后,主卡PL端需要根据子卡状态信息帧中的错误码进行相应的处理和状态更新。
当子卡接受的error_code为0时,表示子卡状态正常;当error_code不为0时,表示子卡存在异常状态。主卡PL端需要根据error_code的值,更新系统工作状态寄存器的值。
这部分逻辑根据中能聚控提供的参数配置信息数据帧打包逻辑,进行相应的处理和存储。
参数配置信息数据帧帧头的格式如下:
| 偏移 | 字段 | 长度 | 类型 | 说明 |
|---|---|---|---|---|
| 0 | magic |
4 | uint32 |
固定为 0x44444151,ASCII 为 DDAQ |
| 4 | version |
1 | uint8 |
协议版本,当前为 0x01 |
| 5 | header_len |
1 | uint8 |
帧头长度,固定为 32 |
| 6 | msg_type |
1 | uint8 |
消息类型 |
| 7 | flags |
1 | uint8 |
标志位 |
| 8 | seq_id |
4 | uint32 |
指令序号 |
| 12 | cmd_id |
2 | uint16 |
指令 ID |
| 14 | status |
2 | uint16 |
响应状态,请求帧填 0 |
| 16 | payload_len |
2 | uint16 |
负载长度 |
| 18 | reserved0 |
2 | uint16 |
保留,填 0 |
| 20 | timestamp_l |
4 | uint32 |
时间戳低 32 位,可选 |
| 24 | timestamp_h |
4 | uint32 |
时间戳高 32 位,可选 |
| 28 | reserved1 |
4 | uint32 |
保留,填 0 |
根据帧头判断指令类型。当 msg_type 为 0x01 时,表示参数配置指令,PL端需要根据 cmd_id 解析指令功能,为 0x0101 (SET_CONFIG) 时表示当前系统传输的是参数配置指令,并将参数值存储到相应的寄存器中,以供采集控制逻辑使用。
SET_CONFIG 指令的 Payload 固定为以下结构:
| 偏移 | 字段 | 长度 | 类型 | 说明 |
|---|---|---|---|---|
| 0 | sample_rate |
4 | uint32 |
采样率,单位 Hz |
| 4 | total_sample_num |
4 | uint32 |
单轮采集时,每通道总采样点数 |
| 8 | sample_num |
4 | uint32 |
单个 Blob 中每通道采样点数 |
| 12 | module_mask |
4 | uint32 |
5 个子板使能掩码 |
| 16 | sample_coef |
4 | uint32 |
降采样系数 |
| 20 | stream_mode |
4 | uint32 |
采集模式 |
| 24 | reserved0 |
4 | uint32 |
保留,填 0 |
| 28 | reserved1 |
4 | uint32 |
保留,填 0 |
Payload 长度固定为 32 字节。通过阅读Payload中的参数值,PL端可以配置采样率、采样点数、子板使能等参数,以满足不同的采集需求。
批量参数通过统一指令 SET_PARAM_BLOCK (0x0104)下发。PGA 增益、后续通道掩码、触发参数等大批量不定长参数指令配置,都应复用该 Payload 结构,避免为每一种参数单独设计 UDP 解析格式。
批量参数配置指令的 Payload 结构如下:
| 偏移 | 字段 | 长度 | 类型 | 说明 |
|---|---|---|---|---|
| 0 | param_id |
2 | uint16 |
参数块 ID |
| 2 | target_id |
2 | uint16 |
参数目标编号,例如子板编号 |
| 4 | elem_size |
2 | uint16 |
单个元素字节数 |
| 6 | elem_count |
2 | uint16 |
元素数量 |
| 8 | data |
N | uint8[N] |
参数数据 |
该格式用于通用参数配置指令,适合下发不定长度的参数块数据。批量参数配置、PGA 增益、后续通道掩码、触发参数等大批量参数指令配置,都可复用该格式,避免为每种参数单独设计 UDP 解析结构。
系统参数通过PL端接收UDP配置信息和PS端相关寄存器实现。当完成数据帧接收解析后,将会拉高对应数据的valid信号,系统缓存相关参数的寄存器,更新为当前系统接收到的参数配置。
本文章使用limfx的vscode插件快速发布