基于FPGA的PCI接口设计
1 PCI总线及其接口概述
PCI总线是高速同步总线,具有32bit总线宽度,工作频率是33MHz,最大传输率为132Mbyte/s,远远大于ISA总线5Mbyte/s的速率。PICMG(PCI工业计算机制造商联盟)制定的更加坚固耐用的Compact PCI总线规范,支持64位总线宽度,66MHz作频率,最大传输率为528Mbye/s。基于PC机的高速数据采集系统和各种虚拟仪器,几乎都选择了PCI总线。在现代高速通讯、测试等领域的嵌入式应用中,Compact PCI总线大有超过VME和VXI总线的趋势。PCI的高性能、高效率以及与现有标准的兼容性和充裕的发展潜力,是其它总线所不能及的,被计算机界公认为最具高瞻远瞩的局部总线标准。
PCI总线接口相对其它总线接口来说是比较复杂的,它不但有着严格的同步时序要求,而且为了实现即插即用和自动配置,PCI接口还必须有许多配置寄存器。根据用户设备的性质不同,PCI设备分为MASTER(主设备)和TARGET(从设备),因此PCI接口类型也就分为Master和TARGET两种接口。概括地说,PCI接口主要包括PCI标准配置寄存器(64字节)、PCI 总线逻辑接口、用户设备逻辑接口、数据缓冲区等。
作为一般应用设计工程师,为缩短开发周期,没有必要自己去设计全部的复杂的接口逻辑,甚至可以不必完全理解PCI规范的细节,就能进行PCI用户设备的设计。目前,市场上有一些专用PCI接口芯片,如AMCC公司的S5920(TARGET接口)、S5933(MASTER接口)等。使用这些专用PCI接口芯片,设计者只需要使用地址线、数据线以及少数几个读写控制信号,就能实现PCI总线与PCI用户设备之间的连接,类似ISA总线接口那么简单方便。
随着FPGA (现场可编程逻辑阵列请介绍一下Flash的全面管理问题。) 技术的快速发展,万门以上乃至几十万门逻辑阵列的使用越来越普遍,FPGA的单片价格也大幅度下降。与专用PCI接口芯片相似,很多FPGA制造商都提供了PCI接口宏核逻辑(PCI MegaCore)。设计者可以将PCI用户逻辑与PCI MegaCore集成在一片FPGA里,并且可以在顶层通过仿真来验证PCI接口以及用户逻辑设计的正确与否,这样可以大幅度提高调试速度,缩短开发周期,提高电路板的集成度和系统的性能。
Altera公司提供了多种不同功能的PCI MegaCore,例如:pci _a(带有DMA的32位MASTER/TARGET接口),pci_mt64(支持64位的MASTER/TARGET接口),pci_mt32(32位的MASTER/TARGET接口),pci_t64(支持64位的TARGET接口),pci_t32(32位的TARGET接口)等。不同的PCI MegaCore占用的资源是不同的,设计者可以根据PCI用户设备的需求来选择。
本文将介绍Altera公司提供的最简单的32位PCI TARGET接口宏核逻辑pci_t32。重点介绍利用pci_t32进行PCI接口设计的方法及应用注意事项,并给出具体设计实例。其它PCI MegaCore的设计方法与此相类似。本文不介绍有关PCI规范的细节内容。
2 Pci_t32 MegaCore的内部结构及外围信号
Pci_t32是ALTERA公司提供的最简单的32位PCI TARGET接口宏核逻辑,支持33MHz和66MHz的PCI时钟。
Pci_t32内部结构包含如下几个模块:
PCI总线配置寄存器,是符合PCI规范2.2版规定的所有配置寄存器。配置寄存器用于识别设备、控制PCI总线功能、提供PCI总线状态等。
奇偶校验模块,用于对数据、地址、命令等进行奇偶校验。
PCI侧TARGET控制模块(PCI target control block),用于控制pci_t32(作为TARGET)与PCI总线的各种操作。
用户设备侧TARGET控制模块(local target cONtrol block),用于控制pci_t32(作为TARGET)与用户逻辑的各种操作。
用户设备侧地址/数据/命令/字节使能模块,接收和输出用户侧的所有地址/数据/命令/字节使能等信号。
Pci_t32内部功能模块及周边信号如图1所示。
左侧PCI信号是符合PCI规范的标准信号,在这里不多加解释。下面重点介绍右侧用户逻辑接口local信号:
L_aci 31 0 ,local侧地址、数据输入信号。
L_cbeni 3 0 ,local侧命令、字节使能输入信号,位定义及时序符合PCI规范。
L_dato 31 0 ,local侧数据输出信号。
L_adro 31 0 ,local侧地址输出信号。
L_beno 30 ,local侧字节使能输出信号,位定义及时序符合PCI规范。
L_cmdo30,local侧命令输出信号,位定义及时序符合PCI规范。
Lt_rdyn,local侧目标设备准备好信号(target ready),对pci_t32是输入信号。
Lt_discn,local侧目标设备通过置低该信号请求pci_t32向PCI 侧主设备发出断开连接信号(disconnect request),对pci_t32是输入信号。
Lt_abortn,local侧目标设备通过置低该信号来请求pci_t32向PCI 侧主设备发出放弃操作信号,对pci_t32是输入信号。
Lt_irqn,local侧目标设备中断请求信号,对pci_t32是输入信号。
Lt_framen,PCI主设备通过pci_t32读写local侧目标设备时,pci_t32置低该信号(输出信号).
Lt_ackn,当为目标写操作时,PCI_t32置低该信号(输出信号),表示数据有效;当为目标读操作时,PCI_t32置低该信号(输出信号),表示已准备好读数。
Lt_dxfrn,输出信号,表示local 目标设备数据传输成功。
Lt_tsr 11 0,输出信号,控制local目标设备状态寄存器。
Cmd_reg 5 0,配置命令寄存器输出信号。Bit0,I/O操作使能;bit1,Memory操作使能;bit2,保留;bit3,memory写无效使能;bit4,奇偶校验出错响应使能;bit5,系统出错响应使能。
Stat_reg 5 0 ,配置状态寄存器输出信号。
- 用双端口RAM实现与PCI总线接口的数据通讯(05-06)
- 基于PCI总线和DSP芯片的图像处理平台的硬件设计(07-06)
- 基于DSP和PCI总线的通用数字信号处理系统(11-13)
- 一种基于PCI总线和DSP技术的虚拟仪器设计(03-16)
- 基于Linux平台的天气雷达高速数据采集系统设计(03-13)
- 基于DSP与PC机的PCI总线高速数据传输 (07-08)