欢迎您访问长沙鹏翔电子科技有限公司官方网站

技术与应用

PCIE高速声发射仪/千兆网络声发射仪

技术与应用

基于FPGA的PCI总线控制器设计

发布日期:2015-06-12 08:35    浏览次数:

 王海滨, 刘朝军

(国防科技大学ART 实验室,湖南长沙410073)
摘 要:介绍一种基于Xilinx公司XCS30XL 的FPGA 进行PCI 总线控制器的设计,并说明了PCI 总线的特征和架构以及PCI 板卡的硬件设计,还讨论了基于Verilog 的PCI 控制器软件设计与接口时序,并给出了仿真结果,通过仿真结果可以看出该Verilog 设计符合设计要求.
关键词:FPGA ;PCI 控制器;Verilog
中图分类号:TP336   文献标识码:A
PCI总线在雷达信号、图像处理中均有广泛地应用,但由于PCI 接口协议比较复杂,过去的设计大多数采用专用集成芯片进行接口设计,比如采用AMCC 公司的S5933、PLX 公司的PCI9052 进行设计,这些芯片不仅价格较高而且占用很大的板上空间,给硬件设计带来不便.然而基于FPGA 的PCI 总线控制器可以将总线控制逻辑和用户逻辑共同存储在一块FPGA 内部,这种方法可根据不同应用进行适当的调整,方便灵活.
1 PCI 总线及其接口介绍
1.1 PCI 总线的接口信号
PCI(peripheral component interconnect)总线也称为局部总线,有PCI V1.0 和V2.X 规范,它定义了32 位数据总线且可扩展为64 位.PCI V1.0 支持33MHz工作频率,最大传输速率为132Mb/s ;而V2.X 工作在66MHz 时,其传输速率为264Mb/s或532Mb/s,远远大于ISA 总线5Mbyte/s的速率.
PCI 有着严格的同步时序要求,而且为了实现即插即用和自动配置,PCI  接口还有许多的配置寄存器.根据用户的设备性质不同,PCI 设备分为MASTER主设备和TARGET 从设备,因此PCI  接口也就分为MASTER和TARGET[1] 2 种接口,主控设备可以控制总线驱动地址、数据和控制信号;目标设备不能启动总线操作,只能依赖于主控设备从其中读取或向其传送数据.
图1 给出了PCI 总线的接口信号图,左侧是必须使用的引脚信号,右侧是可选择的引脚信号.如果作为目标的设备,至少需要47 条信号线;若作为主设备则至少需要49 条信号线.图中信号后面具有“#”标志的,表示该信号是低电平有效;信号没有“#”表示信号高电平有效.
1.2 PCI 总线的设备的配置空间
要进行基于FPGA 的PCI 总线控制器的设计,应该掌握大致的PCI 配置空间,这样才能够在软件中加以实现.PCI 总线定义了3种物理地址空间,分别是存储器地址空间、I/O 地址空间和配置地址空间.配置空间是PCI  所特有的一种空间,其目的在于提供一套适当的配置措施,使之满足现行的和可预见的系统配置机构.配置空间是一长度为256字节并且有特定记录结构的地址空间,可以在系统自举时访问,也可在其他时间访问.限于篇幅,本文不对此进行详细介绍.见参考文献[1].
2 PCI 板卡硬件设计
这部分不是本文的重点,但是在设计过程中有几个地方值得注意,笔者就几个容易引起问题的地方进行说明.此系统是使用XILINX公司SPARTAN2系列的XCS30XL进行设计的,XCS30XL的资源足够设计一
个完整的总线控制器,它有30000个逻辑门,576 个CLB,用户I/O 有192个,片内RAM 有18432BIT,性价比很高[2] .在应用XCS30XL进行PCI 板卡设计的时候要注意以下几个问题.这当然不是XCS30XL本身的要求,而是PCI  信号形式必须要求这样才能满足系统的要求,假如采用专用PCI 控制芯片,也需要考虑这方面的问题.
2.1 PCI 电源要求
典型条件下,从连接器根部到VCC/GND 层的引线孔之间的最大走线长度限制在6.35 mm(0.25 in)以下,线宽不得小于0.51 mm(0.02 in)[3] .在标有“ +V(I/O)”的引脚上面应该用平均容量为0.047 μF 的电容将它耦合到地.另外,每个VCC管脚必须有退耦电容,且容量平均值应该小于0.01 μF.
2.2 特殊信号线的走线长度
在32 位板卡上面,所有接口信号的最大走线长度为38.1mm(1.5in);板卡上面的时钟CLK 信号走线长度必须为(63.5 ±2.5) mm(2.5 ±0.1in),而且只能连接到一个负载上面(注:这一点非常重要,否则将会导致板卡不能正常工作).
2.3 增加合适的测试点
在调试程序时,板卡要插在PC机的主板上面,因此想观察波形很不方便.根据笔者的经验,应尽量将几根有助于判断系统是否正常工作的信号线引为测试点,就可以方便地观测.
3 控制器的内核设计与接口信号
3.1 设计的控制器的特点
●支持33 MHz 和后向时钟;
●支持32 位总线和后向接口;
●支持2种空间:存储器地址空间和I/O 地址空间(配置可以在FPGA 内部实现);
●支持单周期突发读写模式;
●本设计是TARGET 接口;
●不支持扩展ROM, 自测试(BIST).
3.2 PCI 控制器构成
以下对PCI 控制器简称PCI 32_top,32_top 对外接口有2 大部分构成,分别为:PCI  Bus InterfaceBus和Back Endinterface,对外接口信号如图2所示.
1)混合逻辑模块:主要包括PCI  地址寄存器,CBE 寄存器和IDSEL 寄存器;
2)多路配置模块:此模块主要实现PCI 目标配置寄存器和PCI  数据输出的多路选择,它控制着什么时候数据写入到配置寄存器和在读期间什么数据输出到数据总线上(PCI _DAT_OUT);
3)基地址检验模块:有2 个功能:第1,用来控制只写寄存器Reg10h 通过基址0,寄存器Reg14h通过基址1;第2,用来在基址0 和1 处来解码并且声明一个信号来通知PCI  目标设备状态机;
4)状态机:这部分设计是控制器的核心设计,它控制着总线时序和数据在PCI  bus 和backendbus的交换;当释放总线时,状态机有可能从the indlestate(空闲状态)过渡到其他3 个状态,PCI _CBE_L和PCI _IDSEL决定是配置读或者配置写,存储器-I/O 读或者存储器-I/O  写操作.在配置ReadWrite 周期时,PCI  目标设备只是对某些特定的配置传输起反应,程序设计时只对类型00 处理(PCI _AD[1:0] =00b)和功能0(PCI _AD[10:8] =000b)起作用;在配置期间,地址位PCI _AD[7:2]决定哪种配置的双字被访问;而PCI _CBE_L[3:0]的值决定是一个读操作还是一个写操作.
5)奇偶校验模块:奇偶在配置空间或者寄存器I/O  读周期时生成,在地址段后的一个时钟,PCI _PAR 稳定并且有效.对于数据段,在写数据传送中,PCI _PAR 在PCI _IRDY_L 有效后一个时钟稳定并且有效;而在读数据传送中,PCI _PAR 在PCI _TRDY_L有效后一个时钟稳定并且有效;一旦PCI _PAR 有效后,它必须保持有效直到当前数据段完成后一个时钟,在地址段和写数据段,PCI  总线主控设备驱动PCI _PAR;在读数据段,PCI  目标设备驱动PCI _PAR.6)重新计数模块:如果一个目标设备接受一个读或者写操作,那么必须在16个时钟周期提供或者接受数据并且通过DEV_SEL 信号来选择,如果目标设备接受了操作,但是后向设备没有声明READY_L 在12 个时钟周期,那么目标设备将要重新开始;状态机的设计是PCI32_top 的核心部分,由于在实际工程运用当中不一定总是用到PCI 协议描述的那么多种状态,笔者下面给出简化的状态图,如图3 所示.
4 PCI 32_top 的读写操作验证
PCI  规范中定义了2种读写操作,即Memory和I/O 的读写.PCI 32_top 的读写操作包括:32位的Memory单周期读写、Memoryburst读写、I/O 单周期读写以及ConfigurationRead/Write(配置读/写).本文只分析32位配置读时序,其它模式的读写时序大同小异,此略.以下波形图均是门级仿真,使用工具为Model Technology`s Model SIMSimulator.PCI 32_top 的配置读操作时序如图4 所示.
5 结束语
根据PCI 总线协议对上图进行分析,符合PCI总线时序关系,完成了配置读操作,对于其他几种操作,分析方法相同,在设计过程中PCI32_top 的实现用了274 个宏单元,只用了XCS30XL的42%资源,因此完全可以再将用户逻辑也写入到XCS30XL 里面,从而达到一块FPGA 实现用户逻辑和PCI 控制器的双重任务,这不但减少了成本,降低了硬件设计难度,同时由于Veerilog语言的灵活性,也可以对PCI32_top 进行适当的修改,已达到不同的应用目的,总之这种方法值得推广并在工程实践中加以利用.