4M码率曼彻斯特编解码器的设计与实现
2018-10-10颜爱良吴琼王子剑
颜爱良 吴琼 王子剑
摘要:曼彻斯特编码、解码器是1553B总线协议处理器中的不可缺少的重要组成部分,一个稳定、可靠的曼彻斯特编码、解码器设计对整个1553B总线协议处理器的性能起着关键的作用。本文采用硬件描述语言Verilog以及Modelsim软件进行4M码率的曼彻斯特编、解码器的设计和验证。
关键词:曼彻斯特编码器;解码器;1553B;Verilog
中图分类号:TN919.8 文献标识码:A 文章编号:1007-9416(2018)07-0146-04
曼彻斯特编码、解码器是1553B总线协议处理器中的不可缺少的重要组成部分,作为1553B总线中数据接收与发送的接口,一个稳定、可靠的曼彻斯特编码、解码器设计对整个1553B总线协议处理器的性能起着关键的决定性作用。本文中所设计的曼徹斯特编码、解码器是采用硬件描述语言Verilog进行编程,以及采用Modelsim软件进行仿真验证。
1 1553B总线简介及其协议处理器功能分析
MIL-STD-1553B的全称为“飞机内部时分制指令/响应型多路传输数据总线”,其作用是提供一个在不同系统之间的传输数据和信息的媒介。由于1553B总线的高可靠性、实时性等优点,现在1553B总线也被广泛应用于对实时性,安全性要求很高的民用项目。
1.1 1553B总线协议简介
MIL-STD-1553B数据总线上节点分为不同的终端类型,有总线控制器BC、远程终端RT和总线监视器BM,一般情况下,这三部分通过多路总线接口来实现其功能,在一条数据总线上能同时连接31个远程终端。总线控制器BC是在总线上唯一被安排为执行建立和启动数据传输任务的终端;远程终端RT是用户子系统到数据总线上的接口,它在BC的控制下发送数据或接收数据;总线监视器BM“监控”总线上的信息传输,以完成对总线上的数据源进行记录和分析,但它本身不参与总线的通信。各终端之间信息传输方式有:BC到RT、RT到BC、RT到RT、广播方式和系统控制方式。
为了提高1553B数据总线工作可靠性,通常采用双冗余方式,实际使用中,第二条总线处于热备份状态。总线传输媒介采用屏蔽双绞线,节点耦合方式有直接耦合与变压器耦合,数据传输采用曼彻斯特Ⅱ型码调制信号,信号是以串行数字脉冲的形式进行传输,信号从高电平回归到低电平表示逻辑状态“1”,信号从低电平回归到高电平表示逻辑状态“0”。其典型的传输速率为1Mb/s,为了适应高速数据传输应用,因此本文采用4Mb/s的码率。1553B数据总线典型拓扑结构如图1所示。
在1553B总线上传输的有三种类型的字:命令字、状态字和数据字。每种字的字长为20 位,有效信息位是16 位,每个字的前三位为同步字头,最后一位为奇偶校验位。有效信息(16位)及奇偶校验位在总线上以曼彻斯特码的形式进行传输。同步字头占三位,或先正后负(命令字、状态字) 或先负后正(数据字),正、负电平各占同步字头的一半。由于系统的类型不同,可辨别出命令字和状态字,命令字由唯一的活动总线控制器发出,而状态字总是由远程终端RT 发出。
1.2 1553B协议处理器功能分析
作为1553B 总线的协议处理器应完成以下功能:(1)将总线上的串行信息流转换成处理机可以处理的并行信息或者与之相反;(2)接收或发送信息时, 能够识别或生成标准的1553 B 信息字和消息;(3)完成与处理机之间的信息交换,这包括1553B信息地址的分配,命令字/状态字的译码或返回状态字、发送数据字等。
图2是通过参考国外专用1553B协议芯片,细致分析1553B总线协议的基础上设计出来的远程终端RT协议处理器的结构框图。它主要包括曼彻斯特编码/解码器、命令字译码及接收控制、状态字设置及命令字/状态字寄存、地址译码、检错控制、发送控制、数据缓冲等模块。
曼彻斯特编、解码器作为模拟收发器与协议处理器之间的桥梁,完成的是曼彻斯特码的编码及解码,并检测错误。它接收具有有效同步字头的曼彻斯特码,并进行译码,以及识别其类型和串/ 并转换、奇偶校验等;或者将处理器发出的并行二进制数据进行曼彻斯特码编码,再加上同步字头及奇校验位使之成为符合1553 B 总线标准的字进行串行输出。
2 曼彻斯特编码、解码器的总体设计
在介绍编、解码器的设计之前, 有必要了解曼彻斯特码的特征,以便在设计中对其加以利用,达到简化电路的效果。曼彻斯特码又称双相码,是一种超越传统数字传输极限的编码/解码方式。它本身包含了自定时的信息,解决了传统编码方式在传输数据时缺少定位时钟信息的问题。它对每个二进制代码分别利用两个具有不同相位的二进制新码去取代。与用高、低电平表示的非归零二进制码相比,在连‘0或连‘1的情况下更易于提取同步时钟信息,又无直流漂移,且有强的抗干扰能力,编、译码过程比较简单。曼彻斯特编码方式见图3所示。
由图3可以看出,曼彻斯特II型码将逻辑‘0,表示为“01”,也即用一个由低到高的跳变来表示;将逻辑‘1表示为“10”,也即用一个由高到低的跳变来表示。
2.1 曼彻斯特解码器的设计
曼彻斯特解码器从模拟收发器接收曼彻斯特II型编码的串行数据,实现同步头检出、数据检出、曼彻斯特II码错误检出、奇偶校验检测、位计数、串并转换等功能,将处理后的16位并行数据交给后级模块进行分析处理。其过程可分为以下几个部分:(1)同步头判断;(2)解码有效数据;(3)将解码后的串行数据并行化,并对这16位数据进行奇偶校验判断。解码器逻辑图如图4所示。
由图4可以看出,解码器的输入数据有解码时钟clk(因为编码数据在1553B总线上的传输速率为4Mb/s,故选解码时钟为40M),串行输入的待解码数据data,复位信号rst_n(低电平有效);同步头类型信号rx_csw(表示接收到的字为命令字或状态字),同步头类型信号rx_dw(表示接收到的字为数据字),奇校验错误信号parity_err(高电平表示奇校验错误),解码完成信号rx_rdy(高电平表示解码完成)以及解码后的16位并行数据rx_data_out。
解码器的工作原理如下:首先,由于待解码数据在数据总线上的传输速率为4Mb/s,而解码时钟为40M,故该系统存在跨时钟域处理数据的问题,为了尽可能避免发生亚稳态问题,故刚开始的时候用二个移位寄存器(9位的data_sftreg,和29位的sync_sftreg)对待解码数据进行寄存,并检测是否存在同步头边缘跳变。一旦检测到同步头边缘跳变(syn_edge=(data_sftreg[3]==data_sftreg[4])&(data_sftreg[4]==data_sftreg[5]&(data_sftreg[4]!=data_sftreg[0])),则开始同步头的识别过程。
由于同步头是由1.5位的高电平和1.5位的低电平组成,因此在解码时钟域,理论上连续接收15个高电平且15个低電平或连续接收到15个低电平且15个高电平时同步头有效,但在实际中,这样并不能正确同步,会产生解码错误。这是因为数据从低电平跳变到高电平或高电平跳变到低电平需要一个建立时间,波形并不是理想的陡峭上升沿或下降沿,同时在实际总线中还存在干扰。因此,为了正确地识别同步头,我们认为当sync_sftreg[28:16]== 0 && sync_sftreg[13:1]==13 'h1FFF && sync_edge时,检测到有效的数据字同步头;当sync_sftreg[28:16]==13 'h1FFF && sync_sftreg[13:1] == 0 && sync_edge时,检测到有效的命令字或状态字同步头。并在此时进入16位数据块的解码状态,并开始接收数据位计数。
正确识别出同步头后,在采样点(data_edge = (data_sftreg[1]==data_sftreg[2]) & (data_sftreg[2]==data_sftreg[3])&(data_sftreg[3]!=data_sftreg[6])&(data_sftreg[6]==data_sftreg[7]) & (data_sftreg[7]==data_sftreg[8]))配合接收数据位计数器,用17位移位寄存器进行移位寄存解码后的数据dword_int <= {dword_int[15:0], data_sftreg[7]}。当接收数据位计数器等于16时,表示17位数据块解码完成。此时,对dword_int[16:1]进行奇校验,即parity_err <= ((^dword_int[16:1]) == dword_int[0]),如果parity_err==1,表明奇校验错。
最后,用保持寄存器rx_data_out寄存解码后的16位并行数据,即rx_data_out<= dword_int[16:1],并将解码完成信号rx_rdy置高。至此,系统等待下一个解码数据的到来,以进行解码。
2.2 曼彻斯特编码器的设计
曼彻斯特编码过程是其解码过程的逆过程。编码器从图2中的发送控制模块接收16位并行的待发送数据,并以4Mb/s的速率将按曼彻斯II编码方式编码的串行数据发送到模拟收发器,进而传送到1553B总线上。它主要实现将单极性不归零码(NRZ)转换成双相的曼彻斯特II型码,并生成相应的同步头,进行奇校验,并对编码后的数据进行并/串转换。曼彻斯特编码器逻辑图如图5所示。
由图5可知,曼彻斯特编码器的输入信号有编码时钟信号clk(由于是4M码率,故选8M时钟作为编码时钟),系统复位信号rst_n(低电平有效),异步写信号tx_wr,待编码的16位并行数据tx_dword,同步头类型信号tx_csw;输出信号有编码后的正向数据txd_p,编码后的负向数据txd_n,编码器忙信号tx_busy以及编码完成信号tx_rdy。
编码器的工作原理如下:首先,利用一个17位的寄存器enc_buf,作为待编码数据以及同步头类型的缓存,并设置二个寄存器类型的信号buf_full(为1表示enc_buf写满)和buf_rd(为1表示可以读取enc_buf中的数据)。一旦异步写信号有效,enc_buf <= {tx_csw, tx_dword},设置buf_full= =1,生成同步编码开始信号tx_start,并对待编码数据进行奇校验,即parity = ~ ^enc_buf[15:0]。
系统一旦检测到同步编码开始信号tx_start以及buf_full信号有效,则进入曼彻斯特编码阶段(包括生成相应的同步头以及对待编码的16位并行数据、奇校验位进行曼彻斯特码型转换),并启动发送数据个数计数器busy_cnt;并根据发送数据个数计数器busy_cnt的计数,串行发送编码后的数据,其关键代码如下:
enc_data<={enc_buf[16] 6'b111000 : 6'b000111,enc_buf[15],~enc_buf[15],enc_buf[14],
~enc_buf[14],enc_buf[13],~enc_buf[13],enc_buf[12],~enc_buf[12],enc_buf[11],~enc_buf[11], enc_buf[10],~enc_buf[10],enc_buf[9],~enc_buf[9],enc_buf[8],~enc_buf[8],enc_buf[7],
~enc_buf[7],enc_buf[6],~enc_buf[6],enc_buf[5],~enc_buf[5],enc_buf[4],~enc_buf[4], enc_buf[3], ~enc_buf[3],enc_buf[2],~enc_buf[2],enc_buf[1],~enc_buf[1],enc_buf[0],~enc_buf[0], parity, ~parity};
最后,当busy_cnt= =39时,生成编码完成信号tx_rdy,编码器忙信号tx_busy=buf_full | buf_rd。至此编码完成,等待下一次编码的开始。
2.3 设计中存在的问题及解决办法
在曼彻斯特编解码器的设计过程中存在以下问题:(1)由于设计中要使用40M的解码时钟和8M的编码时钟,而一般通过分频产生的时钟信号,延迟比较大,影响时钟的精度,所以一般选择使用Altera提供的PLL产生相应的时钟信号,这样生成的时钟信号延迟和抖動都很小;(2)由于本设计中涉及跨时域的数据传输,为了尽量避免亚稳态的发生,本设计中采用同步寄存器的方法,大大降低了亚稳态发生的概率;(3)由于数据从低电平跳变到高电平或高电平跳变到低电平需要一个建立时间,波形并不是理想的陡峭上升沿或下降沿,同时在实际总线中还存在干扰;因此,在设计解码器时对同步头数据的采样要特别小心,应该滤除掉发生跳变以及边缘的数据。
3 仿真结果
为了确保设计的正确性,必须对设计进行功能仿真。本文采用Modelsim SE6.2软件进行仿真测试。其解码器与编码器的仿真结果分别如图6、图7所示。
在对曼彻斯特解码器进行仿真测试时,由图6可以看出,当输入的待解码字是命令字16hcccc,解码后的16位有效数据为“1100110011001100”,正确无误,证明了设计的正确性。
在对曼彻斯特编码器进行仿真测试时,由图7可以看出,当输入的待编码数据为16b1010000110100001,同步头类型为命令字时,编码器能按曼彻斯II型码正确输出编码后的串行数据,证明了设计的正确性。
4 结语
目前,1553B总线协议正被越来越多的军用与民用客户所接受。稳定可靠的曼彻斯特编、解码器对整个1553B总线的性能起着关键的作用。利用可编程逻辑器件,可顺利实现这种编、解码功能,其高性价比有利于协议的推广运用。在接下来的工作中,我们还可以运用类似的设计思路进行完整的1553B协议处理器的设计。
参考文献
[1]GJB289A一97.数字式时分制指令/响应式分路传输数据总线[S].北京:国防科学技术工业委员会批准,1997.
[2]夏宇闻.复杂数字电路与系统的Verilog HDL设计技术[M].北京:北京航空航天大学出版社,1998:9.
[3]石红梅,姬劳,谢栓勤.用FPGA实现1553B总线接口中的曼码编解码器[J].新器件新技术,2004,4(4):42-46.
[4]贾永来.基于FPGA的1553B总线接口技术研究及实现[D].成都:电子科技大学,2008.