2 1553B远程端点数据链路层协议的FPGA实现的总体设计
1553B远程端点数据链路层协议的FPGA实现一共分为4个模块:序列解析模块、命令解析模块、发送模块和上层交互模块。整个协议实现采用时序驱动的方式进行,时钟频率为8 MHz,下面就按照数据进入的顺序介绍整个协议的FPGA实现过程。
2.1 序列解析模块
这个模块接收从收发器接收的信号序列,先后进行同步头检测,曼码解码,奇偶校验,ID检测等步骤,最后给命令解析模块一个只包含命令信息的16位数据,以及其字特性。其实现流程如图1所示。
序列解析模块首先对进入的总线序列进行同步头检测,如果有效,则进行曼彻斯特码解码。曼彻斯特码解码是在同步头检测有效时同步开始的,它在同步头检测有效后每隔1 000μs对序列采样一次,并把采样值作为解码值,同时判断在采样时序列是否发生了跳变,如果发生,则说明序列满足曼彻斯特码编码,否则认定序列存在编码错误,停止解码并置位错误寄存器,而第一次采样是在同步头检测有效后250ns。解码完成后进行奇偶校验,接收模块对有效序列进行奇偶校验,如果奇偶校验错误,则丢弃这个序列,同时置位消息差错位;如果奇偶校验正确,则进入ID检测部分。奇偶校验在VerilogHDL中通过位异或就可以实现。
当奇偶校验正确以后,接收模块就根据从同步头检测得到的字类型进行不同操作。对于数据字,接收模块收到序列后就检测等待数据字寄存器的值,如果不为零,则把这个数据放入到接收缓冲器中,如果等待数据字寄存器的值为1,则首先把寄存器清零,然后把中断请求信号置位,最后把状态寄存器的值放入发送缓冲器中,并通知发送模块发送以及复位等待数据字寄存器,否则把等一待数据字寄存器的值减1,等待下一个字的到来。如果等待数据字寄存器值为零,则认为传输错误,丢弃这个数据字。对于命令字,接收模块进行ID验证,检查所收到的命令是否是总线控制器发给本节点的。它提取所收到的16位有效信息序列中的高5位,与本节点的ID比较,如果不相同,则丢弃这个序列,等待下一个序列的到来;如果相同,则表示这个序列是总线控制器发给本节点的命令,保存命令,启动命令解析模块。
2.2 命令解析模块
命令解析模块完成对收到的命令字进行解析,对收到的数据进行存储的工作。命令解析模块是整个协议的核心,它负责把总线控制器传给本节点的命令翻译成本节点的操作,并执行相关动作。其工作流程如图2所示。
假设命令字存放在寄存器CMD—REG[15:0]中,则命令解析模块首先检测CMD REG[9:5],如果CMD REG[9:5]不为全1或者全0,就表示总线控制器给节点的是数据传输命令;命令解析模块则继续检测CMD REG[10]位,如果为1,则表示总线控制器要求本节点发送数据,同时用CMD REG[4:0]指定了需要发送的数据长度;命令解析模块在收到这个命令后就把相关的数据和状态寄存器的值装入发送缓冲器中,并通知发送模块进行发送。如果CMD REG[10]位为O,则表示总线控制器要求本节点接收数据,同时也用CMD REG[4:0]指定了接收数据的长度,而用CMD REG[9:5]指定了数据接收子节点的ID,命令解析模块在收到这个命令以后就把CMD REG[4:O]装入等待数据字寄存器中,等待后继数据字的到来。如果CMD REG[9:5]为全1或者全O,则表示总线控制器传输的控制命令字,并通过CMD REG[4:0]指定了相应的命令方式代码。对于命令方式代码,命令解析模块根据1553B总线标准对不同方式代码进行相关的寄存器置位操作。
2.3 发送模块