4. 总线协议控制器IP核设计
机载总线接口板卡的核心价值,最终落在FPGA内部那几个协议控制器IP核上。板卡对外是连接器与收发器,对内则是若干条并行的协议处理通道:1553B负责命令/响应式强实时通信,ARINC 429负责单向广播式航电参数传输,CAN负责多主竞争式设备互联。本节围绕这三类控制器的FPGA实现方法展开,重点说明模式划分、通道结构、时序状态机与参数配置的落地方式。
一、1553B控制器:BC/RT/BM三模式的结构差异
1553B采用曼彻斯特编码、1Mbps速率、命令/响应机制。一个终端在任一时刻只能处于一种模式,因此FPGA实现时通常把BC、RT、BM做成三个可切换的功能单元,共享同一套曼彻斯特编解码器与收发接口,通过模式寄存器选择当前生效的逻辑。
BC模式的核心是“命令序列发生器”。它从命令表RAM中按顺序取出16位命令字,经曼彻斯特编码后发出,随后在设定的响应超时窗口内等待RT状态字。若超时或状态字校验失败,BC需按重试策略处理。RT模式的核心是“命令译码与响应状态机”,它监听总线上所有命令字,判断T/R位与子地址是否指向自己,命中后组织数据字收发并回送状态字。BM模式最简单,只监听、解码并记录总线上的命令字、数据字与状态字,不做任何驱动,常用于总线监控与故障复现。
下面这张图给出三模式共享编解码器、各自独立逻辑单元的结构关系,以及命令字、状态字、数据字在BC与RT之间的流向。
实现时一个关键细节是响应超时计数器。1553B规定RT应在收到有效命令后4~12μs内开始响应,工程上常把超时门限设为14μs左右,用1Mbps对应的1μs位时间做基准计数。若超时,BC置错误标志并按配置决定是否重发同一命令。另一个细节是状态字的忙位与子系统标志位,RT在数据未就绪时应置忙位,BC据此判断是等待还是转去执行下一条命令。
二、ARINC 429收发通道:单向、标签驱动的数据流
ARINC 429是单向总线,一条通道只负责一个方向的传输,速率有100kbps与12.5kbps两档。每个32位字由标签(8位)、SDI(2位)、数据(19位)、SSM(2位)和奇偶位(1位)组成。FPGA实现时,发送通道与接收通道是两套独立逻辑,通常按“每路一个通道”的方式例化,多路并行。
发送通道的核心是标签调度器与移位发送器。调度器按周期或事件从发送FIFO取出待发字,移位发送器按所选速率产生位时钟,先发标签(注意429标签是倒序发送的),再依次发SDI、数据、SSM和奇偶位。接收通道则相反:位同步、字边界识别、标签提取、奇偶校验,校验通过后按标签把数据写入对应寄存器或FIFO,并给出“新数据”标志供上层读取。
下面用数据流图表示一路429接收通道从差分信号到标签寄存器的处理链,以及一路发送通道从FIFO到差分驱动的路径。
工程上常把标签配置做成一张表,每行包含标签号、方向、速率、更新周期和寄存器地址。例如标签0x203表示某大气数据参数,速率100kbps,更新周期50ms,接收后写入地址0x120。这样上层软件只需按标签读取,不必关心位级时序。
三、CAN控制器:位时序、报文对象与验收滤波
CAN控制器在FPGA中通常实现为CAN 2.0B兼容核,支持标准帧与扩展帧。其核心由位时序逻辑、位填充/去填充、CRC校验、报文对象RAM和验收滤波器组成。位时序把一个位时间划分为同步段、传播段和相位缓冲段1/2,通过配置BRP、TSEG1、TSEG2和SJW来匹配波特率与采样点。
以常见的500kbps、系统时钟50MHz为例:位时间=2μs,对应100个时钟周期。若取BRP=5,则时间份额Tq=0.1μs,一个位时间含20个Tq。再取同步段1Tq、TSEG1=13Tq、TSEG2=6Tq,采样点位于(1+13)/20=70%处,符合CAN推荐的75%附近。SJW一般取1~4Tq,用于重同步补偿。
报文对象RAM用于存放待发或已收报文,每个对象包含标识符、DLC、数据场和控制位。验收滤波器按标识符与掩码决定是否接收,可配置为单滤波或双滤波模式。发送时按优先级仲裁,标识符数值越小优先级越高;接收时若多个对象匹配,按对象编号顺序写入。
// CAN位时序配置示例(500kbps,50MHz时钟)
BRP = 5; // 时间份额 Tq = 5 / 50MHz = 0.1us
TSEG1 = 13; // 传播段 + 相位缓冲段1
TSEG2 = 6; // 相位缓冲段2
SJW = 2; // 重同步跳转宽度
// 位时间 = (1 + 13 + 6) * 0.1us = 2.0us -> 500kbps
// 采样点 = (1 + 13) / 20 = 70%
调试CAN控制器时,最直接的观察点是错误计数器与总线状态。当发送错误计数超过255时进入总线关闭状态,需按恢复流程重新初始化。若接收端频繁出现位填充错误,应优先检查两端波特率与采样点是否一致,而不是先怀疑数据内容。
四、三类控制器的资源与接口取舍
三类控制器共享FPGA的时钟、复位和主机接口,但资源占用与实时性要求不同。1553B对时序最敏感,编解码器和超时计数器应放在同一时钟域,避免跨时钟抖动影响响应窗口。ARINC 429通道数多但逻辑简单,适合按通道例化,用标签表统一管理。CAN控制器逻辑较复杂,通常一个核服务一路总线,报文对象数量按实际报文数配置,不宜盲目开大。
主机接口方面,三类控制器都可挂到同一套寄存器总线上,用基地址区分。1553B的命令表、429的标签表和CAN的报文对象RAM可分别映射到不同地址段。中断方面,1553B用消息结束中断,429用新数据中断,CAN用接收中断与错误中断,中断号在板卡初始化时统一分配。
综合来看,1553B控制器重在模式切换与响应时序,ARINC 429重在单向通道与标签管理,CAN重在位时序与报文对象配置。三者在FPGA中的实现方法不同,但都遵循“位级逻辑—协议状态机—主机接口”的分层思路。把每层的输入、输出和可观察信号定义清楚,IP核的调试就会从“黑盒猜测”变成“逐层验证”。