《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于NIOSⅡ处理器的MIL-STD-1553B接口卡设计
基于NIOSⅡ处理器的MIL-STD-1553B接口卡设计
刘 安, 冯金富, 梁晓龙, 杨
摘要: 基于NIOSⅡ处理器搭建了可编程片上系统,在该系统中通过控制HI-6110实现了MIL-STD-1553B总线协议,通过双口RAM实现了与PCI总线的通信。重点论述了NIOSⅡ处理器系统的硬件和软件设计,双口RAM的地址空间划分,PCI9054的驱动软件设计。测试表明,用本方法设计的接口卡能很好地实现MIL-STD-1553B总线协议。
关键词: NIOS II PCI9054 Altera
Abstract:
Key words :

  摘 要: 基于NIOSⅡ处理器搭建了可编程片上系统,在该系统中通过控制HI-6110实现了MIL-STD-1553B总线协议,通过双口RAM实现了与PCI总线的通信。重点论述了NIOSⅡ处理器系统的硬件和软件设计,双口RAM的地址空间划分,PCI9054的驱动软件设计。测试表明,用本方法设计的接口卡能很好地实现MIL-STD-1553B总线协议。
  关键词: 现场可编程门阵列; NIOSⅡ; MIL-STD-1553B; PCI9054; HI-6110

 

  MIL-STD-1553B总线(以下简称1553B总线)是美国制定的一种军用串行总线标准,国内对应为GJB289A-97,它规定了数字式时分制指令/响应型多路传输数据总线及其接口电子设备的技术要求,同时规定了多路传输数据总线的工作原理和总线上的信息流及需要采用的电气和功能格式[1]
  目前,国内外的1553B板卡大多数是基于协议芯片配以相应的处理器和存储器来实现,硬件电路复杂,设计难度大。SOPC(System On Programmable Chip)技术是由Altera公司提出的,它以IP核为基础,以硬件描述语言为主要设计手段,包括以32位NIOSⅡ软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计、软件调试等。使得由许多IC组成的电子系统集成到一块FPGA内成为可能,从而大大简化了系统的硬件设计,节省了大量的系统资源[2]
1 基于NIOSⅡ处理器的1553B板卡硬件设计
  本系统的硬件设计主要由三部分构成:(1)与主机通信的PCI控制器PCI9054,主要实现DPRAM内的数据与主机进行通信;(2)基于NIOSⅡ处理器的FPGA设计,实现NIOSⅡ硬件平台的搭建,实现对HI-6110的控制,读出相关的1553B报文,将相关的控制和数据按照特定的格式存储在DPRAM,或者从DPRAM中读出相关的控制和数据,实现对HI-6110的控制;(3)1553B接口电路,主要由HI-6110和相应的总线耦合器组成。系统总体结构如图1所示。

 


  系统硬件配置如下。
  (1) NIOSⅡCPU:它是整个系统的核心部件,本系统选用的是32位NIOSⅡCPU[3]
  (2) SDRAM:由于本系统复杂,软件代码比较大,因此必须要扩展外部SDRAM。在NIOSⅡ系统工作时,SDRAM主要用来存放运行程序和数据,由于NIOSⅡ对SDRAM的操作速度非常快,本系统的SDRAM选择的是MT48LC4M32B2,可以满足工作在50MHz的NIOSⅡ系统要求。
  (3) Flash:用来存放用户程序,本系统选用的是AM29LV128M。与SDRAM相比较,Flash具有掉电保护的特性,但它的存取速度远远低于SDRAM。该芯片可配置成8位或16位,本系统配置为16位。
  (4) DPRAM:主要用于NIOSⅡ处理器与PCI9054之间的数据交换。其访问时序和SRAM一样,通过添加SRAM模块就可以对DPRAM进行访问。本系统采用IDT公司的IDT70V28系列DPRAM,它可以提供64K×16bit的存储空间。
  (5) PIO:主要完成NIOSⅡ处理器和HI-6110之间的数据、地址、控制信息传输。其中Pio_DataIn和Pio_DataOut是16位的数据总线,Pio_Addr是16位地址总线,Pio_Ctl是8位控制总线,Pio_StatusFlag是8位状态标志总线。
  (6) 时钟模块:其主要作用是为FPGA模块提供系统运行的工作频率,并为HI-6110和PCI9054提供时钟。本系统选择的时钟频率是48MHz。
  (7) PCI9054:它是PLX公司生产的PCI总线通用接口芯片,符合PCI V2.1和V2.2规范;在PCI总线端支持32位数据宽度,传输速率为33MHz;本地端可以编程实现8位、16位、32位的数据宽度,传输速率最高可达132MB/s。本地总线端时钟最高可达50MHz,支持复用/非复用的32位地址/数据。PCI9054内部有6种可编程的FIFO存储器,以实现零等待突发传输以及本地总线和PCI总线之间的异步操作。PCI9054工作方式灵活多样,包括直接主模式、直接从模式和DMA模式。本地总线可工作在M、C、J三种模式[4]。本设计采用直接从模式,本地总线工作在C模式。
  (8) HI-6110:它是由HOLT公司推出的1553B总线协议处理芯片,该芯片可以配置成BC、RT、MT、带RT的MT四种工作方式,支持双冗余总线。内含2个32×16的FIFO。外部时钟可选12MHz或24MHz两种频率[5]
2 基于NIOSⅡ处理器的1553B板卡底层软件设计
2.1 软件总体设计

  将系统硬件生成并下载完毕后,就可以进行系统的软件设计。整个软件的体系结构如图2所示。

 

  在本系统中,NIOSⅡ作为下位机来使用,它通过PCI总线与上位机进行通信,接收来自上位机的命令,并解释执行。NIOSⅡ的软件需要完成以下任务:读写DPRAM实现和PCI总线的通信;控制HI-6110完成1553B数据的发送和接收,实现1553B总线协议。
  在图2中NIOSⅡ上电或复位后初始化程序完成整个系统的初始化,包括启动定时器、初始化中断向量表,初始化DPRAM内容、初始化HI-6110内寄存器等。然后判断当前的访问地址,如果访问内部寄存器,则根据地址可以读写板卡内的寄存器,如:控制寄存器、RT地址寄存器、描述表基址寄存器、状态寄存器、当前处理命令寄存器等;如果是访问数据区,则根据当前的工作模式分别进入BC、RT、MT工作状态进行不同的数据处理,如果数据处理正确则写相应的寄存器和数据区,转入读下一条访问地址。
2.2 1553B板卡地址划分
  1553B板卡的地址分为两部分:内部寄存器和数据区。内部寄存器主要包含控制寄存器和状态寄存器,通过控制寄存器的不同内容可实现对1553B板卡的控制,通过读状态寄存器的内容可以获得1553B板卡内的通信状态,内部寄存器的地址空间为:0x0000~0x00FF;数据区根据1553B的操作模式不同,分为三种类型,即BC模式、RT模式、MT模式,其地址空间为:0x0100~0xFFFF。下面仅以1553B板卡工作在RT模式下进行介绍。本设计采用双缓冲区的数据储存策略,将数据区地址分为RT控制块和RT数据存储两个区,每个控制块含有4个字,每个数据储存区34字节[6]。具体定义如图3所示。

 


3 PCI总线设计
3.1 EEPROM设计
  PCI9054芯片可以支持有EEPROM和无EEPROM的启动方式。有EEPROM时,EEDI/DO的管脚必须上拉;无EEPROM时,EEDI/DO的管脚必须下拉。本系统采用有EEPROM的启动方式。配置芯片选用Microchip Technology公司的93LC46B。EEPROM主要完成对本地配置寄存器的初始配置以及一些控制寄存器的配置,如本地存储空间到PCI内存空间和I/O空间的映射等。根据设计先将PCI9054的各个参数写入93LC46B芯片,系统上电后PCI9054自动将EEPROM芯片中的参数读入,从而初始化PCI9054[7]
3.2 PCI访问DPRAM设计
  本设计中,PCI9054使用地址空间0来访问DPRAM,地址空间0配置为内存空间,其地址范围为1M。PCI9054工作在PCI从模式、本地总线工作在C模式下访问内存空间可以有几种方式:Single Write/Read、Non-Burst Write/Read、Burst Write/Read。另外通过内部Wait State可以添加延时,本地总线通过Ready#信号确认数据读写操作。为了实现PCI9054与DPRAM数据传输无误,在FPGA内编制了读写状态机从而实现两者之间数据传输的时序匹配。状态机核心源代码如下:
  always @ (posedge PCI_CLK)       //时钟,本系统为48MHz
  begin
  casex(currentstate)          //读写状态机
  s0:
  begin
    if (!PCI_ADS && (PCI_ADDR<=16'hFFFF))
                          // PCI_ADS为0表示传输
   begin                  //开始,地址小于128K
       PCI_READY=1'b0; 
       Write_DPRAM=PCI_LWDRD;
       ……
       currentstate = s1;
  end
  else
      currentstate = s0;
  end
  s1:
  begin
     if (!PCI_BLAST)            //PCI_BLAST为0,表示停止Burst 

                       //Write/Read,转入状态0;否则为1,
   begin                         //表示Burst Write/Read
      PCI_READY=1'b1;
      ……
      currentstate = s0;
   end
   else if (PCI_BLAST)
   begin
      PCI_READY=1'b0;
      Write_DPRAM=PCI_LWDRD;
      ……
    end
  default:currentstate=s0;
  endcase
3.3 PCI驱动设计
  驱动程序采用Jungo公司的WinDriver开发平台。该平台的优点是:用户不需要了解操作系统内部原理及DDK开发工具。另外,WinDriver对PCI9054提供了专门的开发框架,可以大大缩短开发周期。
  驱动程序主要由三个部分组成:初始化硬件、对硬件资源的访问和函数库的调用。其中,后面两个部分对于不同的硬件基本一致,不同硬件开发的区别在于初始化硬件时对硬件资源的锁定。WinDriver库函数是实现PCI卡驱动的重要模块,利用这些函数可以对PCI接口的扩展卡进行配置、读写,完成驱动的设计。例如:
  (1) 函数WD_Open( ),用来获得WinDriver驱动程序的句柄。该函数必须在所有其他函数之前执行,用来打开一个WinDriver支持的硬件PCI设备。
  (2) 函数WD_CardRegister( ),负责选定设备,且对该设备的项目进行注册和资源分配。具体完成三个功能:①映射设备的物理空间,使之能够被核心模式的进程和用户模式的应用程序所访问;②检查所需存储器或I/O资源先前是否被注册过,以防设备冲突;③将有关中断请求号、中断类型(电平触发或边缘触发)存储到WinDriver自定义的数据结构中。
4 系统调试
  在实际调试中,通过JTAG端口,使用Quartus II的SignalTap II逻辑分析仪可以测试板卡的运行情况。测得1553B板卡工作在BC模式下访问HI-6110,如图4所示;工作在RT模式下访问HI-6110,如图5所示;PCI9054读DPRAM,如图6所示。

 

  以NIOSⅡ处理器为核心设计并实现1553B板卡,采用PCI总线作为主机和1553B板卡通信。该板卡可实现BC、RT、MT三种模式,实现了1553B总线协议。采用SOPC技术使得该板卡体积小,节省了系统资源,而且具有很好的系统升级性能。目前,该接口卡已成功应用于军队某武器控制系统仿真项目中。

参考文献
[1]  王勇.航空机载计算机与航空电子总线[M].西安:空军工程大学工程学院,2003.
[2]  潘松,黄继业.SOPC技术实用教程[M]. 北京:清华大学出版社,2005.
[3]  Altera Corporation. NIOS Ⅱprocessor reference handbook[DB/OL].http://www.altera.com.cn/literature/hb/qts/n2cpu_nii5v1.pdf. 2007.
[4]  Plx Technology. PCI 9054 data book V2.1, 2007[DB/OL]. http//www. plxtech. com.2007.
[5]  HOLT INC. HI-6110 mil-std-1553/mil-std-1760 BC/RT/MT message processor[DB/OL]. http//www. holtic.com.2007.
[6]  邓青海,景小宁,刘安. 基于USB的多通道俄制串行总线接口卡设计[J].电子技术应用,2006,32(11):55-57.
[7]  颜建峰,吴宁.基于PCI总线的DMA高速数据传输系统[J].电子科技大学学报,2007(10):858-861.

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