接口/总线/驱动
自PCI协议问世以来,PCI总线应用越来越广泛,现已成为事实上的计算机总线标准。随着PCI应用和开发的深入,往往需要在复杂的PCI系统中使用PCI桥来完成设计工作,包括使用主/PCI桥来完成整个系统的初始化配置过程。PCI桥的使用已从传统的PC机领域拓展到更多的电子应用系统中。
1、PCI主桥简介
在复杂的PCI系统中,往往拥有不只一条PCI总线。为了提高PCI系统的负载能力,可用PCI-PCI桥把各条PCI总线连接起来,同时在处理器总线与PCI总线之间使用主/PCI桥来完成总线转换,以形成完整的PCI系统。常用的PCI系统结构如图1所示。
系统上电时,主CPU(处理器)对PCI目标设备的初始化也称为配置访问。由于PCI目标设备所定义的配置空间通常不在CPU的存储器和I/O空间中,所以需要一种特殊的机制来执行配置访问。这种机制通常由主/PCI桥来完成。配置软件在上电后能够扫描PCI总线,以确定现有哪些PCI设备,并根据它们的配置要求分别进行配置。配置完成后,各个PCI目标设备就可以在PCI总线控制器的协调仲裁下正常工作。
在PC兼容系统中,主/PCI桥也称为北桥,用于连接主处理器总线和基础PCI局部总线(第一级PCI总线)。北桥芯片内通常集成有主存储器控制器,因此处理速度很快。南桥芯片内一般集成有IDE控制器、USB和其它速度较慢的I/O控制器,因此处理速度相对较慢。南北桥构成芯片组。
2、Wishbone片上总线技术
片上系统SOC(System-On-Chip)技术近两年发展迅速,越来越多的厂商开始开发自己的IP核,然后提供给系统集成者。而各厂商采用自己定义的IP核接口规范来开发产品,使得系统集成成为一个棘手的问题。为了提供IP核的可重用性,实现众多厂商IP核的有效互连,片上总线OCB(On-Chip-Bus)技术就应运而生了。目前在SOC领域较有影响的三种片上总线标准为:IBM公司的Core-connect、ARM公司的AMBA和SilicoreCorp公司的Wishbone总线。其中Wishbone总线已经被全球最大的开放IP组织(Opencores)列为主要支持的SOC内部互连总线协议。遵循Wishbone总线协议的IP核可以很快有效地集成到SOC中。目前,Opencores上很多开放的IP核接口都采用Wishbone总线设计。而且越来越多的IP核商用厂商也宣布支持Wish-bone总线协议。
Wishbone总线最大的特点是结构简单灵活,需要逻辑门少;同时完全免费、完全公开。Wishbone规范支持完整的普通数据传输协议,包括单个读写周期、块传输等。数据总线宽度为8~64位(宽度仍然可以扩展),地址总线可以达到64位;最快时一个时钟周期就可进行一次数据传输;支持握手协议,速率可以调整;支持出错重试等。在Wishbone总线规范中,可使用Master/Slave结构实现非常灵活的系统设计。Master和Slave有四种互连方式,分别为:点对点、数据流、共享总线和交叉互连。其中点对点方式是连接一个Master和一个Slave最简单的方式,使用起来非常方便。图2给出了采用点对点互连方式的Wishbone主/从接口图。其中SYSCON为产生RST复位和CLK时钟信号的模块,TAGN为用户自定义信号。
Wishbone 在Master和Slave之间使用的握手协议如图3所示。当准备好传输数据时?Master使STB O信号有效,STB O状态将一直保持到Slave的结束信号ACK O、ERR O 或 RTY O?对Master而言是ACK I?ERR I和RTY I? 之一声明有效。Master在每一个CLK I的上升沿对结束信号采样?如果该信号有效?STB O信号变低。此外,Wishbone接口的两边都能够完全控制数据传送的速率。
3、PCI Bridge核
开放IP组织Opencores提供的PCI Bridge Core提供了Wishbone片上系统总线和PCI逻辑总线的接口。PCI Bridge Core由两个相对独立的单元组成:一个单元处理由PCI总线方启动的数据交易,另一个单元则处理由Wishbone总线方启动的交易。它是一个PCI总线和Wishbone总线之间真正的桥。
PCI 桥核支持32位PCI总线接口,并完全兼容PCI2.2协议(支持66MHz规范);它含有独立的主桥、从桥功能模块和完整的命令/状态寄存器;支持Wishbone SOC互连协议B版本(包括B1和B3);此外,它可通过Wishbone接口支持32位总线操作;并可配置片上FIFO。
3.1 PCI Bridge内部结构
PCI桥核由两个相对独立的单元模块组成:PCI目标单元和Wishbone从单元。每个单元自身都有一套完整的功能来支持Wishbone和PCI总线之间的交易。Wishbone从单元可作为PCI桥中Wish-bone侧的从设备和PCI侧的主设备启动交易;PCI目标单元则可作为PCI桥中PCI侧的目标设备和Wishbone侧的主设备启动交易。两个单元互相独立。PCI目标单元用于实现PCI总线从设备接口和Wishbone总线的主设备接口;而Wishbone从单元则用于实现Wishbone总线从接口和PCI总线的主设备接口。
图4是PCI桥核的内部结构。
3.2 PCI Bridge的操作
PCI桥核有两种应用方式:主、从桥(相对PCI总线而言)。作为从桥时,当PCI桥连到拥有PCI总线的主机系统上电后,主机系统软件将扫描PCI总线上连接的PCI总线设备(包括PCI桥),然后配置PCI桥空间寄存器,即由配置软件来完成PCI桥的初始化配置过程。之后,PCI桥进入正常工作状态。
PCI桥核作为主桥时,PCI桥完全控制PCI总线。PCI桥的Wishbone代理设备完全负责连接到PCI总线上的PCI设备的初始化配置过程。运行在Wishbone代理设备上的固件(设备无关软件)在上电后扫描PCI总线,以确定有哪些PCI设备,并分别有什么配置要求。然后在Wishbone映象0空间内配置各个PCI设备的配置空间。配置完成即可加载各个PCI设备的驱动程序。此时PCI设备也可以通过PCI桥的PCI目标单元访问Wishbone总线。
PCI桥的配置空间包括两个部分:一个部分为Wishbone从单元的配置、状态和控制寄存器;另一个部分为PCI目标单元的配置、状态和控制寄存器(包括PCI协议要求实现的256字节标准配置空间)。PCI桥通过相应的地址映像空间(PCI映像0和Wishbone映像0)来实现PCI桥两侧代理设备访问PCI桥的配置空间。作为从桥时,主机系统的主桥可以使用普通的存储器读写指令来访问PCI桥的配置空间,也可以通过配置读写指令来访问PCI桥配置空间的低256字节。作为主桥时,PCI桥本身就可以产生配置周期。如同PC机X86系统的主桥配置机制0一样,PCI桥的Wishbone代理主设备可以通过访问PCI桥配置空间的CNF_ADDR和CNF_DATA寄存器来产生配置读写命令,从而实现对其它PCI设备的上电初始化过程。
由于PCI桥核是一个软核,在PCI桥核中有一个参数头文件。可以通过更改PCI桥核头文件的参数来改变PCI桥的操作方式(如主桥或从桥设置、PCI或Wishbone映像空间的定义等),因而使用非常方便。
4、 使用PCI Bridge核来访问PCI设备
PCI桥作为从桥一般用在PCI扩展卡上(或称PCI周边卡),如数据采集,图像传输等。而作为主桥一般用在PCI总线的主控板上(或称PCI系统卡),但需要初始化PCI总线上的功能设备,并控制PCI总线的操作。
为了调试主/从桥的应用,笔者设计了三块电路板来协调控制PCI总线的操作。一块为FPGA板(Xilinx公司的Spartan II芯片,设计有PCI接口),一块为微控制器板(51单片机),一块为普通PCI扩展卡。
作为从桥时,只需要FPGA板就可以完成整个实验过程。即用Verilog语言实现一个Wishbone从接口,并连接到FPGA内部的BlockRAM上(可由ISE的CORE generator产生),然后选择PCI Bridge核的应用方式为GUEST(从桥方式),并连同自己的程序一起编译下载到FPGA的配置芯片上。这样,把FP-GA板插入PC机的PCI插槽,就可在PC机上开发驱动程序来访问FPGA板上的资源(如RAM等)。如果要进行数据采集,可以把Wishbone从接口连接到数据采集模块上。从桥实现的功能模块图如图5所示。
作为主桥时(选择PCI Bridge核的应用方式为HOST),由于FPGA板上没有微控制器,所以需要把FPGA板上的I/O口与51单片机电路板上的I/O扩展口连接起来一起形成PCI主控板。FPGA板和普通PCI扩展板都插到独立的PCI底板的PCI插槽上,然后在FPGA板上和单片机板上进行编程以实现对普通PCI扩展板的初始化配置和正常读写操作。其电路功能模块框图如图6所示。
由于单片机的接口是8位,读写时序也和PCI桥中的Wishbone时序不同,所以需要在PCI桥和单片机扩展I/O口之间用软件实现一个Wishbone主接口。该Wishbone主接口的工作过程为:单片机发出读操作时,先传送4次8位地址数据到FPGA中,再将由Wishbone主接口组成的32位地址存储在一个32位地址寄存器中,随后单片机发出读命令,以启动Wishbone主接口进行Wishbone总线的读时序,当Wishbone主接口把从PCI总线上读来的32位数据存放在一个32位读数据寄存器中后,单片机将分4次读出32位数据;单片机进行写操作如同读一样,依次传送32位地址和32位数据,最后发送写命令启动Wishbone主接口以进行Wishbone总线的写时序。Wishbone的读写时序可由Verilog语言描述的同步状态机实现。
在51单片机上用C语言编程实现主控板固件的完整软件过程为:上电后,固件先按顺序依次扫描PCI总线上存在的PCI设备,扫描的目的之一是为总线和设备编号。当扫描结束后,设备类型、拓扑位置等信息以设备为单位被存放在一个数据结构中,并按实际扫描的顺序组成一个链表。同时,设备的配置要求也依次存放在这个数据链表中。固件得到系统的设备拓扑图后,分别按照设备的配置要求一一进行配置,也就是分配地址资源给设备的基地址寄存器。配置完成后,各个PCI设备即可进入正常工作状态。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !