嵌入式 > 技术百科 > 详情

PCI总线的测控卡的设计

发布时间:2023-04-25 发布时间:
|

摘要:介绍了一种基于pci总线的测控板卡的设计,使用pci9054实现总线控制,利用fpga实现测控板卡的发送逻辑、接收逻辑和数据缓冲功能,并采用了乒乓fifo;最后给出了用windriver编写设备驱动程序的方法。

关键词:pci9054 fpga 状态机 乒乓fifo windriver

pci总线是一种高性能的局部总线,它具有32/64位总线宽度,且总线地址和数据复用,支持猝发传输,传输速率高达132mb/s;同时可支持多组外围设备。另外,pci总线不依赖于热和cpu,具有较好的兼容性。

近几年来,现场可编程门阵列(fpga)在现代电子设计中的成功应用,使充分利用fpga的本身资源设计专用电路,完成系统功能成为可能,从而简化了电路、缩小了体积、提高了稳定性、具有更大的灵活性。

基于这种设计思想,笔者利用fpga和pci总线接口芯片设计了一种测控电路板卡,经实验运行,效率很好。1 系统结构与功能

本板卡为基于pci总线,采用rs485电平传输的异步串行通信测控卡。它与pci总线的协议部分利用pci9054专用接口芯片来完成。pci9054是由美国plx公司生产的一款高性能pci i/o加速器,它采用了先进的32位数据管道结构技术,支持复用/非复用的32位数据/地址总线,本地总线有三种模式可选;m、c、j模式,被广泛应用于pci总线板卡的开发中。在本设计中,pci9054工作在c模式下,采用中断方式,总线周期为“pci目标读单周期”和“pci目标写单周期”,数据总线为8位。

异步串行通信电路部分完全用fpga来实现。在设计上,笔者选用了xilinx公司的spartan ii系列的xc2s200来实现异步串行通信的接收、发送和接口控制功能,fpga具有在线可编程能力,设计者可根据实际需求分配资源。

测控卡的通信协议为起止式协议,采用固定的帧格式:1位开始位、8位数据位、1位停止位,无奇偶校验位,在软件中采用统一的crc校验,传输波特率为19.2kbps。为保证接收数据的正确性,设计中采用16倍频波特率作为接收采样时钟,并把第八个采样值作为接收数据。 测控卡主要完成以下工作:采用rs485差分电平传输的遥测数据经过电平转换后,由接收模块接收后乒乓缓存到fifo中,并通过pci总线接口芯片pci9054以单周期方式送到计算机内存中以便进行下一步处理。发送模块接收到pci总线传输过来的遥控命令后,按照通信协议格式组帧,在通过电平转换芯片转换成rs485电平后,以19.2khz的频率发送给目标设备,实现对目标设备的各种控制。

根据以上分析,笔者设计的测控卡的具体功能结构如图1所示。下面详细阐述各部分的功能。

·max3490e:完成rs485差分电平到ttl电平的转换;

·接收模块:完成遥测数据的接收和缓冲;

·发送模块:完成遥控数据的缓冲和发送;

·接口模块:实现与pci9054的接口功能,完成读写和传输控制操作;

·pci9054:完成和pci总线的接口协议。

1.1 发送模块设计

发送模块主要实现对遥控数据的缓存和并/串转换,同时按照设计的异步串行通信数据帧格式进行相应的处理,最后将数据串行发送。处理器读取线路状态寄存器信息,检查发送fifo(txfifo)是否为空,如为空且有遥控数据待发,则将控制数据通过pci9054发送并存储到发送fifo中。发送状态机读取txfifo中数据,通过并/串移位后用19.2kbps的波特率串行输出。发送状态机实现起止位“0”、并/串移位信号、停止位“1”的发送,具体如图2所示。图3 开始:当移位寄存器空,发送模块处于等待开始状态,一旦检测到非空,发送起始位“0”,状态机进入移位状态;

移位:通过并/串移位寄存器串行发出,当完成8bit移位后,状态机转入停止状态;

停止:在这个状态,为发送的数据加上一位停止位,然后转入开始状态,等待下一个数据。

发送模块包含8位并/串移位寄存器tsr、51×8 bits发送fifo(txfifo)、用于实现发送遥控数据计数的52计数器等。发送模块内部电路结构劭科3所示。

1.2 接收模拟设计

接收模块实现遥控数据的串/并转换,同时完成起始位、停止位的识别捕获及遥测数据的缓存。由于本设计中由设备每100ms定时器发送一帧(181字节)接收数据,当fifo产生满标志时,将耗时(181×(8+2)/19200)ms,即约95ms,仅剩5ms左右的时间让pc机响应,由于操作系统的特点,不能充分满足机的响应时间,这会造成接收数据混乱。为保证pc机所需的响应时间和数据的正确性和实时性,笔者使用了两个满标志为181的接收fifo进行乒乓切换,收到良好的效果。图4 接收模块包含8位串/并移位寄存器、两个满标志为181的接收fifo(rxfifo、rxfifo_cache)、采样电路、捕获电路、读写通道选择电路和移位计数器电路。其中,采样比较电路采样起始信号、数据信号和结束标志,通道选择电路用来对fifo乒乓切换读写通道进行选择。接收模块内部结构如图4所示。采样电路、捕获电路在采样捕获到起始信号“0”后根据通信协议接收串行数据,经过串/并移位后乒乓读取。

1.3 接口模块设计

接口模块主要实现pci9054和接收、发送模块的通信,包括传输控制逻辑、时钟分频控制,笔者根据pci9054的单周期读写时序给出了各类寄存器的读写信号、总线响应信号、控制信号等。该模块含有五个寄存器;接收fifo寄存器(rfr)、发送fifo寄存器(tfr)、线路控制状态寄存器(lcsr)、中断标识寄存器(iir)和中断使能寄存器(ier)。具体说明如下:·lcsr:通过读该寄存器获取各个fifo的状态信号(置1有效,0无效)。lcsr格式如下:

txfifocompletedtxfifoemptytxfifofull000rxfifoemptyrxfifofull

txfifocompleted:数据传输完成(1完成,0未完成);

txfifoempty:发送fifo寄存器空(1空,0非空);

txfifofull:发送fifp寄存器满(1满,0未满);

rxfifoempty:接收fifo寄存器空(1空,0非空);

rxfifofull:接收fifo寄存器空(1满,0未满)。

·iir:通过读取该寄存器获得中断类型。iir格式如下:

0bit2bit1bit0

0100(int0):接收fifo(rxfifo)满中断;0100(int1):发送fifo(txfifo)空中断;0001(idle):无中断。

·ier:可以通过写该寄存器相应位使能或取消中断。ier格式如下:

txfifoirxfifoi

txfifoi:发送fifo空中断使能(1允许,0禁止);

rxfifoi:接收fifo满中断使能(1允许,0禁止)。

中断产生由接口中断状态机实现,具体如图5的所示。

空闲:空闲状态,没有中断产生;

中断int0:接收fifo(rfr)满,产生中断,要求pci9054响应;

中断int1:发送fifo(tfr)空,产生中断,要求pci9054写入数据或读取中断标识寄存器iir。2 驱动程序的开发

驱动程序主要是完成对硬件板卡的内存映像地址、i/o地址的存取,并正确处理来自板卡的硬件中断。与传统开发设备驱动程序的方法不同,windriver不要求开发者非常熟悉操作系统平台,掌握核心开发/调试知识等;并且windriver设备驱动程序工具包将驱动程序的开发作了最大的简化,它为开发人员提供了功能全面的api函数。开发人员只要根据硬件板卡功能的需要调用所需的函数即可。本测控卡驱动程序需要完成设备的初始化、fifo的读写等,笔者选择相应的函数将其封装成一个测控卡驱动卡,并加以例化,供应用程序调用,即很好地实现了硬件功能。

利用专用pci总线接口芯片可以实现完整的pci总控模块和目标模块接口功能,将复杂的pci总线接口转换为相对简单的用户接口,避免了用户直接面对复杂的pci总线协议,降低了设计难度。利用fpga设计自己需要的专用电路,具有极大的灵活性,设计者可以根据实际的需要,在fpga资源允许的条件下对设计进行fifo实现了数据缓存,并根据数据的实际长度加大了fifo的深度,有效地降低了中断次数或查询次数;同时,fifo的乒乓切换很好地满足了pc机所需的优化作用。利用windriver开发驱动程序,简单实用,缩短了开发周期。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Intel Skylake新架构的秘密:逆超线程.单核猛增