>
首页 » 技术文章 » MIPS系统中北桥的FPGA设计

MIPS系统中北桥的FPGA设计

作者:武杰 乔崇 张俊杰 杜学峰 唐世悦 张万生 王砚方  时间:2006-12-04 22:37  来源:电子设计信息网-www.edires.net
摘要:本文介绍了一个用FPGA开发的用于MIPS系统的北桥设计,主要包括北桥的结构框架、设计思想和技术特点等内容,并结合同类型的国外产品进行了性能上的比较和测试,得出的结论是此设计的大部分指标均达到或超过同类产品.

关键词:MIPS;北桥;Wishbone总线;总线仲裁

1简介

随着“龙芯”等拥有完全自主产权CPU的诞生,我国结束了无“芯”的历史.但这还不够,因为要构成一个完整的拥有自主产权的计算机系统,还必须有操作系统,芯片组和主板等技术的支持.操作系统可以从一些Open Source的系统(如Linux等)进行移植,主板的设计技术已经被国内一些大的企业和研究院所掌握,也不成问题.但是对于系统的芯片组这一块,目前投入的力量还不大,是一个急需开发的领域.我们正是本着这个目的开发设计了用于MIPS系统的北桥——芯片组的关键组成部分.南北桥这个称呼由来已久,比较开始强调的时期应该是Pentium时代,其实就是人们按照不同的应用特点把各种用途的控制器集成到主板上两枚不同的芯片中.接近CPU的那一个被称为北桥芯片,主要负责系统存储器、CPU以及PCI总线间地数据交换;另一个一般集成有IDE控制器、DMA控制器、USB和其它各种速度相对较慢的I/O控制器,这个芯片被称为南桥.南桥和北桥随着不同公司在不同年代的推出,其内部包含的功能也会有所变化,但基本上快速数据设备之间的数据交换都是由北桥负责,南桥虽然在功能上并不比北桥少,但因它大都和慢速设备打交道,所以从对系统整体性能的影响上来讲,北桥的作用显得更为重要些.

2 北桥整体框架

北桥设计的目的是为了配合“龙芯II”的使用,“龙芯II”与MIPS-IV(64bits)系列CPU兼容,所以我们的北桥也可以和其它公司的同类型CPU配合使用.在本设计中,北桥的主要功能包括MIPS CPU接口、SDRAM控制器接口、PCI总线控制接口、DMA控制器、局部I/O总线接口、内部总线仲裁、PCI总线仲裁、北桥寄存器和系统中断控制等部分.北桥内部结构按照上述接口分成九个相对比较独立的模块,其中CPU接口、PCI从设备接口1和DMA接口作为主设备可以发起内部总线操作,而SDRAM控制器、PCI主设备接口、局部总线和寄存器等部分作为从设备只能被动接收总线命令.

图1给出了北桥的内部结构框架示意图.CPU接口负责北桥和MIPS CPU的通信,它们之间通过SYSAD总线进行数据传递.SYSAD是MIPS CPU常用的一种接口总线,在我们的设计中数据总线宽度为64位,地址总线宽度为32位(可扩展至36位).北桥的PCI接口为32位,总线时钟33MHz,符合PCI2.2的规范.北桥可以作为PCI总线的控制器,并且在内部提供PCI的总线仲裁控制器,包括自己在内一共支持7个PCI设备.系统的SDRAM接口符合Intel的SDRAM2规范,支持两个标准DIMM存储器插条,最大支持容量为2GB字节.在系统上电复位的时候北桥通过I2C总线读取内存条上的SPD(SelfSerial Presence Detect)信息并根据其中的内容对SDRAM进行自动配置.北桥的局部I/O总线主要是提供对一些慢速设备的简单I/O访问,如存放BIOS的FLASH ROM和指示系统运行状态的ASCIILED显示灯等.虽然北桥的主要对象是高速数据设备,但这个接口是必须的,因为只有通过它系统才能完成初始化过程,然后才是其它高速数据设备总线的运行.

图1 MIPS北桥内部结构示意图

3 北桥的技术特点

3.1 Wishbone总线协议
对于这样一个比较复杂的系统,采用分模块的设计是必须的,它不可能由一个人来单独完成,所以必须采取先分模块设计,再整体合成的方法.这样带来的好处是显然的,它可以使多个模块并行开发,大大加快系统的开发速度,但同时也带来一个不能回避的问题,那就是要在设计之初制定一个用于系统内部模块之间互联的数据传递协议.这个协议的制定非常重要,一旦确定后所有的设计都在此基础上独立的展开,各模块之间数据传递的可靠性以及传输效率都由所采取的协议决定,如果在后来的整体调试过程中才发现当初制定的协议存在错误或者不完备,那么它带来的后果是所有的模块必须全部返工.

解决这个问题有两种方案,一是开发自己的总线协议,另一个是采取目前已经成熟的适用于SoC内部互联的总线协议.协议完全由自己开发虽然在总线的传输效率上可能会比较高,能够很好的适应自己的系统,但周期比较长,而且如果考虑不周全,以后升级扩展将变得很困难.对于成熟的SoC总线,有很多选择,许多大公司如IBM、ARM、Motorola等都有自己的总线协议,不过这些都需要公司授权才能使用,不适合开发拥有自主产权的产品.所以我们采用了两者结合的办法,既在现有成熟的总线基础上作适当修改形成适应自己系统的总线.

在这里要介绍的是Silicore公司的Wishbone总线协议,它是一种完全开放的适用于SoC内部IP模块互联的总线协议,用户可免费使用并且还可以对其进行修改.Wishbone采用一种单一的总线方式,支持多主设备和多从设备、8-64+的数据宽度和64位的地址寻址、单字和块传输模式、读修改写指令周期及其它各种常见的总线工作方式,并且还提供了用户扩展功能.Wishbone协议开发的目的就是为了用于芯片内部的总线互联,所以它的很多特点都针对了芯片内部连线和逻辑资源丰富的特性,使得模块与模块之间的连接设计起来非常简单.我们在Wishbone的基础上加以修改形成了适用于北桥的总线协议,修改后的单字读写时序如图2所示.

图2 单字的读写时序

当主设备发起写操作时首先将CYC-I置高,表示一个数据周期的开始,同时给出STB-I告诉从设备准备进行数据操作(WE-I=1代表写操作),从设备在时钟上升沿2检测到STB-I信号有效并且为写数据周期于是就根据主设备给出的ADR-I地址把数据DAT-I写入相应存储空间,SEL-I则表示当前给出数据的那一个字节有效.同样当主设备发起读操作时(时钟3)也是先给出CYC-I和STB-I信号.在时钟沿4从设备检测到主设备的STB-I信号并且为读周期(WE-I=0),如果这个时候数据还没有准备好就可以保持ACK-O无效从而使主设备插入一个等待周期.在时钟沿5主设备收到ACK-O信号,知道从设备已将数据准备好,于是读入DAT-O,完成读周期.

上面描述的是Wishbone总线的单字操作情况,因为Wishbone协议没有采用数据地址复用总线,所以对于数据的块传输和单字方式没有本质区别,只要主设备和从设备同时保持STB-I、ACK-O有效,并且主设备在每个时钟周期都给出下一个地址,那么就可以在做到一个时钟完成一个数据传递,达到系统时钟的最高利用率.由此可见,Wishbone协议不仅考虑了高速设备之间的高速数据通道而且提供了握手信号兼顾慢速设备的数据传递,非常适合像北桥这样多个异速总线之间的相互连接.

3.2 crossbar方式内部互联
北桥性能好坏的一个关键指标就是它能否提供高带宽的数据传输通道.为了达到高的数据带宽必须采用高性能的总线拓扑结构.总线的拓扑结构大致可以分成四种连接方式:点对点连接(Point-to-point)、数据流方式(Data flow)、共享总线方式(Shared bus)和交叉互连方式(crossbar switch).在北桥的设计中我们采用了路由器中常用的数据传输效率最高的crossbar方式(图1)来进行各个模块之间的数据传递.采用这种方式的好处是能够在内部达到最大的数据传输率,多个主从模块之间可以并发的进行数据交换而互不影响.例如当CPU在进行运算的时候,大部分被访问设备都是SDRAM,这个时候如果发起一个PCI到PCI的DMA操作便可以和CPU通道同时进行而不被打断.

3.3 系统仲裁机制
尽管采用了crossbar作内部的数据交换方式,多个主设备仍有可能会在同一时间访问同一个从设备,这个时候就需要系统做出仲裁.对于多主设备的总线仲裁,一般采用的方法有串行的菊花链和并行仲裁两种.串行仲裁虽然连线比较少,但走线延迟较大,不适合在高速系统中使用.在我们的北桥设计中采用了集中式并行仲裁的方法,并且根据北桥的特点设计了一套自己的仲裁算法,它既可以针对不同设备设置不同的优先级而且还可以实现优先级循环调度保证不会发生设备被“饿死”的情况.

这个算法可以说是一种带优先权的roundrobin方式,它主要解决一个问题就是北桥内部的“不公平”竞争,既实现北桥内部的三个主设备“CPU接口、PCI从设备接口和DMA控制器”对系统总线资源的“不公平”使用:CPU是系统的核心部件应该首先保障;PCI因为其本身时钟较慢数据率不高,特权级别排在第二;DMA部分会大量占用资源,严重影响CPU程序的执行,所以把它的优先权设为最低.针对以上特点,我们采用了两个4bits移位寄存器来实现总线使用权的分配.具体实现方法如图3所示。

图3 仲裁器结构

在图3中,两个移位寄存器被分成两级分别表示高优先级(CPU接口)和低优先级设备(PCI和DMA),每个寄存器根据不同需要赋予不同的初值(在我们的设计中初值均为“1110”).设备仲裁得胜得与否根据相应寄存器的最低位判断,如果为“1”表示仲裁得胜取得总线使用权,否则继续等待下一次仲裁.在仲裁事件发生时,挂接在级别较高寄存器上的设备具有较高的优先权,只有它仲裁失败(最低位为“0”)才会轮到下级设备继续仲裁.每发生一次仲裁事件,仲裁得胜设备所对应的移位寄存器进行一次循环移位,下一次仲裁按移位后的寄存器值进行.按照图3给出的初值不难看出,当三个设备都进行总线申请时它们得到仲裁权的比为CPU:PCI:DMA=12:3:1.实际上三个设备的总线申请是随机的,我们假设三个设备出现的总线申请是等几率的,那么三个设备出现的总线申请状态就有2×2×2=8种(每种状态出现的几率相等,都为1/8).如果不同设备在各状态下取得总线使用权的几率用Pxi表示,则各个设备在所有情况下对系统资源的占用就可用得出.

表1中给出了各种总线申请情况下设备取得总线权的几率大小,“1”代表该设备有总线申请,“0”表示没有申请.从表1可以得出CPU、PCI和DMA对总线资源的占用时间比为52:35:25.


上述仲裁逻辑在我们的所采用的FPGA(XCV400e26)中时钟频率可以达到200MHz,而资源仅占用非常少(300门左右),完全满足绝大部分总线仲裁的需要.虽然这个算法建立在三个主设备的模型之上,但是对于多主设备的总线只要适当地增加移位寄存器级数就可以实现.而且只需简单改变寄存器的长度和初值就可以得到不同的设备总线资源占用比,非常方便.

4 北桥性能测试

北桥的性能是与Algorithmics公司(该公司已被MIPS公司收购)2000年推出的一款功能类似的北桥芯片bonito64作对比测试给出的.测试主要是针对北桥的访存性能和PCI总线速度.两个芯片的测试环境完全相同:硬件平台是同一块测试板,CPU为IDT的RC64575,南桥是Intel的82371EB;软件环境均为RedHat7.1for MIPS,测试软件为hdparmV3.9和xbench0.2.其中hdparm主要用来测试硬盘的速度,在我们的测试系统中硬盘挂在Intel的南桥芯片上,而南桥又通过PCI总线和北桥相连,所以对硬盘速度的测试就是对PCI总线速度的测试.xbench是在Xwindows下对显卡的测试,它反映的是系统数据处理能力的综合能力(包括访存和PCI6速度).图4、图5和表2给出了几个具体的测试对比数据.经对比后我们的设计除了在运行时钟上略低于bonito64外(83MHz/100MHz),其它各项指标均超过bonito64或与之持衡.



图4 hdparm测试结果(硬盘缓冲区测试)


图5 hdparm测试结果(非缓冲晚测试)

5 结 论

本文的北桥逻辑设计采用Verilog语言编写,整体可以放在一块Xilinx的Vertex400EFPGA中,资源占用85%,总体上相当于26.5万门左右.目前系统的运行时钟能稳定在83MHz(PCI为33MHz).可以说北桥的FPGA阶段已经完成,如果根据这个设计再作ASIC开发的话,有理由相信它可以取代国外的同类产品从而使计算机系统的国产化迈出新的一步.

相关推荐

单片机应用技术综述

单片机  总线  2011-06-28

硬件可靠性测试设计分析

可靠性  Buffer  总线  2011-03-28

LaCie发布24英寸高色泽IPS平板显示器

2010-09-25

PCIe 3.0基本规范11月完成

PCI  总线  2010-09-19

Bus/总线布线时如何做到等长

Bus  总线  等长  2010-06-09

PCI9030及其PCI总线接口电路设计

PXI  总线  PCI9030  2010-04-15
在线研讨会
焦点