当前位置:首页 期刊杂志

基于有限状态机的1553B总线解码器设计

时间:2024-08-31

牛茜,靳鸿

(中北大学 仪器科学与动态测试教育部重点实验室,山西 太原 030051)

0 引言

1553B总线是广泛适用于航空电子领域的协议标准,它具有传输稳定、抗干扰、负荷轻、速率高(至少1M/s)等优点。主要被欧美军方用于军事系统,为适应现代军事斗争的需要,近年来,我国在新型战斗机、驱逐舰的研制中已采用该标准。但是由于该标准的核心技术为欧美公司所垄断,因此,自主研发基于1553B总线标准的协议芯片及产品具有重要的战略及经济意义。随着可编程逻辑器件的高速发展,越来越多的设计者在FPGA、CPLD等的硬件基础上开展设计研究,为自主研发1553B相关产品首先必须解决曼彻斯特码的编、解码问题。本文的主要工作就是在FPGA的硬件基础上利用有限状态机来设计实现1553B总线中曼彻斯特II型码的解码器[1]。

1 1553B总线

1553B总线的全称是:飞机内部时分制指令/响应式多路传输数据总线。标准定义了4种硬件组成:传输介质、远程终端RT、总线控制器BC、总线监视器MT。其中传输介质为屏蔽双绞线,总线耦合方式有直接耦合和变压器耦合,直接耦合方式短截线最长距离约为30cm,变压器耦合方式短截线最长距离约为6.10m;总线控制器BC主要控制总线上的数据传输;远程终端RT响应来自BC的命令,执行数据传输;总线监视器MT有选择的或是完全的接收数据总线上的信息并保存[2]。

总线上信号是以串行数字脉冲的形式进行传输的,其数据代码用双相曼彻斯特码的形式来表示,传输速率为1Mb/s。曼彻斯特II型码表示二进制数值不是用电平而是用跳变,跳变产生在每一个位时的中点,逻辑1可以用一个双相信号“10”来传输,即在一个位时的中点由高电平跳变为低电平;而逻辑0可以用一个双相信号“01”来传输,即在一个位时的中点由低电平跳变为高电平。图1所示为数据“10001110”的编码。

总线上传输的有三种类型的字:命令字、状态字和数据字。每种字的字长为20位,有效信息位是16位,每个字的前三位为同步字头,最后一位为奇偶校验位。有效信息(16位)及奇偶校验位在总线上以曼彻斯特码的形式进行传输,每位占的时间为1μs。同步头占3位,或先正后负(命令字、状态字)或先负后正(数据字)。正/负电平各占1.5μs,即占同位场的一半[3]。

图1 数据“10001110”的曼彻斯特II编码

2 用有限状态机实现解码器的设计

曼彻斯特解码就是指解码器从收发器接收曼彻斯特II型编码的串行数据,实现同步头的检出,数据检出,同步头、曼彻斯特II码错误检出,奇偶检测等功能,将处理后的有效信息送往后续模块进行分析。而这些信息的检出是通过用高频时钟抽样计数的方式来确定信号脉冲宽度和跳变情况来实现的。

状态机是一个广义的时序电路,像移位寄存器、计数器等都算是它的特殊功能类型中的一种。根据输入、输出及状态之间的关系,状态机可分为两类,一类是Moore状态机,其输出值只取决于当前状态,与输入值无关;另一类是Mealy状态机,其输出值不但和当前状态有关,还和输入值相关。结合设计需要,我们采用Mealy状态机方式来实现设计所需要的功能。

结合具体情况,设计了7个状态,分别为:IDEL空闲状态,SYN1检测到同步头的前半部分,SYN2检测到同步头的后半部分,Shift1检测到数据位的前半部分,Shift2检测到数据位的后半部分,PARITY1检测到奇偶校验位的前半部分,PARITY2检测到奇偶校验位的后半部分。在各个状态中,又根据其余输入信号的具体情况决定下一步应该转入哪一状态和当前状态各项输出值应为多少。

首先我们来分析信息传输当中可能出现的脉冲宽度及采样点数。以同步头为例,同步头有“01”和“10”两种情况,如果结合同步头后的数据位来考虑的话,应该有如图2所示的4种不同情况,如果检测到的同步头类型不是以下4种,则说明没有检测到合法的同步头。同样的方法分析数据位及奇偶校验位,可以得出在整个的数据传输中,可能出现的脉冲宽度有:500ns、1000ns、1500ns、2000ns这4种情况。结合设计所采用的24MHz时钟和可能出现的脉冲宽度情况,理论上我们的采样计数值应该有:12、24、36、48等4种,但在实际工作中,当采样计数点的值在9~11个时,则认为采集的目标信号为一个500ns的脉冲,同理,当采样计数点的值在 21~23、33~35、45~47 时,认为采集的目标信号为1000ns、1500ns、2000ns的脉冲。整个状态机的状态转换图,如图3所示,图3中“!1”表示条件1取反;7|5表示条件7或条件5成立。在状态转移图中各转移条件的具体含义如表1所示。

图2 同步头脉冲宽度图

图3 状态转移图

当总线上没有数据传输时,在这里具体表现为双相输入数据相等,则状态机将一直处于空闲状态IDEL,一旦数据输入有效,则状态转移到同步头前半部状态SYN1。在进入同步头前半部状态SYN1的同时采样计数开始,直到双向输入数据同时有跳变为止,则根据当时所计得的采样计数值决定下一步进入哪个状态,其余状态的转换同SYN1状态类同,转入不同的状态主要由数据跳变时所得到的计数值来决定。其中略有差异的有两点:首先,在数据位后半部状态Shift2,要决定下一状态还要结合数据位计数值rbc,这是因为在Shift2状态要根据数据位的计数值rbc来判断决定下一状态是要进入后续数据位的前半部状态Shift1,还是已完成所有数据位的接收,应该要进入奇偶校验位的前半部状态PARITY1;其次,在奇偶校验位的后半部状态PARITY2,不以双向输入数据同时有跳变为采样计数结束的条件,这是因为该状态为字接收周期的最后一个状态,如果此后总线空闲,双相输入均为零,那么此时只有一条数据输入线上有跳变也属于正常状况。而在状态机的不同状态,对总线上数据的译码也有所不同,例如在SYN1状态输出同步头类型值若为DEC_In,则在SYN2状态输出同步头类型值就应该为!DEC_In,即DEC_In值取反。这在其余状态中情况类似,这就需要对字结构有详细的了解。最后应注意在状态机工作过程中若出现!1情况,则视为数据无效,返回空闲状态IDEL。

表1 状态转移条件表

3 Verilog HDL实现及仿真结果

本状态机的设计采用Verilog HDL语言,在Quartus II软件中对所设计编码进行了综合仿真。

另外设计中需要注意状态机中状态码的选择:在电路工作中,状态机的状态码是变化最频繁的变量,也是对电路的工作过程影响非常大的变量。状态编码一般有3种:二进制编码、格雷编码和独热编码。本设计中我们采用独热编码[5]。

解码器的仿真时序图如图4所示。

图4 解码器仿真时序图

由图4可知,经过状态机解码解出正确的码字67C7H及同步头类型信号DEC_syn_type,并输出DEC_ready信号。当总信空闲时,DEC_bus_free信号有效。

4 结论

该设计采用Verilog HDL语言作为设计输入,使用Quartus II软件集成的仿真、综合工具,选用Mealy状态机方式完成了1553B总线曼彻斯特码解码器的设计。采用状态机的方法将单个字中各部分分为6种不同的情况进行接收处理,与组合逻辑电路实现相比较更具有优越性。本模块已应用于基于硬件FPGA对1553B总线进行总线监测的某项目的解码部分,经反复实验验证,解码正确,并具有很强的实际应用性。

[1]杨凯.MIL-STD-1553B总线曼彻斯特码编码器的设计与实现[D].成都:四川大学,2006.

[2]贾永来.基于FPGA的1553B总线接口技术研究及实现[D].成都:电子科技大学,2008.

[3]石红梅.用FPGA实现1553B总线接口中的曼码编码解码器[J].单片机与嵌入式系统应用,2005(4):42-46.

[4]齐淋淋.PCI总线目标接口状态机的Verilog HDL实现[J].计算机工程与设计,2006(6):2269.

[5]蒋豪.基于FPGA的PCI总线从接口IP核的设计与实现[D].镇江:江苏大学,2008.

[6]何鹏.基于DSP-FPGA的1553B总线接口通讯模块的研究和应用[D].西安:长安大学,2009.

[7]廖文彬.MIL-STD-1553多功能总线测试卡的实现[D].成都:电子科技大学,2009.

[8]张淑玲,沈田.曼彻斯特编码技术在测井数据传输中的应用研究[J].计算机与数字工程,2009,37(9):187-189.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!