《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于SoPC技术的1553B总线接口卡设计与实现
基于SoPC技术的1553B总线接口卡设计与实现
来源:电子技术应用2011年第7期
黄 伟1,吴华兴1,鲁 艺1, 周 雷2
1.空军工程大学 工程学院,陕西 西安710038; 2.解放军93846部队,陕西 西安710038
摘要: 提出了一种1553B总线接口卡设计方案。通过采用SoPC技术、基于Verilog的自定义IP模块设计以及基于邮槽寄存器的双向中断设计,快速构建了系统硬件。在NIOS II开发环境下采用C语言开发了系统核心软件—1553B协议处理程序,给出了BC模块的设计实例。结合系统驱动、API和实际应用程序开发对系统进行了多功能测试,验证了其可行性。
关键词: SoPC 1553B 中断 协议处理
中图分类号: TP336
文献标识码: A
文章编号: 0258-7998(2011)07-0057-04
Design and implementation of 1553B bus interface board based on SoPC
Huang Wei1,Wu Huaxing1,Lu Yi1,Zhou Lei2
1.The Engineering Institute of AFEU, Xi′an 710038, China; 2.PLA Unit 93846, Xi′an 710038,China;
Abstract: This paper proposes a design method of 1553B bus interface board. The hardware is quickly built by SoPC technology, Verilog-based design of custom IP module, and design of bidirectional interrupt via MailSlot registers. The core software of 1553B protocol handler program is developed with C language in NIOS II IDE, and a BC module design instance is proposed. System’s multi functions and feasibility are demonstrated, with designs of system driver, API and practical applications.
Key words : 1553B;SoPC;interrupt;protocol handler


    MIL-STD-1553B总线作为一种高可靠性的军用数据传输总线,在国内外军事领域的应用极为广泛,许多航空航天设备中都包含大量的1553B总线接口电路,通过1553B总线进行系统设备间的主要通信。目前,国内自主开发的1553B总线接口电路设计大多基于进口协议芯片(如采用DDC公司的BU-61580[1],或基于HOLT公司的HI-6110[2]),需大量的辅助电路完成缓冲及接口功能,导致设计成本较高。如果完全自主开发1553B协议模块,可采用基于NIOS II处理器和SoPC技术的设计方案,如参考文献[3]提出了一种基于SoPC的1553B总线通用接口设计方案,并进行了初步设计,但该方案仅通过串口进行了简单的功能测试,未对1553B总线协议下的BC/RT/BM多功能处理进行详细描述,也没有真正应用于PCI总线或其他总线平台。因此,为了设计一款低成本、多功能、真正实用的1553B总线接口卡,本文提出了一种基于SoPC技术的1553B总线接口卡设计与实现方法,并结合实际应用对其进行了系统多功能测试。
1 系统结构
    系统硬件为一块PCI板卡,核心为FPGA,系统结构框图如图1所示。其中,1553B总线的耦合方式采用变压器耦合(采用PM-DB2725),总线收发信号需经电平转换器(采用HI-1567)转换。FPGA采用SoPC技术,通过AVALON总线连接CPU、存储器、定时器等设备,以PCI总线和中断方式与主机通信,形成一个嵌入式微计算机系统。FPGA内部主要包括总线编解码模块、协议处理模块、配置模块、PCI总线接口模块等。

2 系统硬件设计关键技术
    1553B总线接口卡的硬件设计采用了Altera公司的Quartus II9.0开发环境[4],以下介绍其关键内容。
2.1 FPGA内的SoPC设计

 


    系统的FPGA芯片为Altera的EP3C16Q240,本身具有可编程、可裁剪等特点,通过采用SoPC技术并应用Quartus开发环境下提供的可裁减IP模块,可在FPGA内快速构建一个嵌入式微计算机系统,以实现系统的1553B接口功能。实际系统中应用的IP模块包括:NIOSII CPU、Timer、SDRAM、PCI-Complier、Onchip-Mem、FIFO,以及用于软件调试及程序引导的JTAG-UART、EPCS-Control等。
    由于FPGA芯片内部资源有限,如何充分利用现有资源实现系统功能是SoPC设计的关键之一。解决的方法是根据需求精简配置IP模块。例如,FIFO和Onchip-Mem共用芯片内有限的嵌入式存储单元,通过权衡二者的空间分配,即保证了编解码缓存的容量和总线吞吐能力,又保证了双口RAM有足够的配置空间。又如将PCI-Complier配置为32 bit从模式,可有效地节省芯片的资源。
    系统通过采用SoPC技术定义必要的模块及合理分配芯片资源,在实现系统功能的同时加快了开发周期,提升了系统性能。
2.2 总线编解码模块的设计
    由于1553B总线采用曼彻斯特Ⅱ编码方式,而Quartus开发环境系统未提供相关IP模块,故设计了针对曼彻斯特II的总线编解码模块。该自定义IP模块基于Verilog语言设计,主要完成1553B总线信号同步头的提取、串并转换、奇偶校验及访问FIFO等功能,实现总线信号的编码和解码。图2所示为从1553B总线读取信号波形进行解码的过程,这也是该模块的主要设计难点。

    解码过程中,同步头检测的设计难点是如何根据不同的跳变斜率和数据有效情况判断同步头。根据1553B总线信号编码方式的特点,同步头在3 μs时间范围的中间时刻存在电平跳变,根据其跳变方式的不同,可区分是命令/状态字还是数据字。考虑到总线信号经远距离传输和变压器转换后,同步头跳变斜率的上升或下降时间发生了一定变化,此外也必须验证同步头后的数据位是否有效,因此,编制Verilog程序时必须考虑到同步头跳变斜率范围和数据有效情况,如以下语句所示:
    sync_csw<='1' when
    (sftreg(2to21)="1111111111****0000000000"
      and data_edge='1') else '0';
其中,sync_csw='1' 代表已正确找到命令/状态字的同步头,data_edge='1'代表同步头后第一位数据有效,1111111111****0000000000代表由8 MHz时钟同步采样的同步头跳变斜率允许在0.5 &mu;s范围内。
    此外,总线编解码模块设计还包括串行到并行的转换、并行到串行的转换、奇偶校验程序以及读写FIFO等。通过将总线编解码模块定义成符合AVALON总线接口标准的自定义外设,可将其连接到系统内的AVALON总线上,实现其与系统内其他设备的信息交换,从而保证该模块的相对独立性、可重用性和可移植性,便于系统的更新升级。
2.3 双向中断的设计与实现
    1553B总线接口卡的双向中断处理功能主要通过PCI总线接口模块实现,包括两类中断:一类方向为主机至板卡,是由主机PCI总线控制产生,需要板内NIOSII CPU响应的中断,称为向内中断;另一类方向为板卡至主机,是由1553B总线接口卡控制产生,通过PCI中断输出,需要主机CPU响应的中断,称为向外中断。如图3所示。

    这两类中断均通过编译器PCI-Complier提供的邮槽寄存器(MailSlot)实现,编译器本身提供了占用PCI配置空间的两组邮槽寄存器MailSlot1 和MailSlot2,每组含8个寄存器,均为单向访问方式。MailSlot1仅NIOSII CPU可以访问,在NIOSII CPU向其写入数据后,产生PCI中断,由主机CPU响应,调用板卡驱动程序的中断服务子程序,且主机只能读取该组寄存器的数据;MailSlot2仅主机CPU能访问,在主机CPU向其写入数据后,产生中断,由NIOSII CPU响应,执行板内中断服务程序,且NIOSII CPU只能读取该组寄存器的数据。为实现双向中断,在硬件设计上应注意以下几点:
    (1)在PCI-Complier配置向导界面中应打开Avalon CRA Port选项;
    (2)在PCI-Complier模块与NIOSII CPU之间设置相应的中断类型号;
    (3)PCI总线INTA管脚应具有较强的拉电流能力,可采用集电极开路或总线驱动芯片IDTQS386。
    通过基于邮槽寄存器的双向中断方式,把中断的实现转换成了对特定寄存器的读写操作,实现方式更加简单,而且在产生中断的同时,可以通过邮槽寄存器传递相关信息,如中断类型、错误状态和相关数据地址等。基于此,在1553B总线接口卡内,通过内中断实现了对板卡运行状态的管理以及对运行时BC和RT消息数据的插入或更换;通过外中断实现了主机程序对消息的即时处理;此外,还结合中断掩码、中断优先级、中断日志列表等软件技术大大增强了1553B接口卡的中断处理功能。这也正是采用SoPC技术的优势。
3 系统软件设计
    1553B总线接口卡的软件设计指的是板内的1553B协议处理程序设计,主要依托NIOS II9.0集成开发环境[5],采用C语言编写。协议处理程序负责控制系统硬件,完成1553B总线协议的处理,使系统能工作在BC、RT、BM三种总线工作模式。系统硬件在加电后,将自动引导系统进入协议处理程序的main()入口函数,因此协议处理程序是系统的实际核心。
3.1 1553B协议处理程序总体设计
    协议处理程序主要包括4个主要模块,如图4所示。其中初始化模块和运行处理模块为main()函数调用的子函数:初始化模块除了负责加电启动时硬件的初始化配置,还包括在BC、RT、BM三种不同工作模式时分别进行的初始化;运行处理模块负责管理系统工作状态,并在系统进入运行状态时调用当前工作方式对应的主循环函数。定时中断处理函数负责BC消息帧的计时以及产生RT/BM消息的时间戳。向内中断处理模块负责响应来自外部主机的命令,它占用邮槽寄存器组MailSlot2的两个寄存器,其中一个寄存器负责接收主机的运行控制命令,并由命令中断处理子模块,另外一个寄存器负责响应主机的BC消息更新请求或RT消息读写请求,并调用对应的BC或RT中断子模块来处理。

    图5反映了协议处理程序的主要工作流程。系统加电后,进入协议处理程序的main()函数。首先调用启动初始化模块,注册定时器,使能通过邮槽寄存器产生的向外中断,注册向内中断处理服务子程序,初始化Onchip-Mem内的配置寄存器和SDRAM内的全局变量;然后调用usleep()休眠函数,等待向内中断,直到系统收到向内中断,并且从邮槽寄存器中读到初始化命令时,系统将根据Onchip-Mem内的配置寄存器信息(由主机通过PCI内存空间提前写入),配置板卡为BC、RT、BM三种模式之一,并执行相应的初始化模块,配置存储器空间,成功后板卡进入暂停状态,否则回到未初始化状态,继续等待向内中断;系统在暂停状态时如果收到向内中断和来自邮槽寄存器的运行命令,则进入板卡的正常工作循环,根据板卡的BC、RT或BM工作模式反复执行相应的主循环模块;循环运行期间如果收到向内中断和来自邮槽寄存器的停止命令,则在处理完当前消息块后返回暂停状态,等待下一运行或初始化命令。

    协议处理程序采用的工作流程,使1553B总线接口卡可以同时支持BC、RT、BM三种工作模式,并在三种模式间任意切换,无需硬件复位重启,减少了系统启动和切换的延时。限于篇幅,本文仅以BC工作模式为例介绍1553B总线接口卡软件的具体设计方法。
3.2 BC模块设计
    BC模块指的是1553B总线接口卡BC工作BC模式时协议处理程序调用的子功能模块,主要包括BC初始化模块、BC主循环模块和BC中断处理模块。
    BC初始化模块功能包括:复位配置寄存器和全局变量;将Onchip-Mem内的前64 B存储单位配置成32个16字的寄存器,并按表1定义初始化相关寄存器,赋予默认值;在SDRAM和Onchip-Mem内配置BC消息数据区和中断日志缓冲区,最多支持4 096个BC消息块和1 024个中断。需要注意的是,外部主机必须在板卡初始化完成后和运行前(即系统处于暂停状态时)对相关寄存器和数据区进行配置,如自定义消息帧周期、中断屏蔽值,以及加载BC消息数据。

    BC消息数据区的基本单元是数据结构体BcMsgBlock,如下列代码所示:
    struct  BcMsgBlock  //BC基本消息块
    { unsigned short m_Control;//控制字
    unsigned short m_MsgStatus;//消息状态
    unsigned short m_Command1;//命令字1
    unsigned short m_Command2;//命令字2
    unsigned short m_Status1;//状态字1
    unsigned short m_Status2;//状态字2
    unsigned short m_Gap_Time;//消息间隔
    unsigned short m_NextMsg;//下一消息
    unsigned m_Data[32]; }
    在控制字内可以定义消息块的重试次数、A/B总线、中断使能和控制码等,从而加入许多BC消息处理功能。每处理完毕一个消息块,在其消息状态字内会保存有当前消息执行结果和错误类型,可供主机查询和进一步处理。
    BC主循环模块在板卡进入运行状态时被调用,负责按1553B总线协议实现BC功能,其主要流程如图6所示。

    BC中断处理模块的功能相对简单,主要负责响应外部主机通过MailSlot2中另一个邮槽寄存器发来的BC消息更新请求,将指定的BcMsgBlock数据写入对应的存储空间。由于是通过中断服务子程序调用,它使得系统在暂停和运行状态时均可以对某个数据块进行更新,从而增强了系统组织BC消息帧的灵活性。
4 系统应用实例
    通过上述系统硬件和软件的设计,1553B总线接口卡构成了一个完整的嵌入式微计算机系统,可以完成复杂的BC/RT/BM功能。但是接口卡本身不能独立起作用,需要外部主机提供驱动和应用程序接口(即API),才能用于第三方开发。
    因此,为了将1553B总线接口卡应用于实际系统中,在WinDriver和Visual C++开发环境下开发了系统的驱动程序和API。仍以板卡的BC模式为例,它的API封装在DLL中,主要包括以下有关函数:
    bool InitBC_Config();//首先调用,使用默认BC设置
    void SetBC_IntMask(WORD mask);//设置中断屏蔽值
    void SetBC_FirstMsg(int i);//设置起始消息索引
    void SetBC_ValidMsgCnts(int n);//设置有效消息个数
    void SetBC_Broadcast(bool enable);//使能广播
    void SetBC_IntLogList(bool enable);//使能中断日志列表
    void SetBCMsgFrmPeriod(bool enable, int frmTimeUs);
    void SetBC_IntCallback(void* fun);//设置中断回调函数
    int GetBC_CurrMsgIndex();//获取当前正执行消息索引
    WORD GetBC_CurrIntInfo();//获取当前中断信息
    int LoadBCMsgBlk(int i, BcMsgBlk* pMsg);//加载消息
    bool ReadBCMsgBlk(int i, BcMsgBlk* pMsg);//读消息
    bool StartBC();//启动BC
    bool StopBC();//停止BC
    在1553B总线接口卡驱动和API的基础之上,可以开发板卡的应用程序,用于各种基于1553B总线的系统之中。经实验验证了板卡完全可以按照1553B协议工作于BC模式,且功能也较全面,便于各种应用开发。
    目前,1553B总线接口卡已经应用到实际飞机航空电子系统测试设备和仿真设备之中,基于BC、RT和BM功能都进行了有关应用程序开发,充分验证了其设计方案的 可行性。
    根据本文方法开发的1553B总线接口卡目前已经实现了BC、RT、BM三种总线功能的实际应用,相比其他同类设计有如下优点:
    (1)采用SOPC技术,使用开发环境提供大部分IP模块,缩短了开发周期,自主开发1553B协议处理模块,节省经济成本;
    (2)多功能融合设计,根据需求可配置为BC、RT、BM三者之一,硬件电路具有通用性、可拓展性;
    (3)总线接口卡与主机之间的通信采用双向中断方式,避免了查询方式带来的CPU利用率低的弊端,增强了系统功能和灵活性;
    (4)以NIOSII CPU为核心,协议处理模块基于C编写,软件可移植性好,系统软件和API升级简单,便于第三方应用开发。
    本文所述基于SoPC技术的1553B总线接口卡设计与实现方案,不仅对于类似的系统设计有借鉴意义,同时也具有良好的经济效益和应用前景。
参考文献
[1] 史国庆,高晓光.基于DSP的1553B总线接口卡设计与实现[J].计算机测量与控制,2005,13(12):1392-1393.
[2] 刘安,冯金富.基于NIOSII处理器的MIL-STD-1553B接口卡设计[J].电子技术应用,2008(10):138-141.
[3] 谢拴勤,史军芳.基于SoPC的1553B总线通用接口设计[J].计算机测量与控制,2008,16(5):727-730.
[4] Altera Corporation.Quartus II help version 9.0[M].Altera Corporation,2009.
[5] Altera Corporation. NIOS II help version 9.0[M].Altera Corporation,2009.

此内容为AET网站原创,未经授权禁止转载。