基于FPGA的PCI总线串口卡设计

出处:davidli88 发布于:2010-11-25 14:19:31

     随着计算机测试技术的飞速发展,越来越多的外部设备通过串口与计算机进行通信,实现信息共享以及设备的集中控制和管理。利用串口进行通信具有结构简单、传输距离远、成本低廉等优点,被广泛应用于各个领域。同时,PCI(Peripheral Component Interconnect)总线是一种高性能32/64位局部总线,数据传输速率为132 Mb/s,可同时支持多组外设,数据吞吐量大,是目前应用广泛、的一种高速同步总线。因此,利用PCI总线实现上位机与外部设备的串口通信,可以提高通信能力。

  由于大部分I/O 设备没有PCI总线功能,要实现设备与PCI总线的连接,需要PCI接口芯片、通用异步收发器UART(Universal Asynchronous Receiver Transmitter)等。而目前开发PCI总线与外部设备的串口通信大体上有两种方式:(1)使用专用的芯片,如:PCI专用接口芯片S5920、S5933等;UART专用芯片8250、8251、16450、16550等。使用厂家提供的专用接口芯片,用户可能只使用到它的部分功能,会造成一定的资源浪费,而且专用芯片价格高。(2)使用可编程器件FPGA。使用FPGA较使用专用芯片具有以下优点:一方面用户可以根据需要进行设计,不会浪费资源;另一方面可以将PCI接口、UART都做在一片FPGA内,这样就不需要外接专门的芯片,简化了电路、缩小了体积、提高了系统的可靠性。

  1系统硬件设计

  本设计中选用Altera公司的FPGA芯片EP1C6SQ240作为器件,完成PCI接口以及UART的设计,实现PCI总线与串口的连接。选用美信公司的MAX490芯片作为电平转换电路。系统的硬件连接框图如图1所示。


  数据传输过程:上位机通过PCI总线发送并行数据到UART的数据缓存器中,然后数据经UART的数据缓存器进入UART的移位寄存器进行并串转换后,通过串口传到下位机。反之,下位机通过串口将数据传送到UART的移位寄存器中,进行串并转换,然后进入UART的数据缓存器中,传到上位机。

  设计中采用,传输距离长、抗干扰能力强的RS422串口。但是规定RS422:逻辑1的电平为-6 V~-2 V;逻辑0的电平为+2 V~+6 V。而FPGA的I/O电平一般为0~3.3 V,二者之间的电平不兼容。为了使二者之间的供电电压保持一致,必须加入电平转换电路。为此选用美信公司的MAX490芯片来实现二者之间的电平转换,其电路原理图如图2所示。


  1.1  PCI总线接口

  PCI总线接口的功能是将一个不支持 PCI 协议的后端设备接口到PCI 总线上。为了实现PCI总线接口的基本功能,必须完成如下模块的设计:PCI空间配置模块、偶校验模块、地址译码和命令译码模块、设备状态机模块等。PCI总线接口原理框图如图3所示。


  1.1.1 PCI空间配置模块

  PCI协议支持3种地址空间:I/O空间、内存空间和配置空间。配置空间是PCI所特有的一种空间,其大小为256 B,前64 B是必需的,记录了PCI串口设备的基本信息。PCI设备的一些主要的信息如下:

  (1) VendorID、DeviceID:分别表示设备的生产厂商和设备编号。

  (2) Command:命令寄存器,包含设备控制位,包括允许存储器读写响应等。

  (3) Status:状态寄存器,记录PCI总线的相关事件信息。

  (4) Base Adress Register:基地址寄存器,指示此PCI设备按I/O方式还是按内存方式进行读写以及需要的地址空间大小。

  (5) Interrupt Line、Interrupt Pin:为设备使用的中断号和中断引脚。

  1.1.2 偶校验模块

  PCI总线的偶校验用于检验数据传输是否正确。在PCI总线上,利用偶校验模块检查每次传输中主设备是否正确地寻址到目标设备,以及它们之间的数据是否正确地传输。

  1.1.3 地址译码和命令译码模块

  地址译码模块主要用于检测地址与此PCI串口设备的基地址是否匹配,如果匹配,则PCI串口设备响应当前的总线操作。

  命令译码模块表示PCI串口设备响应不同的总线命令,通过检测PCI-cbe[3:0]信号线上的值,完成命令译码。

  1.1.4 设备状态机模块

  PCI总线接口电路是时序复杂的接口电路,它的复杂性由PCI总线操作的多样性决定。根据PCI的总线操作类型和总线操作时序关系,在这里抽象出一种简洁明了,符合总线时序、更易于硬件描述语言实现的状态机。总线接口状态机示意图如图4所示。状态机的设计是整个设计的部分,利用该状态机可以完成配置寄存器、存储器、I/O的读写操作。


  状态机包括4个状态:空闲(idle)状态、配置读写(con)状态、存储器或I/O读写(rw)状态、传输中止(backoff)状态。系统复位后,状态机转入空闲状态,在空闲状态中采样总线,并根据总线的变化来决定状态机即将转入的状态。如果此时命令总线上是配置寄存器读写命令,判断PCI-irdy信号是否有效来决定下一可能的状态。如果信号无效,则状态机转入传输中止状态,然后返回空闲状态;如果信号有效,则状态机转入配置读写状态。如果此时命令总线上是存储器或者I/O的读写命令,则判断PCI-frame信号是否有效来决定下一可能的状态。如果信号无效,状态机转入传输中止状态,然后返回空闲状态;如果信号有效,状态机转入存储器或I/O读写状态。

  1.2  UART模块

  PCI总线传输的是并行数据,而串口传输的是串行数据,要想实现PCI总线与串口的数据传输,必须通过UART完成数据的串并/并串转换。本文设计的基于FPGA的UART由4个模块组成:波特率发生器模块、寄存器控制模块、接收模块以及发送模块。UART的总体框图如图5所示。


  1.2.1 波特率发生器模块

  波特率发生器实际上就是一个分频器,用来产生和串行通信所采用的波特率同步的时钟,这样才能按照串行通信的时序要求进行数据接收或发送。本设计中UART收发的每一个数据宽度都是波特率发生器输出时钟周期的16倍,即假定当前按照9 600 b/s进行收发,那么波特率发生器输出的时钟频率应为9 600×16 Hz。

  1.2.2 寄存器控制模块

  设计的UART包括:2个数据缓冲寄存器(接收、发送缓冲寄存器);2个状态寄存器(中断识别、线路状态寄存器);2个控制寄存器(中断使能、线路控制寄存器);2个移位寄存器(接收、发送移位寄存器)。寄存器控制模块完成除了移位寄存器外的所有寄存器的读写控制。

  1.2.3 接收模块

  接收模块包括接收缓冲寄存器和接收移位寄存器。在接收数据开始时,为了能够准确地传输数据,先要清空接收缓冲寄存器和接收移位寄存器,然后接收移位寄存器等待检测数据的起始位。检测到有效的起始位后开始接收数据,同时启动接收数据计数器,统计接收数据的位数,直到接收到满足需求的数据位。如果需要奇偶校验,则产生校验位。接收停止位,完成1帧数据(起始位+数据位+奇偶校验位+停止位)的接收,将数据存入接收缓冲寄存器,进行下一帧数据的接收,并通知上位机读取数据。

  接收模块通过状态机来完成数据接收,其状态机包含4个状态:空闲状态(idle)、移位状态(shift)、奇偶校验状态(parity)和停止位状态(stop),如图6所示。其工作过程如下:当系统复位时,状态机进入空闲状态,等待接收开始位;当开始位被确定有效后,状态机进入移位状态。在移位状态中,接收模块为每个数据位的移入等待16个内部时钟周期,接收完特定的数据位后,若奇偶校验使能有效,则跳转到奇偶校验状态;否则,进入停止位状态,而后进入空闲状态,重复上述过程。


  1.2.4 发送模块

  发送模块包括发送缓存寄存器和发送移位寄存器。在发送数据开始时,清空发送缓存寄存器和发送移位寄存器后,发送缓存寄存器接收发送来的数据,然后从发送缓存寄存器向发送移位寄存器发送数据。首先发送起始位到发送移位寄存器,同时启动发送数据计数器,记录发送数据的个数,直到发送移位寄存器接收到满足需求的数据。若奇偶校验使能有效,则跳转到奇偶校验状态;否则,进入停止位状态,完成1帧数据的发送。只要发送缓存寄存器不为空,则继续传输下一帧数据。其状态机的实现与接收模块的类似。

  2  系统软件设计

  2.1  驱动程序

  WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极大地简化了驱动程序的编制。同时,WinDriver又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包[4]。WinDriver可在VC/C++、Delphi、BC++、VB等多种开发环境中使用,本设计选用VC++作为驱动程序的开发环境,通过WinDriver生成VC++代码,根据设计的需要修改生成的代码以完成此PCI设备的驱动。驱动程序流程图如图7所示。


  2.2  应用程序

  应用程序负责调用、连接驱动程序,实现与驱动程序的通信。连接到驱动程序后,向驱动程序注册,同时启动串口监测工作线程,等待事件发生。当驱动程序接收到中断后,通过发送消息通知应用程序,处理发生的事件。处理后退出应用程序,结束等待事件线程。应用程序流程图如图8所示。


  本文介绍了一种基于FPGA的PCI总线串口卡设计方法,简单说明了其硬件的设计和驱动程序、应用程序的编写方法。该设计符合通用的PCI规范,支持即插即用功能,传输速率高,抗干扰能力强。可以广泛应用于各类测试设备、工厂自动化等,具有很高的实用价值。


  

参考文献:

[1]. PCI datasheet https://www.dzsc.com/datasheet/PCI_1201469.html.
[2]. S5920 datasheet https://www.dzsc.com/datasheet/S5920_1186049.html.
[3]. S5933 datasheet https://www.dzsc.com/datasheet/S5933_1055227.html.
[4]. MAX490 datasheet https://www.dzsc.com/datasheet/MAX490_859417.html.


版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!