pci总线是高速同步总线,采用高度综合优化的总线结构,目前广泛应用于各种计算机系统中,总线以32位(或64位)数据总线、33mhz(或66mhz)的时钟频率操作,具有很高的数据传输速率。
目前开发pci接口大体有两种方案,一种是采用专用的pci接口芯片,实现完整的pci主控模块和目标模块接口功能,将复杂的pci总线接口转换为相对简单的用户接口。采用这种方案,用户只要设计转换后的总线接口即可,其优点是缩短了开发周期,缺点是用户可能只用到pci接口的部分功能,因此而造成逻辑资源浪费,缺乏灵活性。一种是使用可编程器件,采用fpga进行pci接口设计,这样可以依据插卡功能进行最优化。这种方案设计灵活,不必实现所有 pci功能,节约系统的逻辑资源。
本文所述设计方案是采用xilinx公司的virtex2系列xc2v6000芯片来实现pci主/从设备接口控制器。通过pci总线使得计算机上的视频码流传送到解码器中。对fpga的设计全部采用verilog hdl语言作为设计输入,并且为解码部分功能的实现预留了足够的空间。
系统结构设计
为了对视频流进行解码,需要快速而大量的数据传输。本设计简述了一种通过pci总线通信的解决方案。通过host主机对目标设备的控制,实验板即可以做目标设备,也可以做主设备。图1是本设计的系统框图。
在默认情况下,实验板目标设备处于工作状态为主设备为空闲状态,主控host通过i/o方式进行寄存器的读写控制操作。当需要传输大量数据时, host通过写i/o方式通过实验板申请pci总线的使用权,pci总线申请成功后,实验板主设备开始工作,通过dma方式与主控host进行通信。
pci总线配置空间的实现
当实验板的目标设备工作时,需要对其配置空间进行配置。pci总线定义了3种物理地址空间:存储器地址空间、i/o地址空间和配置地址空间。前两者是普通的计算机系统地址空间,而配置空间是pci所特有的。根据pci总线规范[1],所有的pci设备都必须提供配置空间。pci总线仲裁器首先访问一个目标设备的配置空间,以确定总线上存在的设备,主机host才能继续对这个目标设备进行其他类型的访问,如内存访问、i/o访问。配置空间是长度为 256字节并且有特定记录结构或模型的地址空间,可以在系统自举时访问,也可在其他时间访问。配置空间访问时,对配置空间读令名为“1010”;对配置空间写命令为“1011”。依据pci规范[1],可设定配置空间中的各寄存器值如下:
供应商id:9918h;设备id:2003h;修订id:01h,分类代码:078000h。这是一个非标准pci设备,所以任意使用了一个保留值。
命令字:0001h。表示只支持i/o读写控制。
基地址寄存器:目标设备只用到一个基地址寄存器,在此基础上实现多个寄存器,定义控制寄存器地址为:基地址+2ch;数据传输寄存器地址为:基地址+18h。
其他没有用到的配置寄存器在读时全返回0。