>
首页 » 技术文章 » AHB-PCI桥的设计及其验证方法

AHB-PCI桥的设计及其验证方法

作者:王晨旭 桑胜田 王进祥 喻明艳 叶以正  时间:2006-12-04 22:50  来源:电子设计信息网-www.edires.net
摘要:本文首先简要介绍了AMBA总线和PCI总线的协议特点,并在此基础上详述了AHB-PCI桥的功能及其设计思路,文章最后是关于AHB-PCI桥的一种验证方案。本设计采用TSMC 0.25μm CMOS工艺进行逻辑综合,总电路规模约为35230门。目前本设计已嵌入到SoC设计中并通过了FPGA原型验证。

关键词:SoC;AMBA总线;片上总线;AHB总线;PCI总线;桥

1 引言

随着集成电路制造和设计技术的迅速发展,集成电路设计已经进入到片上系统(SoC)时代。SoC设计的关键问题之一是片上总线的采用,采取适当的片上总线可以使IP核移植、设计复用变得容易。在已设计完成的SoC芯片Lilac中,我们采取了由ARM公司提出的AMBA Rev2.0片上总线结构。

20世纪90年代初Intel公司提出的PCI总线是一种高性能32/64位局部总线,它在促进了多媒体技术发展的同时,由于其高性能性、自动配置性等众多优点而很快成为工业界的标准总线。为了扩展SoC芯片的性能,建立PCI总线与片上系统总线之间的桥接就显得比较重要。本文所阐述的AHB-PCI桥旨在建立片外标准PCI设备与片上AHB总线的一个通路,使AHB总线和PCI总线之间的跨总线访问成为可能。

2 AMBA和PCI总线协议概述及比较

2.1 AMBA和PCI总线协议概述
AMBA Rev2.0规范包含两级总线:AHB系统总线和APB外围总线。AHB总线采用地址/数据分离的流水式操作,支持固定长/不定长猝发(burst)传送、分裂(split)事务处理特性和多个主设备的总线管理,具有高时钟频率、高带宽、高性能特性,适合于嵌入式处理器与高性能外围设备、片内存储器及接口功能单元的连接。图1给出了一个基本的AHB传送操作。

图1 基本的AHB传送

作为片上二级总线,APB外围总线通过APB桥与AHB系统总线相连。与AHB总线相比,APB总线协议要简单很多,它适合于挂接一些速度要求不太高的外围设备。采用APB总线有助于降低系统功耗和接口设计的复杂性。图2表示的是由AHB启动的一个基本APB读传送。

图2 基本的APB读传送

PCI总线协议比较复杂,它是一种具有猝发传送、同步操作、自动配置和资源锁定等功能的高性能局部总线。它不受制于处理器且同时支持多组外设,为CPU及高速外设提供一道桥梁。图3是PCI总线上的读猝发操作示意图。

图3 基本的PCI读传送

2.2 AMBA和PCI总线协议比较
PCI和AMBA从根本上就是两种不同的总线标准。它们从设计初衷到设计实现都有很大的不同,下面列出的这些比较点仅仅是在设计AHB-PCI桥中做协议转换时首先涉及到的。

(1)PCI总线是一种三态总线,而AMBA总线是一种非三态总线,它采用的是多路选通方式。

(2)AMBA总线的地址和数据总线是分立的,AHB总线上对数据的传输采取了流水式操作,即当前数据段对应的是下一个数据段的地址;PCI总线上的数据和地址是复用的,通常,一个PCI事务是在地址段给出地址,其后在第一个数据段给出此地址的数据,后继的数据段依次为下一个字地址的数据。复用的数据和地址总线很大程度上节约了标准PCI设备的管脚,同时也节省了一些带有PCI总线接口的SoC芯片的管脚。

(3)对数据传送宽度、字节使能及数据对齐格式的支持方式不同。APB总线协议只支持字传送事务,而AHB总线和PCI总线则分别依靠HSIZE[2:0]和C/BE[3:0]的控制对数据传送宽度有着不同程度的支持。其中,AHB总线支持双字以上的读/写事务,而PCI不支持;PCI总线对字以下读/写事务的支持比AHB更灵活,PCI支持三字节读/写事务(例如,当C/BE=1000时)和不连续字节(例如,当C/BE=1010时)的读/写事务,而AHB只支持单字节读/写事务和半字读/写事务并且还要满足地址对齐规则。还有,PCI总线上对数据采用的是小端对齐模式(little endian)而AHB总线却可以根据系统的要求来选择大端对齐模式(big endian)或小端对齐模式。

(4)PCI只支持按字寻址的单个或者猝发读/写事务(即便是一个单字节读/写事务),而AHB则对字节和半字寻址均支持。

(5)PCI总线上只支持不定长猝发一种猝发方式,这种猝发方式类似于AHB总线上的INCR猝发方式。而AHB总线上却支持更多的猝发方式,其中包括定长和不定长猝发模式,例如,打包型(wrap)猝发是AHB总线上所特有的一种猝发方式。

(6)PCI总线和AHB总线上的地址译码方式不同。AHB采取的是集中译码方式,在AHB总线上有一个中央译码器,由其产生各从设备的片选信号HSELX;而PCI采取的是独立译码方式,每一个PCI从设备都有一个独立的译码器,每次PCI总线事务,所有PCI从设备都会参加译码,但最终只有一个PCI从设备有效DEVSEL#。

3 AHB-PCI桥的功能及其拓扑结构

图4是AHB-PCI桥在SoC中的位置示意图。在图4所示的系统中,作为AHB总线和PCI总线之间的唯一通路,AHB-PCI桥为AHB(或PCI)总线上的主设备访问PCI(或AHB)总线上的从设备提供了可能。

图4 AHB-PCI桥在系统中的位置

从AHB-PCI桥所处的位置来考虑,它至少应该具备有如下两点功能:

(1)如前节所述,AHB总线协议和PCI总线协议存在很大不同,因此AHB-PCI桥的首要功能应该是协议转换。对于一个AHB主设备访问PCI从设备的事务,该桥应该能接受来自AHB主设备的满足AHB总线协议的地址和事务控制信号并经协议转换后在PCI总线上启动一个符合PCI总线协议的PCI从设备能识别的事务。

(2)AHB-PCI桥的另外一个重要功能是对来自总线“对面”设备的数据进行缓冲。AHB总线和PCI总线是频率不同的总线,而且在两者协议当中都要求总线上不能插入太多的等待状态。如果不进行数据缓冲,则势必会影响二者的带宽尤其是系统总线的带宽。

根据AHB-PCI桥的上述功能,它应该既是AHB总线的主设备又是AHB总线的从设备;同时,它也应该既是PCI总线的主设备又是PCI总线的从设备。因此,为了分别处理来自于AHB和PCI总线的事务,AHB-PCI桥应该具备如图5所示的拓扑结构。

图5 AHB-PCI桥的拓扑结构

图中虚线部分是AHB-PCI桥的顶层。它由协议模块I和协议模块II两个协议模块构成。当某AHB主设备(例如片上处理器)启动一个最终访问目标为某PCI从设备的事务时,协议模块I负责事务的协议转换和数据缓冲并在PCI总线上启动一个适当的事务。而当某PCI主设备启动一个最终访问目标为某AHB从设备(例如片上存储器控制器)的事务时,协议模块II负责事务的协议转换和数据缓冲并在AHB总线上启动一个适当的事务。

4 AHB-PCI桥的设计与实现

将图5所示AHB-PCI桥中的协议模块I和协议模块II进行细分并综合考虑一些别的因素可以得到图6所示的模块结构。与图5相比,图6增加了一条APB总线结构。由于APB总线是一种低功耗、接口设计相对简单的总线,所以为了增强本设计的实用性并降低接口设计的复杂性,在图6所示的结构中将所有模块的控制和状态寄存器均映射在APB总线上一个APB从设备地址范围内。因此,此处的桥从严格意义上来讲应该叫做AMBA-PCI桥,但考虑到该桥的主要目的是在AHB总线和PCI总线之间传送数据,故在此还是把它叫做AHB-PCI桥。从总线协议上分,HB-PCI桥可以分成两层接口,图中双点划线上方是AMBA接口,它完全符合AMBA协议;双点划线下方是PCI接口,它主要包括PCI主从设备状态机和数据收发FIFO,此外它还应包括PCI配置寄存器。

图6 AHB-PCI桥的模块结构实现

4.1 协议模块I
正如第3节所述,协议模块I负责将某AHB主设备(例如片上处理器)启动的一个最终访问目标为某PCI从设备的事务转换成符合PCI总线协议的事务并在PCI总线上启动。相对于图5,图6的协议模块I在AHB总线和PCI总线之间有两条通路,也就是说AHB总线事务可以通过两种方式激活PCI主设备来启动PCI总线上的事务:直接访问方式和DMA方式。

4.1.1 直接访问方式
由直接访问接口和PCI主设备构成的硬件逻辑形成了AHB主设备访问某PCI从设备的直接访问方式。直接访问接口负责对AHB事务进行协议转换。

在本设计中,直接访问接口对地址的转换采用了直达法,即它对来自于AHB总线的地址基本不做改动而将AHB地址总线上出现的字节地址直接转化为PCI总线上的字地址,可用公式表示这种转化。直接访问接口将根据AHB总线上的HWRITE信号结合不同的地址空间以形成PCI总线上的命令信息;并综合考虑AHB总线上的HSIZE[2:0]和HADDR[1:0]来决定此次PCI总线事务的字节使能信息C/BE[3:0]。

PCI总线协议要求PCI主设备在启动一个总线事务之前应提前知道这次事务需要传送的数据数量。因此,直接访问接口有责任在AHB事务发生之后根据AHB总线上的猝发模式HBURST[2:0]决定本次事务要在PCI总线上传送的数据段数量。

直接访问方式的简化工作过程如下:
(1)AHB主设备读PCI从设备 ①AHB总线上的某个主设备启动读事务,AHB仲裁器用HSEL信号选定AHB-PCI桥,表明此事务的最终寻址目标位于桥另一侧的PCI总线上而非AHB总线上别的从设备。②直接访问接口接受并翻译此事务。它将翻译后的事务信息提供给桥内PCI主设备以激活此PCI主设备。由于读事务所要求的第一个数据不可能在AHB总线所规定的周期内完成,因此直接访问接口会在传递信息给PCI主设备的同时向发起事务的AHB主设备发出重试反应。③桥内PCI主设备申请总线并准备启动PCI总线上的读事务。当它获得PCI总线仲裁器的授权后,开始启动此PCI读事务,并把读来的数据置于主设备接收FIFO(MRCV FIFO)中。④事务启动方AHB主设备在收到直接访问接口的重试反应后,它会用同样的地址和控制信号重试此次事务直到MRCV FIFO非空,进而完成本次事务处理。

(2)AHB主设备写PCI从设备AHB主设备启动的写事务相对读事务来说要简单一些,它与读事务最大的区别是写事务由于协议模块I内的主设备发送FIFO(MXMT FIFO)的存在而在AHB总线上立即完成,也就是说AHB周期先于PCI周期完成。①与读事务相似,AHB总线上的某个主设备启动写事务。②此写事务由于MXMT FIFO的存在而在AHB总线上立即进行,直接访问接口接收数据并将数据置于MXMT FIFO中。③直接访问接口在接收事务的同时,翻译此事务并向桥内PCI主设备提供启动PCI写事务所必需的地址、命令、控制信息。④桥内PCI主设备根据这些信息启动PCI写事务,并将MXMT FIFO中接收到的数据写至PCI从设备,直至此事务完成。

4.1.2 DMA方式
直接访问方式有一定的不足:如果CPU要从某PCI从设备读取一个大的数据块并通过存储器控制器写至主存,那么CPU要在读PCI从设备和写主存的工作中花费大量的时间(包括一些无用的等待时间),这样势必会影响CPU乃至整个系统的效率。为了弥补这种不足,可以在协议模块I中加入一个DMA接口,这个加入的DMA接口作为AHB总线的主设备有些类似于传统意义上的DMA控制器。为了完成DMA方式的操作,必须在DMA接口中设置一些支持这种访问方式的命令、状态和中断寄存器,这些寄存器可以通过APB总线进行访问,并控制着整个DMA事务的启动或者进行状态。在每次启动DMA事务之前,CPU都要通过APB总线对DMA模块进行软件编程。整个DMA访问方式的简化工作过程如下:

①CPU将此次事务的PCI总线上的起始地址写至DMA接口中的dma_pci_start_address寄存器中。
②CPU再将此次事务需要传送的字的数量以及要在PCI总线上要使用的命令(此时PCI总线上只允许出现存储器读/写命令)分别写至DMA接口中的dma_word_count和dma_pci_command寄存器中。dma_pci_command中的内容决定了此次DMA传送的数据流方向,其中存储器读命令意味着数据要从某PCI从设备读出并写至存储器中,而存储器写命令意味着数据要从存储器读出并写至PCI某PCI从设备中。
③之后,DMA接口会激活桥内PCI主设备。此PCI主设备申请PCI总线的使用权,并根据dma_pci_start_address、dma_word_count和dma_pci_command这三个寄存器中的内容准备在PCI总线上启动一个存储器读/写事务。
④当CPU获悉桥内PCI主设备已经接受了此次事务,它会将此次事务的主存起始地址编程至DMA模块中的dma_mem_start_address寄存器。
⑤DMA模块根据寄存器dma_pci_start_address和dma_word_count中的内容来决定它将要在AHB总线上所启动事务的猝发类型和读/写类型,并使用dma_mem_start_address中的地址来启动这次事务。
⑥如果在PCI总线上发生的是存储器读事务,则桥内PCI主设备会把从目标PCI设备读来的数据置于MRCV FIFO中,然后由DMA模块将这些读来的数据送至主存;对于PCI总线上的存储器写事务来说,MXMT FIFO负责接收DMA接口从主存读来的数据,并通过桥内PCI主设备将其发送至目标PCI设备。
⑦当DMA接口已经把由dma_word_count所指定数量的字传送完毕时,它会将内部的dma_finish中断状态寄存器置为1,并向中断控制器发出中断。因此,在启动DMA方式访问之前CPU应负责将DMA接口中的DMA中断使能寄存器dma_finish_int_en置1。
⑧CPU收到中断并清除中断。DMA传送完毕。当系统需要在主存和某PCI从设备之间传送比较大的数据块时,采用这种方式能将CPU从传送数据这种简单劳动中解放出来,为CPU处理数据节省了大量的时间,故而提高了整个系统的效率。但是也必须注意到,对DMA模块进行编程要花费一定的CPU周期,因此如果要传送的数据量比较少时也采取这种DMA方式来完成数据传送的话,有可能出现真正用于传输数据的时间比编程时间还要短;而且DMA方式只支持PCI总线上的字读/写事务,对于要在PCI总线上执行单字节、两字节或者三字节读/写事务的情况,DMA接口就显得有些无能为力了,所有这些都是采取这种DMA传送方式的弊端。因此,当传送数据量较少时最好还是采取直接访问方式来激活PCI主设备。当需要在PCI总线上启动一个单字节、两字节或者三字节读/写事务时,直接访问方式应该是唯一的选择。

直接访问方式和DMA方式是互相排斥的,二者不能同时使用。DMA接口缺省状态为空闲状态(IDLE_ST),当CPU发生APB写至DMA接口中的dma_pci_start_address寄存器时,DMA接口进入锁定状态(LOCK_ST),此后,任何请求直接访问的AHB事务都将被直接访问接口以重试结束。直接访问只有当DMA接口处于空闲状态(即是DMA接口中没有悬而未决的事务)时才有可能发生。直接访问方式和DMA方式之间的转换通过状态机来控制。

4.2 协议模块II
协议模块II负责翻译来自于PCI总线的事务,并在AHB总线上启动一个符合AHB总线协议的事务。它是协议模块I中直接访问方式的逆过程,工作过程与直接访问方式非常相似,在此不再详述。在协议模块II的设计中,难点之一是如何对来自于PCI总线上的地址进行转换并发往AHB总线。为此,可在协议模块II中设置两个可以经由APB总线编程的寄存器mem_page和io_page,这两个寄存器分别对应于PCI总线上的存储器读/写和IO读/写事务,而且它们的有效宽度分别相应于桥内PCI配置寄存器中存储器基地址寄存器(mem_bar)和IO基地址寄存器(io_bar)的可编程宽度。以mem_bar为例,本设计为AHB-PCI桥提供了25位(即32M)PCI存储器地址空间,即mem_bar的高7位是可编程的,因此mem_page的有效宽度应该在硬件上实现为7位。图7给出了协议模块II在做协议转换时的地址产生过程。

图7 地址产生过程

4.3 APB从设备
图6所示的桥结构存在一个根据APB协议开发的APB从设备,AHB-PCI桥中所有的控制和状态寄存器均映射在此APB从设备的地址范围之内。对AHB-PCI桥中所有控制和状态寄存器的访问也即是对此APB从设备的访问。

4.4 配置寄存器访问
AHB-PCI桥既是PCI主设备又是PCI从设备,因此在AHB-PCI桥中应该具备有像标准PCI设备那样的配置空间。上电复位后,启动程序要利用这部分配置空间来完成AHB-PCI桥中PCI接口的配置。AHB-PCI桥有一个Mode控制输入,当Mode=1时这部分配置寄存器空间映射在图6中的APB从设备地址范围内,片上处理器通过启动APB周期访问这部分空间并完成PCI接口的配置;而当Mode=0时这部分配置寄存器空间映射在PCI总线地址范围内,片外处理器通过启动PCI总线上的配置周期访问这部分空间以完成PCI接口的配置。值得注意的是,当Mode=0时,由于APB总线只支持字读/写事务,为了能对这部分配置空间中某一或某几个字节进行访问,必须在APB接口地址范围内设置一个字节使能(cfg_byte_enable)寄存器。

5 AHB-PCI桥的验证方案

对AHB-PCI桥中各模块设计、调试完成后,面临的将是AHB-PCI桥在系统中的验证。在验证中,利用现有的硬件资源将两个Lilac芯片(Lilac1和Lilac2)的PCIPads对接起来,用CPU指令集作为测试向量完成对AHB-PCI桥的验证,见图8所示。

图8 AHB-PCI桥的测试平台

这里假设Lilac1作为PCI总线的主设备(Mode=1)而且仅仅用到Lilac2(作为PCI总线的从设备功能(Mode=0)。图中有三条验证通路分别对应着PCI总线上三种不同的事务:以Lilac1中的CPU和协议模块I、Lilac2中的协议模块II以及存储器控制器和SRAM构成验证通路I,它可以用来验证Lilac1中的CPU发起的PCI总线上的存储器事务;以Lilac1中的CPU和协议模块I、Lilac2中的协议模块II以及AHB/APB桥和片上寄存器构成验证通路II,它可以用来验证Lilac1中的CPU发起的PCI总线上的IO事务;以Lilac1中的CPU和协议模块I、Lilac2中的PCI配置寄存器模块构成验证通路III,它可以用来验证Lilac1中的CPU发起的PCI总线上的配置事务。

很明显,Lilac1重点验证了协议模块I,而Lilac2重点验证的是协议模块II和PCI总线上的配置事务。Lilac1中AHB-PCI桥的PCI配置寄存器的配置过程及其验证过程可以通过由Lilac1中的CPU、APB桥、APB从设备接口和PCI配置寄存器区构成的第四条通路来完成。于是以PCI总线事务为基准,在提取AHB-PCI桥的各测试点之后分别为这些测试点编写C测试程序,然后由Lilac1中的CPU运行这些测试程序并逐一验证各测试点。上述验证方法是一种基于指令集的验证方法。采用这种方法进行验证虽不像基于总线功能模型(Bus Function Model,BFM)的验证方法那么严谨,但它却不失为一种简单、易行的验证方式。

6 结束语

本文在分析AMBA和PCI总线协议的基础上给出了一种AHB-PCI桥的设计和验证方案。本设计已经嵌入到Lilac设计中并通过了系统仿真验证及FPGA原型验证。目前,Lilac已经采用TSMC 0.25um CMOS工艺进行投片。

相关推荐

SoC验证走出实验室良机已到

SoC  ICE  2014-01-17

蓝牙整合无线充电方案领舞穿戴式产品

SoC  Bluetooth  2013-12-31

Xilinx授予TSMC最佳供应商奖

Xilinx  SoC  2013-08-28

多核竞争已过时 “处理技术”将成新战场

SoC  处理技术  2013-08-26

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

Semico:28nm SoC开发成本较40nm攀升1倍

28nm  SoC  2013-06-25
在线研讨会
焦点