一种基于CPCI总线的罗经接口模块设计方法
来源: 电子测试   发布时间: 2017-01-15 11:29   796 次浏览   大小:  16px  14px  12px
本文介绍了一种基于CPCI总线的罗经轴角信号接口模块的设计方法。重点描述了硬件构成、本地总线时序的设计方法,双通道轴角转换器数据合成,介绍了PCI9054工作原理和配置EEPROM的方法,最后介绍了该模块WDM驱动程序的开发流程。

惠罡,中电科第二十研究所


关键词:CPCI;时序;9054;驱动

0 引言

某船舶的信息保障系统需要将罗经设备提供的舰船姿态信息做采集和分发。该系统的中心计算机为基于CPCI总线的人机接口计算机,需设计一基于CPCI总线的高速接口模块,将罗经设备提供的模拟轴角信号采集进计算机系统中。


1 设计概述

该罗经设备输出的模拟轴角信号为粗精比36:1的双通道信号,必须经旋转变压器- 数字转换器即RDC转换为数字信号才能被计算机读取,故接口模块共需使用三路(纵横摇姿态和航向)双通道RDC转换器。该接口模块安装于人机接口计算机的CPCI总线上,故模块必须配置PCI桥接芯片。另外总线接口的时序控制和双通道罗经数据的合成工作还需要配置一片大规模的CPLD芯片。


2 硬件设计

本模块硬件组成如图所示。



本模块的CPCI总线接口芯片选用的是PLX公司的PCI9054,该芯片是一种通用总线接口芯片,功能强大配置灵活,使用该芯片桥接CPCI 总线和本地总线,开发者可专注于开发硬件和驱动而不必考虑复杂的CPCI总线规范。依据该芯片手册推荐,选择Microchip公司型号为93AA56B的EEPROM作为外部配置芯片,用于在系统上电时为PCI9054加载用户配置数据。


PCI9054共有M、C、J三种工作模式。其中M模式是摩托罗拉的MCU的专用工作模式;J模式仿照CPI总线时序将地址和数据总线复用,控制较复杂。C模式是一种类似单片机的工作方式,芯片通过片内逻辑将地址线和数据线分开,本地时钟与总线时钟异步工作,为本地工作时序提供了多种工作方式,使用较为广泛,故本设计将PCI9054配置成C模式,这一设置需通过芯片引脚硬连线来实现。本地时钟使用32MHz的外部晶体振荡器,直接通过印制板地层分割同时连接到CPLD的全局时钟引脚和PCI9054的本地时钟输入引脚。


根据信号规模,CPLD建议选择Altera公司EPM2210系列。PCI9054符合3.3V的CPCI标准,可直接将其本地端的所有信号全部连接到CPLD上,不用进行电平转换。三路RDC输出的数字信号每路均为14Bit,外加每路2个控制信号,将它们全部连接到CPLD以充分发挥CPLD内部并行运算的优势,可将纵摇、横摇和航向三路信号同时进行转换以提高效率。


模块布线设计时,应保证PCI9054的位置靠近CPCI总线插座。应特别注意的是,根据CPCI总线规范要求,PCI9054的CPCI总线端各个信号走线长度不能相差过大,且CPCI总线时钟信号的走线长度必须限制在2400mil-2600mil之间,可以使用蛇行线来控制长度。


3 软件设计

本模块软件部分的主要设计工作包含三方面的内容,分别是CPLD的程序设计,PCI9054的EEPROM配置数据设置,以及本模块的CPCI总线驱动程序设计。


3.1 CPLD程序设计


CPLD主要完成对PCI9054的本地总线时序进行译码和控制RDC变换器数据的读写与合成。程序设计使用VerlogHDL语言进行,开发环境为Altera的集成开发环境Quartus。


本模块在CPCI总线上作为被读取的对象不主动发起总线读写周期,这一特性被称为CPCI总线的Target操作。中心机每次从模块读取一个32Bit数据的数据,频率由中心机软件使用定时中断控制,且无大批量数据传送的需求。依据9054数据手册可知,这种操作特性对应的总线模式为PCI Single Target Read/Write,其时序关系如下图所示。



由时序图可知,CPLD要进行的工作就是在CPCI总线发起的读写操作后,对PCI9054产生的本地总线时序进行响应。其关键操作是当LHOLD(本地总线保持请求信号)变为有效后,要立即将LHODA(本地总线保持响应)拉高作为应答,然后再根据ADS#有效时的32Bit本地地址和读写控制信号判断读写的目标地址,并将对应寄存器的数据锁存到32位本地数据总线上即可。


RDC变换器控制信号需根据RDC的工作时序进行。根据数据手册可知,RDC模块通道转换后,经过640ns数据为有效,时序如图所示。



为了在满足时序限制的前提下尽可能提高RDC变换器的转换频率,将本地32MHz时钟进行分频,产生A/B通道选择信号和输出使能控制信号(OE/),使RDC变换器交替输出粗精通道的转换结果。再分频产生两个周期约1.6us的锁存信号,分别将两个通道的数据锁存到不同的寄存器中,再根据合成公式对这两个寄存器中的数据进行计算,最后把计算结果锁存到输出寄存器当中。程序示意图和仿真结果如图所示:




CPLD内部硬件资源丰富,设计时可根据合成公式,可以让系统自己分配资源以达到最优配置,编写程序时直接输入计算公式即可。在CPCI 总线需要读取转换结果时,直接将已经准备好的数据放到本地总线上以供PCI9054使用,不需插入等待周期,以满足CPCI总线单周期读写的时序要求。如果等到CPCI总线读写操作发起后再进行通道选择和粗精合成等操作,就无法在一次PCI Target单周期操作中将合成好的RDC数据准备就绪。双通道数据的合成运算由内部逻辑硬件完成速度较快,最后一级输出寄存器的数据刷新率为微秒级别,而中心机对本模块的读取时间间隔为20毫秒,故可以满足系统的使用要求,实现较简单。注意在总线读取时,应当禁止存储计算结果的寄存器进行刷新。


对于本接口模块中使用的粗精比为36:1,输出数据为14位的RDC转换器来说,粗精合成公式为:


{(A*32+2000H-B)取整+B}


式中为A为粗通道值,B为精通道值;取整是指将低14位舍去,用精通道的14位值代替。合成结果位宽约20位,由计算机读取后再根据需要换算成不同格式。


3.2 EEPROM数据配置


EEPROM数据配置的目的是指定PCI9054的工作方式和总线地址映射关系。这是本模块作为CPCI设备能被中心机系统识别并正常工作的前提。模块工作时,由中心机发起总线周期对本模块上的资源进行读写,这种数据传输方式称为PCI9054的Direct Slave方式,在该模式工作的PCI9054的可以将3种本地地址空间进行映射,分别是:本地地址空间0,本地地址空间1和扩展ROM空间。每种本地地址空间都可以被映射到中心机的内存空间或者IO空间。映射时需指定本地地址范围(Local Address Range),本地地址基地址(Local Bass Address),以及PCI基地址(Pci Base Address),映射示意图如图



由于本模块可以读取的寄存器较少且没有扩展存储器,故只需使本地地址空间0映射到计算机的存储器空间或者IO空间即可满足使用要求,本地地址空间范围按照要求使用推荐的最小值4K 即可。映射到内存空间还是IO空间则没有本质区别,只是计算机在访问这两种地址空间时使用的指令不同而已,一般来说,系统可用的IO空间范围要远小于内存空间,故建议将本地地址空间0映射到内存空间。


EEPROM数据配置的主要内容就是设置PCI9054的工作方式和地址映射关系,此外还需填写各种厂家和设备标识以及子系统号,应注意将不使用的功能关闭,如中断、DMA和不使用的本地地址空间等。具体的寄存器配置数据格式和内容必须仔细对照9054数据手册进行,用二进制编辑器软件写好后,用烧写器将数据写入EEPROM中,然后才能进行后面的工作。


3.3 驱动程序的设计


由于本模块的中心机使用的是WindowsXP Embedded操作系统,在应用程序中实现对罗经接口模块的读写必须为其开发驱动程序。驱动程序开发是一项复杂的工程,通常WindowsXP Embedded下的驱动开发有两种途径,一是使用微软提供的DriverDevelopKit(DDK)进行开发,一是借助第三方工具开发。这两种方式开发的驱动程序均为符合微软WDM驱动模型框架要求的内核级驱动,具有较高的实时性能。但使用DDK进行开发要求开发人员对操作系统有着比较深刻的认识,不适合一般工程技术人员。另一方案是使用第三方工具,目前应用较广的DriverStudio(DS)是一款功能非常强大的第三方工具,他将DDK的功能封装成类以方便用户使用,使用方便。


使用DS的DriverWizard 工具,按照向导即可生成驱动程序框架,然后需根据功能需求添加用户代码,就可以生成所需要的驱动程序安装文件了。


使用DriverWizard时首先应指定本模块驱动类型为PCI设备的WDM功能驱动。后面的步骤需根据硬件的具体设计进行。本模块在PCI9054配置时选择的地址映射方式为将本地地址空间0映射到存储器空间,所以在添加硬件资源的步骤中,必须为驱动添加一个memory类型的硬件资源,并处理对这一资源的读、写请求(IRP),对应的I/O方式均为直接(Direct)、不排队的访问方式,适用于快速传送大批量数据。特别注意这里填写的设备、厂家信息以及子系统号,必须与EEPROM 配置数据中所填写的内容保持一致。


映射到内存的本地地址空间0作为一个硬件资源被包装成一个类KMemoryRange,它封装了对模块的映射内存区域的操作。本模块驱动只处理Read、Wrtie两种请求,接下来的工作就是为这些IRP请求添加代码,以完成驱动程序对模块上CPLD内部寄存器读写操作的具体代码实现。


4 总结

本文描述了一种基于CPCI总线的罗经接口模块的硬件和软件设计方法。着重描述了用CPLD实现双通道数据合成和C模式下PCI9054局部总线接口的一种实现方式,介绍了CPCI总线的地址映射和设备的驱动程序开发基本流程。这种方法适用于传输数据规模较小的场合,实用性强,开发周期短。如要实现中断和DMA等高级功能,则需要对CPCI局部总线的时序做进一步设计,同时在驱动程序增加相应机制的实现代码。