原创 【转】利用FPGA实现PCI接口技术研究

2010-11-20 09:54 1295 6 6 分类: FPGA/CPLD

摘要:介绍了状态机与PCI总线接口控制器的设计方法,探讨了如何利用VHDL语言在可编程器件FPGA 中实现基本传输控制的PCI总线控制器。测试结果表明设计符合PCI规范的时序要求。


    PCI总线是目前应用最广泛的总线,它满足了用户对数据传输速率越来越高的要求。PCI局部总线是微型计算机中处理器/存储器与外围控制部件、扩展卡之间的互连接口。PCI总线规范是互连机构的协议,以及电气和机械配置的规范,它可以在33MHz主频32位数据通路的条件下达到峰值132Mbit/s的带宽,在66 MHz主频和64位数据通路的条件下达528 Mbit/s,这样的数据带宽突破了原有ISA,VME等总线的瓶颈,并且支持多总线主控和线性突发(burst)模式传送,使其成为微型计算机事实上的总线标准,并在嵌入式计算机和工业控制计算机方面具有广泛的应用前景。


1 用VHDL 实现PCI时序控制
    在PCI总线的控制信号的控制下PCI总线上一般有3种交易:I/O读写、内存读写和配置寄存器(configuration register)读写,这3种交易一般都只
能进行单数据传输,也就是每次交易只传输一个数据(一个双字、字或字节),而对于内存读写则可以完成突发交易(burst transaction)。突发交易可以在每次交易中传输一批数据,这时每个时钟都可以传输一个数据。在突发传输模式下的传输带宽可以达到PCI总线的理论最高带宽。一般发起交易(传输)的设备为主设备(initiator),交易(传输)的对象,也是传输的响应者为目标设备(target)。通常主设备得到总线所有权后发起交易,而目标设备确认自己为交易的对象后响应交易,从而配合主设备完成所有数据的传输。
    PCI总线接口相对其它总线接口来说是比较复杂的,它不但有着严格的同步时序要求,而且为了实现即插即用和自动配置,PCI接口还必须有许多配置寄存器。为了实现PCI总线各控制信号间的时序关系,可以根据具体的交易设计相应的状态机。
    以目标设备I/O写为例:当帧有效信号(FRAME#)为有效(低电平)时,读传输开始,C/BE#[3:0]为“0011”,表明此交易为I/O写,同时AD[31:0]上的数据为此次交易的I/O地址。如果此I/O地址与我们设备配置寄存器中I/O基地址寄存器(base address register)的值相同,我们的目标设备就要通过使DESEL#有效来声明这次交易 作为主设备在有效FRAME#、I/O地址和C/BE#后,就在AD[31:0]上驱动要传输的数据,在C/BE#上驱动字节使能、同时使能目标准备好信号IRDY#,直到检测到目标设备有效的DRDY#信号后,此次交易中的主设备和目标设备就停止驱动各种信号。而目标没备在准备好接收数据后就可以使能DRDY#,此后目标设备检测到IRDY#时,就可以根据具体的字节使能C/BE#[3:0],将AD[31:0]总线上的数据进行锁存,从而完成整个交易。此交易的状态机如图1所示。
 
图1 目标设备I/O 写状态机
    下面是描写状态机的核心源程序,采用VHDL语言描述。
if state=idle_state
and pci_frame='0'
and pci_ad(31 downto 4) =pci_bar0;--pci_bar0为I/O基地址寄存器
and pci_c_be="0011" --I/O读写命令
then stated <= device_selected;
elsif state= device_selected --在此可以插入一个等待周期,以准备接收数据
then stated <= target_ready;
elsif state= target_ready
and pei_irdy= '0'
then stated <= idle_state;
end if;
    在此状态机的各种状态下,使能相应地控制信号,利用该有限状态机可以完成配置寄存器、存储器,从而完成整个目标设备I/O写交易。对于其它交易的状态图,根据具体的时序关系可以很容易在此基础上实现。


2 测试结果
    为了实现和验证PCI控制逻辑,我们选用了Xilinx 公 司 的 Virtex 系 列 FPGA:XCV400HQ240。由于Virtex系列FPGA的管脚电气特性与PCI规范中的要求相兼容,所以设计者只要考虑能不能满足PCI的时序要求和时间要求就可以了。另外由于FPGA 中各种可编程资源丰富,可以很方便地实现配合PCI传输所需的FIFO,双口RAM等,从而大大提高了总线控制的灵活性,同时也提高了整体性能。
    上述器件中,实现PCI主/目标设备的配置寄存器读写、I/O读写、内存读写都相对简单,并且在Windows操作系统下的调试也相对简单。在调试过程中,采录的目标设备I/O单数据读写时序图的控制信号时序在示波器上的截图如图2,图3所示。
 
    从测试波形来看,完全符合PCI规范要求的时序。
    在实际应用过程中,我们实现了一个PCI总线控制逻辑,并且在自制的雷达信号处理卡上得到了应用,其中实现的功能包括:配置空间读写、目标设备I/O读写和主设备DMA控制。在包括了一些供仿真的信号和32 bit宽深度为16的FIFO的情况下,总共所用的资源为429个SLICE(FPGA 内可编程宏单元)。实际调试中,DMA传输的稳定传输速度已能达到33 MHz,32 Bit的最高带宽132 MB/s,完全满足应用要求。
    如果使用PCI的IP CORE(xi1inx公司的为专用器件(逻辑)设计的软件包,有些为免费的,PCI CORE不免费),实现PCI标准接口控制逻辑所用
资源为400 SLICE左右。由此可见,自己设计的逻辑所耗的资源与专用的逻辑不会相差太大,甚至可以更少,而其灵活性是显而易见的。


3 结束语
    PCI总线以其优异的特性解决了外设和主机之间数据传输的瓶颈问题,因此在当前对总线带宽要求越来越高的情况下,PCI总线将得到更加广泛的应用。如果掌握了PCI总线控制逻辑的实现,就可在大规模可编程器件中发挥其方便、灵活和快捷的特长。这样既可以避免专用芯片或IP CORE的灵活性低、不方便的缺点,又可以节省印制版空问、可编程资源,从而降低系统成本。并且可以很方便地移植到其它可编程器件上,具有较强的实用价值。如果具体辅助逻辑(如FIFO,双口RAM)的设计可以和驱动程序的设计结合起来,将使驱动程序和硬件设备很好的结合,一方面可以提高逻辑设计和驱动程序设计的灵活性,又可以提高资源的利用率和系统的整体性能。


文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条