用于构建多核处理器的Crossbar的研究与设计
姓名:***申请学位级别:硕士专业:微电子学与固体电子学
指导教师:***
20090101
上海大学硕上学位论文摘要随着电子技术的发展,多核处理器(Multi.CoreProcessor,MCP)逐渐成为当今世界处理器发展的趋势。本文以Sun公司的OpenSPARC多核处理器的构建方式作为参考,分析了OpcnSPARCT2中用以连接8个SPARC核的CacheCrossbar的基本结构和基本功能,并在此基础上使用Verilog硬件描述语言设计了一个结构与功能相类似的Crossbar。本文所设计的Crossbar具有灵活性强和扩展性好的特点。在使用Verilog硬件描述语言进行描述时,采用了参数化的设计,使得Crossbar的接口具有可定制的数据位宽度,能灵活的适应不同种类的处理器核的连接,同时又能够根据需要方便的进行扩展。为了验证所设计的Crossbar的功能,本文还设计了一款参考MIPS32指令集的RISC处理器核和8块用于实现处理器之间数据通信的L2Cache。这个RISC处理器核采用了流水线的设计,实现了指令集中的部分指令,同时与Crossbar还有一个相应的数据接口。设计的L2Cache通过与Crossbar的数据接口,接收和发送相应的数据封包,从而实现了L2Cache内的数据共享,同时也达到了多个处理器核之间通信的目的。在文章的最后,使用本文所设计的Crossbar,RISC核和L2Cache构建了一个8个核的处理器,并在这个处理器上运行了一段使用MIPS公司的汇编编译器编译的程序,实现了一个简单的快速傅立叶变换。证明了本文所设计的Crossbar在构建多核处理器方面是切实可行的。本文中对Crossbar,L2Cache以及最后构建的多核处理器的仿真、综合等一些工作主要是在64位RedhatLinuxWS4的平台上使用Synopsys公司的EDA工具进行的。而本文的设计的RISC处理器核则是在Xilinx公司的ISE环境下,使用VirtexIIPro系列XC2VP30芯片进行综合的。关键词:多核OpenSPARCCrossbarMIPS流水线V上海大学硕士学位论文ABSTRACTWiththedevelopmentbecomeaofelectronictechnology,multi—coreprocessorshaveoftheprocessor.Sun’Smulti·coretrendoftheworld’SasdevelopmentaprocessorbasicOpenSPARCisusedbasicreferenceinthisthesis.WiththeanalysisofthewhichisinarchitechtureandT2andfunctionofthecachecrossbartheOpenSPARCdesignedlanguagetoconnecteightSPARCcores,thisthesisusesVeriloghardwaredescriptiontodesignacrossbarwhosestructureandfunctionisasimilar.Thecrossbarinthisthesisisparametricdesignedwithflexibilityandscalability.ItisdesignwhenusingVeriloghardwaredescriptionlanguagetodescribethedesign.Thistomakesthecrossbarinterfacehascustomizeddatawidth,andCanbeadaptconnecttodifferenttypesofprocessorneedsofdesign.coresflexibly.AndthecrossbarcanbeexpanedaccordingtotheInordertousesV嘶矽thefunctionofdesignedcrossbar,aRISCprocessorcorewhichaMIPS32instructionsetasreferenceandaL2cachewitheightbankswhichareusedforthedatacommunicationcoreoftheeightprocessorsusesdesignedinthisthesis.aTheRISCprocessorisadesignpipelinearchitecture,andrealizedanpartofinstructionsintheinstructionthecrossbar.TheL2set.TheRISCcorealsohasachievesthedatainterfaceinsideconnectingthecachewithandcachesharingcommunicationbetweenmulticoresinterfacewiththecrossbar.byreceivingandsendingdatapacketsusingtheAtthelastpartofthethesis,an8coresprocessorissetupwiththepreviousadesign,crossbar,L2compilerofcacheandRISCthiscore.AndprogramcompiledbytheassembleMIPSm璐onthemulti-coreprocessortorealizeanarithmeticofFFT.ThisprovesThedesignofthecrossbarisfeasible.simulationandsynthesisofthecrossbar,L2cacheandthemulti-coreprocessorinthisthesisareEDAtoolsofcompletedinRadhatLinuxoftheRISCWS4isplatformbyusingtheinXilinxISESynopsys.Thedesigncorefinisheddevelopmentenvironment,andimplementedonXC2VP30FPGAchipinVirtexIIProVl上海大学硕上学位论文SeneS.Keywords:Multi-Core,OpenSPARC,Crossbar,MIPS,PipelineVIl原创性声明本人声明:所呈交的论文是本人在导师指导下进行的研究工作。除了文中特别加以标注和致谢的地方外,论文中不包含其他人已发表或撰写过的研究成果。参与同一工作的其他同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。签名:日期:本论文使用授权说明本人完全了解上海大学有关保留、使用学位论文的规定,即:学校有权保留论文及送交论文复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容。(保密的论文在解密后应遵守此规定)签名:施名:夸幽吼边P之ofH上海大学硕士学位论文第1章绪论1.1研究的背景随着电子技术和信息技术的日益发展,计算机已成为我们同常生活中不可缺少的一部分,而其核心芯片——中央处理器,即CPU的性能是衡量计算机性能的一个重要指标【l】。研究如何提高处理器的性能既是当今微电子发展的一个热点,也是国家发展的需求【2】。在几年前,为了不断地提升处理器的性能,处理器还是在不断的往更高的频率方向发展,一些公司在它的Roadmap上也定义了4GHz的处理器的开发计划【3】。理论上说,处理器厂商可以不断地推出频率越来越快的单核的处理器,但是现在看来这种做法会越来越不可行。因为随着处理器频率的不断的提高,处理器的功耗也随之越来越大,为了能够使得处理器正常工作,超快单核处理器需要更强劲的散热系统,以保持其工作温度,这会迅速增加冷却系统的成本。甚至随着处理器核的频率的提高,很难找到降低其工作温度的冷却系统。但是用户对于处理器的性能的需求又是逐年的增加,为了满足用户对处理器性能的需求,同时又为了暂时的避开功耗和散热的难题,多核处理器的架构逐渐成为处理器厂商的必然选择,同时也为处理器厂商提供了一个能够在一定的功耗范围内提高性能的有效途径。如何有效的构建单芯片多处理器(SingleChipMulti.Processor,SCMP)是多核处理器发展的关键【11】【12】。就目前来说,各个处理器厂商都有自己构建多核处理器的方法,但是其主要思想还是通过共享存储器的方式实现数据的共享,进而实现处理器核之间的通信。Sun公司在2007年底将UltraSPARCT2多核处理器开源并将其命名为OpenSPARCT2t41。除了相应的代码,相关说明文档比较齐全,是本文研究多核处理器的构建方式的重要参考依据。上海人学硕士学位论文1.2研究的内容与意义在Sun公司的OpcnSPARC处理器中,CacheCrossbar的作用是用来连接多个SPARC核和L2Cache。本文从研究的角度,借鉴OpcnSPARC中的CacheCrossbar,在充分理解其结构和功能的基础上,使用Vcrilog硬件描述语言自行设计了一个能用于多处理器互连的Crossbar(为了便于区分,本文所设计的结构称为Crossbar,而Sun的OpcnSPARC中的结构称为CacheCrossbar)。为了增加通用性,本文中所设计的Crossbar具有相当的灵活性,可以通过更改Vcrilog代码中参数的方式使得所得到的设计可以用来连接任意种类的处理器核(需要定义通信协议)。同时为了验证Crossbar的功能和说明所设计的Crossbar能够连接其它类型的处理器核,实现多核的架构,本文通过参考MIPS32指令集,设计了一款简单的RISC处理器。使用这个处理器核构建了一款8个核的处理器,并在这款多核处理器上以运行程序的方式,对利用Crossbar构建的多核处理器给出直观的认识。近几年,世界上集成电路产业的发展非常迅速。但是,我国在这一领域与发达国家的差距相差较大。“十一五"期间,集成电路发展的重点将是提高电路设计水平,加快研制具有自主知识产权的芯片。其中处理器核心技术的掌握对于保障我国信息安全,提高信息产业的核心竞争力和效益更是具有重大意义。本文所设计的Crossbar能够灵活的连接任意类型的处理器核,构建一个多核的处理器。这为如何构建多核的处理器提供很好的参考价值。1.3论文的主要工作本次毕业论文所做的主要工作总结如下:(1)研究和分析了构建一个多核处理器的方法,结合毕业设计研究的需要,划分多核的处理器的各个模块,确定多核处理器的基本架构和实现策略。(2)参考了Sun公司发布的OpcnSPARC处理器中的CacheCrossbar的结构和功能,使用Vcrilog硬件描述语言,设计了一个类似结构和类2上海大学硕士学位论文似功能的Crossbar。该Crossbar的灵活性和扩展性比较强,可以根据实际应用的需要进行数据宽度的调整,能够与任意的处理器核相连接,实现多核的结构。0参考了MIPS公司的MIPS32指令集中的部分指令,使用Verilog硬件描述语言设计了一个功能简单的RISC型处理器核。该处理器核运行所需要的二进制代码是由SDE.1it中的汇编编译器编译相应的汇编代码生成的。H研究和分析了Cache的基本结构和原理,通过Verilog硬件描述语言设计了一个共8块的L2Cache。8块的L2Cache是用来完成8个处理器核之间数据交换的共享存储器。@分析快速傅立叶变换的基本原理,对于由8个核构建的多核处理器分配了相应的程序,使用汇编代码,实现了一个简单的快速傅立叶变换。验证了所设计的Crossbar在连接多个处理器核构建一个多核处理器的可行性。1.4论文的结构本次论文的结构安排如下:第一章主要介绍了本次毕业设计所选的题目以及对其进行研究的目的和意义,分析了目前世界上处理器的现状以及处理器的发展趋势,同时给出了本论文所做的主要工作以及整篇论文在篇幅结构上的安排。第二章首先对如何构建多核处理器也就是如何实现各个核之间的互连在结构上进行介绍,给出在这些结构之下相应的通信方式。同时给出当前的一些主流的多核处理器的结构。在本章的最后给出本次毕业论文使用Crossbar所构建的多核处理器的基本结构。第三章主要介绍本文中用于连接多个核处理器核的Crossbar的设计。由于具有类似结构和类似功能,本章以分析Sun公司服务器端的多核处理器OpenSPARCT2中CacheCrossbar的基本结构和基本功能来为主。在本章的最后,对所设计的Crossbar使用EDA工具进行相应的综合,仿真和形式验证工作。3上海大学硕士学位论文第四章对本次毕业论文所设计的多核处理器的核进行分析。分析的内容包括三个部分:(1)单个处理器核的基本架构;(2)处理器所采用的指令集和指令格式,以及在本次设计中所实现的指令的具体意义;(3)5级流水线的结构,并对各个流水线阶段内的处理器情况进行分析。同时分析设计中的流水线存在的冒险问题,并给出相应的解决方法。第五章会在分析存储器层次和Cache基本结构的基础上,介绍在本文中用于完成数据通信实现数据共享的L2Cache的基本结构。同时给出相应的仿真。第六章会使用第三、四、五章所设计的模块构建一个多核的处理器。为了测试多核处理器的工作状况,本章会在Linux平台下使用MIPS公司的编译器运行快速傅立叶变换,并对运行结果进行分析,证明设计的可行性。第七章对本次的毕业设计进行总结,分析设计中有待改进的地方,并对该课题的发展做出相应的展望。4上海大学硕士学位论文第2章构建多核处理器的方式本章从多核处理器的分类入手,简单介绍了构建多核处理器的方式以及核与核之间的通信方法,并给出一些公司的商用多核处理器的基本结构,最后说明本文中为了完成多个处理器核的连接采用Crossbar的结构进行互连的原因。2.1多核处理器的分类由于构成多核处理器的处理器核的种类在不同的时期是不同的,因此根据存储器的组织方式而不是处理器核的构成方式来区分多核处理器的种类更为合适。构建多核处理器的方式按照存储器的组织方式来区分,被分为两类【8】。第一类的多核处理器如图2.1所示,称为集中式共享存储器系统结构。在2006年这种系统结构的机器最多拥有几十个处理器(少于100个内核)。对于处理器数目较少的多核处理器,各个处理器可以共享单个集中式存储器。在使用大容量Cache的情况下,单一存储器(可能是多组)能够确保小数目处理器的存储访问得到及时响应。通过使用多个点对点的连接,或者通过交换机,再加上额外的存储器组,集中式共享存储器系统结构可以扩展到几十个处理器。图2—1集中式共享存储器系统结构5上海人学硕士学位论文集中式共享存储器系统结构的优点是由于只有单一存储器,访问存储器对于每个处理器核而言都是对等的,并且每个处理器核的访问时间相同,因此这种多核处理器系统也称为对称多处理器系统(SymmetricMulti.Processor,SMP),同时由于所有的处理器核访问存储器都有相同的时延,这种结构也被称为均匀存储访问(UniformMemoryAccess,UMA)系统。而这种结构的缺点是,虽然设计更大规模的集中式共享存储器的多核处理器在技术上是可行的,但是随着处理器数目的增多(大于100个内核),存储器为多个处理器提供的访问带宽会成为瓶颈。第二类的多核处理器如图2.2所示,这种多核处理器的存储器在物理上是分布的,每个处理器核都有自己独立的本地存储器。每个处理器核与其本地存储构成一个节点。这种结构称为分布式存储器系统结构。为了支持更多的处理器,存储器不能按照集中共享方式组织,而必须分布于各个处理器。这是为了避免存储器在为多个处理器提供所需要的带宽时将产生较长的时延。图2—2分布式存储器系统结构将存储器分布到各个节点上有两个主要的好处。第一,如果大部分的存储器访问是在节点内的本地存储器中进行的,这是增大存储器带宽比较经济的方法。第二,在访问本地的存储器的时候有较小的时延。在处理器变得越来越快,处理6上海人学硕士学位论文器对存储器带宽要求越来越高,处理器对存储器时延越来越低的情况下,这两个优点使得构建较少处理器的系统时颇具吸引力。分布式存储器系统的主要缺点是由于处理器不再共享集中存储器,处理器在访问非本地的存储器的时候,处理器之间的数据通信在某种程度上变得更加复杂,并且时延也更大。2.2多核处理器的通信要构建多核处理器,除了使用相应的结构,各个处理器之间还必须有进行数据交换的方式,即传递数据的方法,也就是多个处理器之间的通信。基于上一节所提到的结构,多核处理器之间的通信有两种方式【13】。第一种方式是通过共享的地址空间进行通信。如果采用了这种通信方式,那么不论是采用集中式共享存储器系统结构还是分布式共享存储器结构,都使用相同的地址空间进行寻址。只要有正确的权限,任何处理器都能通过引用地址的方式访问任意的一块存储器。也就是说,不同的处理器核中相同的物理地址指向存储器中的同一个位置。但是采用集中式和分布式的系统结构在访问时延上又是不同,原因在于分布式共享存储器的多核处理器在访问时间上的延迟取决于数据在存储器中的位置。与集中式共享存储器被称为UMA相对应,采用共享地址空间进行通信的分布式共享存储器被称为非均匀存储器访问(Non.UniformMemoryAccess,NUMA)。另外一种多核处理器采用的通信方式是采用处理器间传送消息而不是共享地址空间的方式。这种方式只用于分布式的共享存储器系统结构中。由于采用了非共享地址空间的方式,因此各个处理器所拥有的存储器都是私有的,也就是说,两个不同的处理器中相同的物理地址分别指向两个不同的存储器中的不同位置。并且私有的存储器不能被远程处理器通过地址寻址的方式进行访问。这种结构类似于多台计算机构成的计算机集群(Cluster)。在这种结构中各个处理器之间通过消息传递来完成数据通信。图2.3是对之前所述多核的构建方法以及通信方式的概括。7一卜海大学硕士学位论文2.3目前的一些多核处理器2.3.1Intel的Nehalem在2008年春季英特尔信息技术峰会(IntelDeveloperForum,IDF)上,Intel公司公布了代号为Nehalem的多核处理器的一些细节【1引。Nehalem的结构如图2-4所示。图2—4Nehalem的结构可以看到Intel采用的也是集中式共享存储器系统结构来构建整个多核的处理器。每个处理器核有自己私有的L1Cache和L2Cache。其中L1Cache被分为上海人学硕士学位论文两部分,指令缓存(I.Cache)和数据缓存(D.Cache)而L3Cache则作为共享的Cache供4个处理器核进行数据交换。在L3Cache的设计上,Intel采用了非独占(Inclusive)的结构,来提高系统的性能例。2.3.2IBM的Power6IBM公司在2007年的时候推出了基于Power6芯片的系统。Power6的芯片延续了Power5中的同时多线程(SimultaneousMulti.Threaded,SMT)和双核技术【3】【191。图2.5表示了Power6的基本结构。从图中可以看到芯片中包括了两个2路SMT的Power6核,两个4MB部互连结构,双内存控制器。L2Cache,片载的L3Cache控制器,SMP内图2—5Power6芯片的结构就单块Power6芯片来说它的结构属于集中式共享存储器系统结构,在Power6的芯片上的两个核分别有自己独立的L2Cache。而两个核之间的数据交换通过L3Cache控制器连接的片外共享的32ML3Cache进行。由于每块Power6芯片中有SMP内部互连结构,多个的Power6芯片可以构9上海大学硕上学位论文成一个多芯片的系统。如图2-6(a)所示,4个Power6芯片构成了一个Node,而8个Node又通过Node到Node的互连成为一个网络,如图2-6(b)所示。虽然并不是单芯片的多处理器,但是这个结构与之前提到的分布式共享存储器结构有点类似。}●—斗CombinedBusNode(a)Node(b)多Node构成的系统图2—6Power6系统的结构2.3.3Sun的UItraSPARCT2UltraSPARCT2是用于服务器端的多核处理器。在单个UltraSPARCT2芯片中集成了8个的SPARC处理器核,每个SPARC处理器核的一级缓存(L1Cache)由一个16KB的8路组相联的指令Cache和一个8KB的4路组相联的数据Cache组成。8个SPARC处理器核会通过一个CacheCrossbar来连接片上的4MB的16路组相联的二级缓存(L2Cache)。整个的L2Cache是被分成8块,用来给8个SPARC处理器核提供充足的带宽。图2.7是UltraSPARCT2处理器的基本结构图‘2们,从图中可以看到UltraSPARC是集中式共享存储器系统结构。利用CacheCrossbar来连接的L2Cache(共8块,包括了图中的所有的L2bank0和L2bankl)是片上的共享存储10上海大学硕上学位论文器。8个SPARC核通过CacheCrossbar来对共享的存储器进行访问。图2—7UItraSPARCT2的结构2.4使用Crossbar进行互连从前一节的分析,可以看到目前在单芯片上通过共享式存储器实现多个处理器核之间的数据共享是比较流行的方式。在Intcl,IBM和Sun公司的多核处理器中都存在有类似的共享存储器,这其中的主要原因是核的数目不是非常多。本次毕业设计也会选择这样的方式来实现一个多核心的处理器(连接的处理器核的数目也不是非常多)。在具体实现核与共享存储器的互连方式上,本文选择的是Sun的CacheCrossbar的结构。之所以选择采用Sun公司的结构是因为如下几点原因:(1)使用Crossbar进行互连的结构相较于使用总线进行互连的结构能够上海大学硕十学位论文有效地提高系统的带宽。(2)Sun公司的CacheCrossbar功能丰富,可重用性强。在设计完成后不但可以给SPARC核使用,只要遵循相应的规范,其他类型的处理器核也可以使用这个Crossbar构建多核的处理器。(3)2007年底,Sun将UltraSPARCT2进行开源,并称之为OpenSPARCT2。处理器的源代码可以从www.opensparc.net上进行下载,同时相应的文档比较也比较齐全。本次毕业论文中设计的构建多个处理器核的基本方式如图2.8所示。它通过一个Crosssbar实现8块L2Cache和8个处理器核的互连。Ll指令CacheLl指令CacheL1指令CacheL1指令CacheIIII陋哆卜理器核C@理器核elIlL1数据CacheL1数据CacheLl数据CacheB理器核CIL1数据Cache圆圈固…固图2—8论文中设计的实现多核互连的基本方式从图2.8中可以看到L2Cache被用来作为数据交换的共享存储器。而各个处理器核使用L1Cache作为自己私有的存储器。整个设计遵循的是集中式存储器系统结构的思想。Crossbar的作用是为处理器访问存储器提供较大的带宽。其基本的原理【22】如图2-9所示。图中由8条横向和8条纵向的连线构成的网状结构可以使得单个的处理器能够和任意一块L2Cache进行连接。每条交叉线中的黑点表示一个开关,需要控制逻辑来控制具体是哪一个核与L2Cache连接。12上海大学硕十学位论文L2CacheBank0L2CacheBanklL2CacheBank2L2CacheBark3L2CacheBaak4L2CacheBank5L2CacheBank6L2CacheBank7图2—9Crossbar的原理图图2-9是Crossbar原理上的结构,可以看到某一条纵向的连线上可以同时连接的核的数目只有一个。也就是说,如果有不同的处理器核需要同时访问同一块的L2Cache,则需要有相应的仲裁机制对不同处理器核的访问进行控制。在实际的处理器核中情况还会更加复杂,比如之前提到的Sun公司的OpenSPARC处理器,除了处理同时发生的处理器核的请求,还需要对处理器核所发出的请求进行区分,对不同的请求所采用的处理方法和先后次序也会有一定的区别。下一章将着重分析在本次毕业论文中所设计的Crossbar的基本结构和基本功能,以及其基本的时序。13上海大学硕上学位论文第3章Crossbar的设计通过第2章的分析,可以看到本论文所设计的Crossbar是以Sun公司的OpcnSPARC作为参考,在功能和结构上和OpcnSPARC中的CacheCrossbar相类似,因此本章会以介绍OpcnSPARC中CacheCrossbar的方式来对所设计的Crossbar的功能和结构进行分析。3.1OpenSPARC中CacheCrossbar的结构OpcnSPARC中的8个SPARC处理器核会通过一个CacheCrossbar来连接片上的4MB的16路组相联的二级缓存(L2Cache)【20】【241。从2.4节中可以看到Crossbar的基本原理是让处理器核能与不同的Cache块相连,进行数据的传递。因此Crossbar需要被设计成双向的。事实上由于在OpenSPARC中所有在CacheCrossbar中的数据交换只存在两个方向,整个CacheCrossbar被分成两个独立的部分,分别是处理器到缓存(这里指L2Cache)的Crossbar部分(ProcessortoCrossbar,PCX)和缓存到处理器的Crossbar部分(CachetoCacheProcessorCrossbar,CPX)。处理器会通过CacheCrossbar中的PCX部分向L2Cache发出数据请求,而L2Cache则会通过CacheCrossbar中的CPX部分向处理器发送返回的数据以及一些缺失或者命中的信息。在OpcnSPARC中PCX部分有8个来自于SPARC处理器内核的输入和9个输出(来自于8个L2Cache块和一个I/0bridge)。PCX的结构和CPX的结构除了输入输出端口的数量有差别之外其他的功能是类似的,因此以下段落会详细描述PCX的结构。整个PCX分为两部分,分别是仲裁器部分(arbiter)和数据通路片部分(datapathslice)。由于会有多个SPARC处理器核可能会同时请求相同的缓存块的内容,因此仲裁部分是必需的。仲裁部分首先会根据核所发出的请求的先后顺序发出确认信号到赢得仲裁的核,在这个过程中最先发出请求的核具有最高的优先级。在PCX中的仲裁部分有9个仲裁器,每个仲裁器都分别连接到8个SPARC处理器核,同时每个仲裁器连接了一个输出。这样的结构可以使得9个仲裁器能14上海大学硕士学位论文够独立和同时的进行仲裁。PCX中数据通路片也有9个。每个数据通路片连接到一个输出同时还连接了8个处理器核的数据封包发送端口。处理器核发送的数据封包包括地址、数据、控制信号和目的地编号等信息,L2Cache会根据数据封包的信息进行相应的操作。图3.1给出了CacheCrossbar的结构。图3—1CacheCrossbar的结构通过对OpenSPARC中CacheCrossbar的分析,可以看到需要使用Verilog硬件描述语言实现的部分主要有两个,即仲裁器(Arbiter)和数据通路片(DataPathSlice)。在设计完仲裁器和数据通路片两个模块之后,PCX和CPX就可以根据图3.1中的结构进行实现。以下几节将对仲裁器和数据通路片的设计进行说明。3.2仲裁器(Arbiter)的设计3.2.1仲裁器的功能仲裁器用来决定是哪个核赢得了对L2Cache的请求访问权。对于仲裁的需求,无论是PCX还是CPX都是相同的,因此在设计上,仲裁器是可以被设计成可重用的结构,以提供给CPX和PCX。上海大学硕十学位论文仲裁器的主要功能如下所述:(1)采用深度为2的FIFO存储来自于SPARC处理器核的传输请求。(2)越早发出的请求优先级越高。仲裁器会以请求发出的先后顺序来给各个处理器核发送访问L2Cache的确认信号。(3)对于不同的SPARC处理器核在同一时间发出的请求,仲裁器采取不偏向于任意一个核的方式进行处理,具体的实现方式会在仲裁器的结构中进行描述。(4)根据L2Cache块的输入信号,可以停止对SPARC处理器核发出确认信号。(5)如果请求FIFO满,则对SPARC处理器核发出停止发送请求信号。(6)可以以原子的方式处理两个缓存访问请求。(7)每个仲裁器可以独立的并且同时的处理仲裁。有必要对仲裁器的功能的进行一些解释。OpenSPARC的CacheCrossbar中的传输分为普通传输和原子传输。所谓的原子传输是指以原子的方式来处理这个传输,而原子的方式是指两个操作(比如:读/写操作)是连续的执行不被其它的操作打断。在CacheCrossbar中原子传输会连续传输两个数据封包,而普通传输只传输一个数据封包。深度为2的FIFO很好的满足了原子传输的需求。3.2.2仲裁器的时序仲裁器通过一个流水线来实现整个仲裁过程。流水线的基本周期包括三个,分别是PQ,PA和pX[201。具体的流水线基本周期如表3-1所示。除了三个基本周期,流水线还会有另外一些周期,具体取决于请求的类型。表3.1PQCacheCrossbar流水线的基本周期PAPXSPARC处理器核发出请求仲裁器进行仲裁发送确认信号给SPARC处理器核,并实现数据的多路选择SPARC处理器核如果要请求一个L2Cache块中的内容,就会在PQ周期向16上海人学硕上学位论文那个L2Cache块对应的PCX中的仲裁器发出一个请求。在发出请求之后的下一个周期,SPARC处理器核会发出相应的数据封包给CacheCrossbar(其实是给数据通路片)。而仲裁器会在PA周期对发出请求的SPARC处理器核进行仲裁,并在下个时钟周期(也就是PX周期)向赢得仲裁的SPARC处理器核发送确认信号。在PX周期仲裁器还会向L2Cache发送一个数据封包ready信号,以告诉L2Cache块,在下一个周期CacheCrossbar将要发送数据封包给L2Cache。PQ陬IPXP敝IP)c3I一厂]广]r]nr]|-删胞取饥lI、峨||~=一ll:l鞫i!}l等将熬筠l■ILi{ll婶^删删p。:pcx辫抽扣绷脚.州:i阐|幽i::l婶鼍雒dI伊1眦PxL—————L————J~训卜÷—卜聿互粒蚪r一’’’’’_’一一’一。lL———__上—___..L::l|:::wu阳群憎m_州Ir———Ir一一l———0———0——÷喊瑚咖螂枷郐∞硝卜—_÷——+—叫脚1×触卜—斗I——I—lPx2I(a)原子传输Po陬I以I1]广]nr]广]nr,pc口pc蕞r·qv日p嘻砖·p曲p甑聃■∞rl∞棚I,.。jk一厂飞I陬IIII、l/Ii弹臻JpcI}J静哪:}IiI{:i:::pcu幽盹脚附嘶博'Ir——4——一L——0———÷—_÷眠啪虬觚-印糊卜—上I—叶—<竺卜—一÷—呻图3—2(b)普通传输CacheCrossbar的操作时序17上海人学硕上学位论文整个CacheCrossbar操作的时序如图3—2所示。图(a)表示的是在CacheCrossbar中的原子传输,而图(b)则表示的是一个普通的传输。原子传输会以一个普通请求信号spcO_pcxreq_vld_pq[O]并11个原子请求信号spcO_pcx_atom_pq开始,而普通传输则只会给出一个普通请求信号。同时由于图(a)表示的是原子传输,在赢得仲裁后,发送给L2Cache的数据封包有两个,因此CacheCrossbar发给SPARC处理器核的确认信号pcxOcgrantps.。期周个两px持维会3.2.3仲裁器的结构图3—3仲裁器的结构仲裁器的整体结构如图3.3所示。所有的请求会首先被发送到输入寄存器(inputregister)。输入寄存器及其后面的电路包括FIFO,旁路选择器(bypassmux)和请求选择器(requestmux),它们一起构成了仲裁流水线的PA周期。这些电路除了用来实现对请求的缓存操作,由于采用了FIFO的机制,所有缓存的数据是按照先后次序存储的,也就达到了最先发出的请求会有最高的优先级的要求。如果仲裁器没有正在处理之前的请求,当前的请求会被直接发送到请求寄上海大学硕士学位论文存器(requestregister),而如果之前还有请求在仲裁器中进行处理,则当前的请求会被先存储到FIFO中。请求寄存器以及整个左半部分的电路构成了仲裁流水线的PX周期。左半部分电路中的升序优先编码器(ASCPE)和降序优先编码器(DESPE)实现了对同一时间发出的请求采取不偏向仲裁的功能。在仲裁结束后,一个相应的确认信号会发送给赢得仲裁的SPARC处理器核【251。3.3数据通路片(DataPathSlice)的结构每个L2Cache块都和一个数据通路片相连。每个数据通路片都用来控制数据封包的传输方向,使得数据封包可以从8个SPARC处理器核中的一个发往高速缓存块。数据通路片根据仲裁器发过来的确认信号来确定当前由哪一个核的数据封包发送给L2Cache块。图3—4数据通路片的结构19上海人学硕上学位论文事实上,数据通路片相当于一个M选l的多路选择器(这里M=8),它可以将来自于8个核的数据封包选出一个,发送到L2Cache。但是由于数据封包的长度可能会有100位以上,制造一个每路数据宽度为100位以上的,8选1的多路选择器在物理实现上来说比较困难。因此实际上数据通路片是由多个2选1和3选1的多路选择器实现的。这些选择器可以根据仲裁器的确认信号来选择传送自己的数据封包还是相邻的那个选择器的数据封包。数据通路片的具体结构如图3.4所示。每个数据通路片有8个mac(multi.accesscontroller),整个mac分为两部分,一部分是数据缓存,另一部分是数据的多路选择。而数据缓存实际上是一个FIFO,用来存储核发过来的数据封包。每个核在每个数据通路片上都有自己独立的数据缓存,这样所有的核的数据封包可以同时被存储下来。图3.5所示的是一个3选1的mac的结构图。它有三个数据封包的输入端口,分别来自于处理器核,左边相邻的mac和右边相邻的mac。对于2选1的多路选择器来说,它比3选1的mac要少一个相邻的mac端口,图3.5中以虚线示意。它只有两个数据封包的输入端口,分别来自于处理器核和相邻的mac(可以是左边或者右边的mac)。FromcoreFromneighboringmats图3—5一个3选1的mac结构在本文的设计中,在对数据通路片的设计上使用Vedlog硬件描述语言实现,同时出于可扩展的考虑。在Verilog代码上使用parameter的关键词来定义在数据上海人学硕上学位论文通路片上传递的数据封包的数据位宽度。实现的Verilog代码如下所示。首先是构建一个参数化的模块modulepcx_dps_mac(端口列表)7parameterPKT—SIZE=73;input[PKT_SIZE一1:0】src_data;output[PKT_SIZE一1:0】dataout_px_2;endmodule然后在调用这个模块的时候,可以以参数化的方式实例化这个模块。parameterPKT_SIZE=737pcx_dps_mac#(PKT_SIZE)mac0(端口列表)7通过这种方式,本文中所设计的数据通路片可以使用可变的数据宽度来传递数据。采用这样的设计原因是因为在OpenSPARC中CacheCrossbar是用来连接SPARC核的,使用其特定数据宽度来传递数据封包。本次毕业设计的任务是设计一个通用的连接多个处理器核的Crossbar,并不只是用来连接SPARC处理器核。由于不同功能的处理器核需要的功能不尽相同,所需要交换的数据宽度也不会相同,采用可变得数据宽度的设计可以使其它类型的处理器核灵活的与Crossbar接口。3.4数据封包(Packet)的格式在OpenSPARCT2中PCX和CPX的数据封包的长度有一百多位,这是因为OpenSPARCT2在设计上的复杂性决定(每个SPARC核都支持4个线程),而本文所设计的RISC核相对于OpenSPARC核比较简单,因此不需要这么多的字段来对一个Packet进行描述,所以这里的Packet的格式是本文自定义的。但是这并不影响Crossbar的应用,因为Crossbar并不关心自己所发送的内容是什么,也不知道自己发送的数据的意义。同时由于可以自定义Crossbar发送的数据封包的长度,这也增加了Crossbar应用的广泛性,其他类型的处理器核只要按照与2l上海大学硕士学位论文Crossbar的接口规范,并给出时序信号,也可以利用本文所设计的Crossbar来发送数据封包。下面会分析本文中所设计的PCX和CPX封包各个字段的意思。首先是PCX封包,其各个字段如表3.2所示。表3.2PktValidCpu_idRqtypAddressDataBits727l:6968:6463:3231:OPCX封包NO.l353232LoadVV00001VXStoreVV00010VV表3-2中一些符号的意义:VX有效。接受端需要进行处理无效。接受端可以忽略载入指令LoadStore存储指令PCX各个字段的意思如下有效位(VaUd)用来表示PCX包的有效性,如果所发出的包的这一位不是1,则会被认为是无效的包。处理器标识段(cPUID)共有3位,用来表明发送请求的处理器核。请求类型段(Rqtyp,RequestType)共有5位,通过编码的不同来表示所发送的PCX包的类型。处理地址段(TransactionAddress)共有32位,用来给出处理所要操作的地址。数据段(Data)当传输的是Store指令的数据时,这里存放的是数据。当进行传输的时Load指令时,这一段的数据没有意义。上海人学硕:t:学位论文CPX封包各个字段如表3-3所示表3.3CPX封包PktbitsNO.LoadStoreValid40lVVRtntyp39:3550000100010L2miss34lVVERR33:322VVData3l:O32VXCPX各个字段的意思如下有效位(VaⅡd)用来表示CPX包的有效性,如果所发出的包的这一位不是1,则会被认为是无效的包,会被处理器端舍弃。返回类型段(Rtntyp,ReturnType)共有5位,用来表示所返回的CPX包的类型二级缓存缺失位(L2miss)这一位用来表示二级缓存是否缺失。若L2eahce发生缺失,则这一位会被置1,从而将缺失信息报告给相应的处理器错误段(ERR)共有2位,用来表示在进行处理过程中的错误,其中第33位表示这个错误是无法纠正的,而第32位表示这个错误是可以纠正的。数据段(Data)对于Load指令这个段存有返回的数据。而对于Store指令,由于返回的是一个确认信号,所以这一字段没有意义。3.5Crossbar的综合与门级仿真整个的Crossbar采用Verilog硬件描述语言进行描述,并使用SMICO.139m的标准单元库在Synopsys公司的EDA工具DesignCompiler中进行逻辑综合。对整个Crossbar的约束代码如下。综合后的结果表明,Crossbar可以在400MHz的情况下运行。J№^}日,L学位论史set_operatingcenditionsWORSTset_wire_load_modeenclosedset_wire_load_model-namereferencearea100000·librarysmicl3_ss_lp08v-125csetall—in_ex_clk【remove_from_collection扣II—input】JoeLportselk]1set_ddving_cetl-lib—cellBUFHD8X·pinz·librarystoicl3sslp08v-125c¥all_in_ex_clksetmax_cap[expr【load_ofsmicl3一ss_lp08v一125c,BuFHD3x,A"set_load【expr1+¥max_cap]Jail_outputs】create_clock·period2.5-nameset_clock_latencymyclk【geLpodsclk】0_25[getclocksmyclk】1[get_clocksmycl叼clocksmyclk】set_clock_uncertainty-setup0set_clock_transition005[getset_donUouch_netwo咄[get_clocksmyclk】seLinput_delay125-max-clockmycfk¥all_Jn_ex_clkset_output_delay125-max-clockmyclk[all_outputs】set_fix_multiple-poLnets—buffer_constants综合后的report如图3-6所示。m…h_lno…clkfr,…d2e)clock……de≮&……red…‘Lta—v111~v,etupn………^estqf,"o“…toP【”q,…rec㈣I…0Ⅲ㈣w(1denlDC综合后的Reporl综台之后生成的Crossbar刚表文什用柬进行门级仿真。仿真的工作是在Synopsys公司的EDA工具VCS.MX中进行的。在testbench中使用¥sdfannotate系统函数酮入综合后生成的SDF文件进行反标。仿真的波形如同3—7所示。在800ns的时候某个处理器核发送了个jj:ir请求,而在接下柬的两个间期中,这个核会把原子请求中的两个数摒封包发送给Crossbar。在处理器核发送充数据封包后,相应的数据封包在1400ns被发给了L2Cache。需要注意的是在奉次仿真中数据通路片所采用的数摒宽度是130位。图3—7的仿真波形可以与幽3-2(a1L}l们时序进行对比,可以看到奉次设计很好的完成了预定的原子传输的功能。]—■●—■■—■■———西圈墨墨墨夏置置墨嬲曩■■曩嗣曩i霜露霜囊嗣r=—i』L12111』—————一一~———————!纠■Jh02B……≥日§i目《∞F·H-~‘}g—一aftp】!!一…“㈦n山瑚fjun№',目c“L一竺…”。一一1…‘…1…“■…—=一。。nmmmn㈣日,nwtn“电—t—¨s“}“}Ctz:n删J_川增qIu一一_‘“}n…1∞-Ⅱl一:m啪啪~.………”…………“’J“…1…”…!竺!唑…咖”哪””……。1引“:"0001…2}一{_;1…口——··==二=二jj扫—一一∑二FJ旨===================二==二====二=二====d”图37原子传输的仿真图IDo∞on∞s船∞u2∞uooo』口∞目舞。图38普通传输的仿真图j.≈^{ml¥Ⅱ论Z图3-8表示的是Crossbar在进行普通传输时候的仿真波形。可以看到处理器核的请求之后发送的数据封包只有一个,而且确认信号拍一src0_grant_a只维持了一个周期。图3.8的仿真波形可以与图3-2(b冲的时序进行对比,可以看到奉次设计很好的完成了预定的普通传输的功能。3.6采用Formality进行形式验证Formality是Synopsys公刊的形式验证的一具,可以用它来比较一个RTL级的设计和它的I]级州表在功能上是否致。形式验证是在64位RedhatLinuxWS4的平台}‘,通过Synopsys的Formality200712r其进行的。并以RTL代码作为参考(Reference),以综合后的门绂网表(Netlist)作为实现(Implement)。具体的形式验证结果如舟3-9所示,这罩做的是PCX的形式验证。目kEdnY~n8目nsB"瑚ndwH印冒盛盛靠。I撑蝣露;:。i^H警圄骨一mpe删D“l删口cx』pR女mncer㈣mcuoo3668∞…。………by~2Co.at。砷1n…ace…,¥l驴aturoH…ch……1。。一0nalysl500(口】u…t…rof…eefi∞le…Ea¨on】∞mpare印int5c…e……atch“"to∞l吲0(0…at…ref…ce¨日l……atE…prl…1|nputblack~~EP”t562fol~…refer…e(1卵…‘a…}unread砷incson…pr’Yinputs一…1k…。utP“t58tat…V…fyJn9verlfica“…uccE~verlfleatl…e5ultsP●f………19……,P。zr口L…nta…de,i∞:i…K/pcx日BP……ne【t。Ptop…t……0…cs)“自Passl…一emintsc…rt…F…‘·IE…l’rLo口lW“ngsHlsl口wLⅫComm∞dF口m嘶fver¨,|“emShell~vem图39PCX的形式验证上海人学硕上学位论文第4章RISC核的设计本次设计的32位RISC型处理器核是用来验证Crossbar功能,并不是要实现一款功能齐全的32位RISC处理器。因此本文所设计的RISC核的指令和结构并不完整,指令以数据的载入和存储为主,只有比较少的算术和逻辑类型的指令,结构上不包含浮点运算单元。为便于描述,以下将这款RISC处理器核称之为Pisces。Pisces使用Verilog硬件描述语言进行描述,采用5级流水线,以提高处理器的性能。4.1基本结构整个Pisces的基本结构如图4-1所示。包括了指令缓存(ICache),数据缓存(DCache),算术逻辑单元(ALU),通用寄存器(GPR)和程序寄存器(PC)几个主要部分。图4—1Pisces的基本结构由于Pisces是一款RISC型的处理器,所以在整体架构的设计上参考了比较经典的MIPS的体系结构【3们,其主要的特点如下所述:(1)拥有32个通用寄存器(General(2)3个特殊寄存器(SpecialPurposeRegisters,GPR)。PurposeRegisters,SPR)。特殊寄存器中包含了27上海大学硕上学位论文1个程序计数器(ProgramCounter,PC),累加器高位(AccumulatorHigh)和累加器低位(AccumulatorLow)寄存器。(3)拥有1个“位的累加器。累加器的高位位于HI寄存器,而累加器的低位位于LO寄存器。(4)拥有一个32x32的乘法器。由于本次设计中所涉及的数据运算是32位的数据,因此乘法器被设计为32x32。而乘法器输出结果有64位,它的高32位数据将存放于HI寄存器,而低32位数据则存放于LO寄存器。(5)5级流水线设计。(6)哈佛总线结构,独立的指令缓存(InstructionCache)和数据缓存(DataCache)。4.2Pisces的指令集在指令集的设计方面Pisces同样以MIPS32指令集【31】【32】作为参考。所有的Pisces指令按功能被分为四类,分别是:(1)载入和存储指令(Loadandstore)(2)计算类指令(Computational)(3)跳转和分支指令(Jumpandbranch)(4)其他指令(Miscellaneous)由于本次毕业设计中所用的Pisces核只是用来进行验证Crossbar的功能,因此并没有必要实现所有的指令,本次设计实现了一部分的载入/存储指令和一部分的计算类指令。下面将对实现的指令进行描述。载入和存储指令为了便于验证,对于载入/存储指令中的数据,Pisces采用统一长度,即采用一个字(Word)32位的长度。而对于其他长度的数据,比如,字节(Byte),半字(Halfword)则没有实现。Pisces实现的三条指令分别是MIPS中的LW和SW指令以及LUI指令。表4.1对所实现的指令用表格的形式进行了说明,在说明之前先给出一些简上海大学硕十学位论文写的意义。RDRs一目的寄存器(DestinationRegister)Registers)一源寄存器(SourceRTOFFl6Constl6AccLO,HI一目标寄存器(TargetRegisters)—16位的偏移量—16位常数一64.Bit累加器(Accumulator)一累加器高位(AccumulatorLowPartHighPartACC63:32)和累加器低位(Accumulator缩写LWACC31.0)寄存器表4.1载入,存储指令说明将一个字的数据从DCache载入到RT寄存器中将RT寄存器中的一个字长度的数据存储到DCache将Constl6左移16位后的值赋给RT汇编LWSWLUIRT,OFFl6RT,OFFl6R-T,Constl6SWLUI计算类指令同样由于仅仅是作为验证Crossbar的设计,Pisces实现了部分的计算类指令,所实现的指令如表4.2所示。表4.2计算类指令说明Acc=Rs缩写MULl’UADDUADDIUSUBU汇编MULTUADDUADDIUSUBURs,RTRD,Rs,RTRx,Rs,Constl6RD,Rs,RTRDRI)RsRsRxRt)=Rs+RTRT=Rs+Constl6Ro=Rs—lhMFHIMFLOMTHIMTLOORANDXORMFHIMFLOMTHIMTLOORANDXOR将HI寄存器的值赋给RD将LO寄存器的值赋给RD将Rs寄存器的值赋给HI将Rs寄存器的值赋给LORD=RsRD,Rs,RvRTRD,Rs,lhRD,Rs,RTRD=Rs&RTRD=Rs^RT需要注意的是在进行乘法操作的时候,由于乘数与被乘数都是32位,这会产生64位的数据。这个64位数据的高位会被存入累加器HI寄存器,而低位则会被存入累加器LO寄存器。29卜海大学硕士学位论文4.3指令的格式这一部分将对本次设计所实现的Pisces中的指令的格式进行描述,由于参考了MIPS32的指令集,因此指令的格式也与MIPS32的指令格式兼容。按照MIPS32指令集的定义,MIPS指令都是32位,并且指令的格式分为3类【30】,具体的分类如下所示。·立即类(Immediate)·跳转类(Jump)·寄存器类(Register)下面将对这些指令怎样分段进行说明,首先给出一些字段的说明,如表4.3所示。表4.3指令各个字段的意义字段位数描述opcode6-bit主要的操作码rd5.bit用来确定目的(destination)寄存器1"85-bit用来确定源(source)寄存器rt5.bit用米确定目标(target)寄存器,可以作为目的/源寄存器immediate16.bit为逻辑运算提供有符号的16位立即数ins仃——index26-bit左移两位后,作为28位跳转目标地址Sa5-bit移位数萤function6-bit对于SPEC眦的操作码,指明相应的功能类型三种类型的指令的字段分别如图4-2所示。(a)立即类指令(b)跳转类指令(0)寄存器指令图4—2三种指令类型30上海大学硕上学位论文本次毕业设计中所设计的指令都是32位的指令,由于实现的指令中并没有跳转指令,因此不包括跳转类指令,也就是说,这次设计的指令中只有立即型和寄存器型两类指令。在Pisces中实现的指令里,SW,LW,LUI和ADDIU属于立即型指令,它们的opcode字段分别是10101l,100011,00111l和001001,处理器可以根据这个字段的不同加以区分,从而实现不同的操作。而像MULTU,ADDU和SUBU等属于寄存器型指令,它们的opcode字段为000000,属于SPECIAL类型的操作。处理器需要根据function字段的数据进行区分,以实现不同的操作。以上三条指令的function段分别为011001,100001和100011。4.4流水线设计为了提升性能,很多处理器都拆用了流水线的设计【36】【371,Pisces也采用了流水线的设计思想,总共采用了5级的流水线,分别是:·取指(IF,InstructionFetch)·寄存器文件(RF,RegisterFile)·执行(EXE,Execute)·存储器(MEM,Memory)·回写(WB,WriteBack)下面将结合图4-1所给出的Pisces结构图对各个阶段所进行的一些具体操作进行分析。4.4.1取指(IF)在Ⅲ阶段,会根据PC的值对存储于ICache中指令的进行提取。对ICache的取值操作是一个比较复杂的过程。整个过程大致可以分为以下几个步骤(1)取出相应地址在ICache中的Tag和Data数据(2)判断ICache是否命中(3)对命中的数据进行缓存,若发生缺失,则向L2Cache请求数据。上海大学硕士学位论文因为在本次的设计中并没有实现真正意义上的L2Cache,也就是说ICache也无法向L2Cache请求所需要的指令数据,因此这次设计的Pisces核所包含的ICache直接使用一块RAM单元代替,这块RAM单元在仿真的时候通过¥readmemb系统函数载入所需要的指令数据,并提供整个验证过程的所有指令。也就是说这次设计的Pisces在仿真时间0初始化之后就已经存在了数据。这是出于简化设计的考虑,因为这样不需要增加相应的程序下载模块,事实上如果是普遍意义上的处理器那事情远比增加模块要复杂得多,上电之后ICache会去请求L2Cache,而L2Cache会去请求DRAM,而DRAM再去请求硬盘,而这些都不属于本文要研究与讨论的内容。如图4.3所示,在Pisces结构图中有阴影的部分为与Ⅲ阶段操作无关的部分,而没有阴影则是与IF阶段操作相关的部分。图4—3取指阶段4.4.2寄存器文件(I江)RF阶段Pisces会根据指令对寄存器文件进行取值,取出RS,RT寄存器的值,为EXE阶段提供数据。同时RF阶段还会对指令进行译码和一些多路选择器的选通操作,所有这些操作都是为EXE阶段的执行作必要的准备。32卜海大学硕士学位论文图4—4寄存器文件阶段如图44所示,在Pisces结构图中有阴影的部分为与RF阶段操作无关的部分,而没有阴影则是与RF阶段操作相关的部分。4.4.3执行(EXE)在EXE阶段主要是对RF阶段提供的数据进行计算。这些计算包括了乘法运算和一些基本的算术逻辑运算。如图4.5所示,在Pisces结构图中有阴影的部分为与EXE阶段操作无关的部分,而没有阴影则是与EXE阶段操作相关的部分。图4—5执行阶段上海大学硕士学位论文4.4.4存储器(MEM)MEM阶段主要对DCache进行读写操作,对DCache的读写操作也是一个比较复杂的过程。整个过程大致可以分为以下几个步骤(1)取出相应地址在DCache中的Tag数据,如果是读出操作,则读出相应地址的Data数据。(2)判断DCache是否命中。(3)如果命中并且是读操作,则将之前读出的数据输出到WB阶段的寄存器;如果命中但是是写操作,则对相应的地址进行写操作。如果没有命中,即发生缺失,则向L2Cache查询相应地址的数据。在本次毕业设计中,DCache的实现更多的体现了多核的因素。对于多核的结构,由于各个核之间需要交换数据,所以DCache是以接口的形式来实现的,它能够访问L2Cache从而实现数据的共享,具体的设计将在下一节进行分析。如图4-6所示,在Pisces结构图中有阴影的部分为与MEM阶段操作无关的部分,而没有阴影则是与MEM阶段操作相关的部分。图4—6存储器阶段上海人学硕上学位论文4.4.5回写(、Ⅶ)WB阶段会对寄存器文件进行写操作,将ALU运算的结果或者从DCache中读取的数据写入到寄存器文件中。具体执行的操作会根据指令的不同而不同。在这一阶段还会对程序寄存器(PC)进行操作,由于本次设计中没有实现跳转和分支指令,所以程序寄存器所执行的操作只是递增,并为下一次的取指提供相应的地址。如图4.7所示,在Pisces结构图中有阴影的部分为与WB阶段操作无关的部分,而没有阴影则是与WB阶段操作相关的部分。图4—7回写阶段通过对流水线各个阶段所作操作的分析,可以看到IF,EXE和MEM阶段需要比较多的时间,而RF和WB阶段需要的时间比较少,因此在流水线中IF,EXE和MEM阶段被分配了一个单位时钟周期的时间来完成操作,而RF和WB阶段则各被分配了半个时钟周期的时间来完成操作。图4.8表示了多条指令以流水线的方式在Pisces中运行的示意图。从图4.8中的虚线框中可以看到,在同一个时钟周期内会同时发生5个阶段的操作。虽然流水线可以将多条指令的执行过程相互重叠以提高处理器的处理性能,但是流水线也会遇到问题,也就是常说的流水线冒险[381(PipelineHazard)。一35上海大学硕士学位论文般将流水线冒险分为三类:结构冒险,数据冒险和分支冒险【13】。III圜≤。图4—8EXE。IMElk,。物Kl习B”F;R圜玖;翊EXElEXE■MEM冈圜《MEM同潋瓿。翻Pisces中的流水线结构冒险(StructuralHazard)是指硬件无法满足对多条指令的需求,而使得有些指令不能执行。由于参考了MIPS的架构,Pisces在实现流水线的过程中不会遇到结构冒险的问题。图4—9ALU中的反馈电路分支冒险(BranchHazard)是指某条进行决策的指令(比如分支指令)在流水线某级(比如EXE级)做出的决策,使得之前载入的指令不是处理器真正要取得的指令而无法执行。由于本文所设计的Pisces没有去实现跳转分支类的指上海大学硕士学位论文令,所以Pisces不存在分支冒险。数据冒险(DataHazard)是指由于指令执行所需要的数据暂时不可用,而造成将要执行的指令不能在原定时钟周期内执行。本文所设计的Pisces中存在数据冒险。本文通过在EXE级增加反馈(Feedback)电路的方法,解决数据冒险的问题。如图4-9所示,通过反馈电路可以在上一条指令未完成之前,先将数据提供给当前指令执行。这种提前提供所需数据的方法很好的解决了Pisces中的数据冒险问题,这会在6.1节的仿真中得以体现。4.5Pisces与Crossbar的接口在上一节已经提到,DCache在设计上更多的体现了多核的因素,因为所设计的Pisces核是用来实现多核的架构的,DCache并不是像ICache一样是用一块RAM进行实现,而是通过一个与Crossbar的接口来实现的。当向DCache中写入数据的时候,也就是运行SW指令的时候,这个接口就通过Crossbar向L2Cache发送要存储的数据。而当Pisces要向DCache读取数据,也就是运行LW指令的时候,接口就通过Crossbar向L2Cache发送请求,同时L2Cache会将所请求的地址的数据通过Crossbar发送给Pisces核。图4—10DCache的结构整个的DCache模块是分成了如下三个部分,DCache控制部分,PCX与核37-卜海大学硕士学位论文的接UI(PCXCoreIntl.'face,PCI)部分,数据填充队歹lJ(DataFillQueue,DFQ)部分。其结构如图4.10所示。DCache控制部分的主要功能是通过接收到的指令来判断是否需要进行SW和LW操作,如果需要进行SW和LW操作,则让PCI发送相应的请求。同时由于LW操作并不能在一个时钟周期内完成,DCache控制部分会暂时阻塞流水线。在阻塞流水线之后,DCache控制部分通过跟DFQ部分的接口,来获得Lw操作的所需要的数据。等到从DFQ部分接收到了所需要载入的数据之后再将流水线进行恢复。而对于SW操作,虽然它也不是在一个时钟内可以完成,但是流水线并不会被阻塞。因为流水线的下一级也就是WB级并不需要写入SW操作的数据。PCI部分会根据从DCache控制部分接收到的控制信号来进行相应的数据封包的发送。在本次设计中,SW操作将采用原子请求的方式将数据发送给Crossbar,而LW则只是以普通请求的方式发送数据给Crossbar。从图4.10中可以看到与PCI接口的是Crossbar中的PCX部分。cpx_dfq_data_rdy=0datardy=1atom=l固囤图4—11DFQ的操作流程DFQ部分的作用是用来接收Crossbar发送的数据。因为之前PCI部分发送给Crossbar的数据有两种类型,一种是Load类型的LW,另一种是Store类型的SW。对于Load类型的指令,L2Cache会返回需要的数据,而对于Store类型的上海大学硕十学位论文指令,L2Cache将会返回一个确认存储(StoreACK)的数据封包。在本次设计中,LW的返回数据将以原子的方式发送给DFQ,而SW的返回数据(其实是确认信号)则只是以普通的方式发送给DFQ。从图4—10中可以看到与DFQ接口的是Crossbar中的CPX部分。DFQ的操作流程是用有限状态机实现的,具体过程如图4.11所示。4.6将Pisces在FPGA上综合Pisces使用Verilog硬件描述语言进行描述,完成基本的设计之后,在Xilinx公司的ISE环境下,使用VirtexIIPro系列的XC2VP30型号的FPGA芯片进行综合。综合后的结果如表4.4所示。可以看到单个Pisces核大概占用了整块芯片15%不到的资源。表4.4综合后的FPGA资源利用情况隧薹易?焉罴纛…DeviceUtiliza秭7iuSumwmry(estimatedva糯蹴’焉?Z焉三曩LogicUtilizationUsed183717822099137Avaflable13696273922739255613613616lUtilization|Number。fSlices13%6%7%24%O%2%12%|Number。fSliceFlipFlopsNumberof4inputLUTsNumberofbondedIOBsNumberofBRAMs1|42INumber。fMULTl8X18slNumberofGCLKs39卜.海大学硕士学位论文第5章与Crossbar接口的L2Cache在2.2节中本论文分析了多核处理器中通信的基本方式,在结构上本次毕业设计采用了共享存储器的系统结构,而在多个处理器核的通信上,本次毕业设计采用共享地址空间的方式。在3,4节中已经对本次毕业设计中所用的Packet的格式进行了分析,本章将对如何通过封包实现共享地址空间进行分析。在本次毕业设计中,使用了L2Cache作为了整个多核处理器的共享存储器,因此共享地址空间的通信是依靠L2Cache来实现的。所以本章会对实现的L2Cache结构和功能进行分析。在给出本次毕业论文所设计的L2Cache之前会先对Cache的工作原理和Cache的基本结构进行分析。5.1局部性原理Cache的工作原理是基于程序访问的局部性。对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就具有了时间上集中的倾向。数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以便存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称之为程序访问的局部性[421。局部性原理(principleoflocality)告诉我们:在任一瞬间,程序只访问地址空间中的一小部分。体现局部性的有以下几个方面:时间局部性(temporallocality):在一小段时间内,最近被访问过的数据块很可能再次被访问。空间局部性(spatiallocality):如果一个数据块正在被访问,那么不久的将来与它地址相近的数据块也可能很快的被访问。以上的描述解释了为什么在这次的设计中,将LW操作的返回值定义为原子上海大学硕.上学位论文操作。LW请求的是32bits的数据,但是通过L2Cache返回的却是64bits的数据,原因是因为由于局部性的原理,我们认为既然返回的数据的那段地址被访问了,那他附近的地址也有很大的概率被访问,因此,L2Cache会将这个地址后面的数据也返回给处理器。也就是说虽然处理器发出的请求只是需要32bits的数据,而接收到来自L2Cache的数据却是64bits。处理器将使用32bits的数据,而将另外的32bits的数据存储在DCache的寄存器,以备下次需要时使用。5.2Cache的基本结构接下来将对Cache存储器的基本结构进行分析。Cache存储器其一般实现方式主要有三种,分别是全相联,直接映射和多路组相联。全相联最灵活但是实现比较逻辑的时候会比较复杂。直接映射比较容易实现,但是可能产生快速抖动。多路组相联则是前两者的一个折衷‘431。下面将对这三种结构进行介绍。全相联全相联的Cache结构如图5.1所示:据请求访问的地址图5—1全相联的Cache结构41上海人学硕士学位论文从图中可以看到,在全相联的Cache结构中会把地址总线分为两部分:低位地址部分和高位地址部分。低位地址用来选择命中行中的某一个字节,而高位地址则会同每一行的标记地址进行比较。当载入数据到一个Cache行的时候,载入数据的地址也相应的存储到标记地址内。如果之后会有对Cache的访问操作,访问地址的高位地址会并行的与所有行的标记地址相比较,当有一行的标记地址与访问的地址相同时就表示Cache命中,命中的这一行的数据会通过访问地址的低位地址将数据返回给处理器。直接映射直接映射Cache的示意图如图5.2所示:共有4096行数据和标记i………………………………………………………………………’一j16位行标记Valid16字节行数据16位行标记Valid16字节行数据Index16位行标记Valid16字节行数据≥16位行标记Valid16字节行数据b一差需要的数据择—-l-r\。■广—、彳。r—刊_一7一[Addr[31:161Addr[15:4】Addr[3:O】请求访问的地址图5—2直接映射的Cache结构从图5.2中可以看到,直接映射的Cache结构中,地址总线被分成了三部分:低位地址部分,中间位地址部分,高位地址部分。其中低位地址部分还是用来选择命中行内的某个字节的数据,中间位地址则是作为索引来选择其中唯一的一行Cache,而高位地址还是同从标签域取出的该行的地址位进行比较,并确定是否命中。从上图表示的直接映射Cache中可以看到这块Cache的索引来自于地址的第15位到第4位,共有12位。因此共可以索引212=4096行。同时由于每行有16字节的数据,这样就有4096×16=64Kbyte的数据可以存储在这个直接映射42上海大学硕士学位论文Cache中。多路组相联多路组相联是全相联和直接映射Cache的一个折衷。图5-3是一个两路组相联的Cache的示意图。它由两个直接映射的Cache并行组成。据图5—3多路组相联的Cache结构5.3本次设计的L2Cache的结构在分析了Cache的基本结构之后,可以看到Cache的基本功能是存储数据和访问存储的数据,也就是对Cache的写操作和读操作。但是Cache也并不是等同于一般的RAM,因为Cache在存储数据的同时还需要将地址也作为下一次访问时用来比较的标记存储起来。以下是本文中设计L2Cache的基本原则:1)能够读,能够写,能够存储数据和数据对应的地址。2)能够把标记地址和请求的地址作比较,返回所需要的数据。43上海大学硕士学位论文31根据局部性原理,返回请求地址相邻的数据。4)由于Pisces运行的程序是自己定义的,也就是可以确切的知道哪些地址是会被访问,因此这次设计的L2Cache不会发生Cache缺失的情况。因此在设计L2Cache的时候不会包含判断Cache命中或者缺失的结构。5)由于L2Cache需要同时面对Crossbar中的PCX和CPX,因此在L2Cache还包括了同PCX和CPX的两个接口。基于以上的一些原则,这次毕业设计中设计了一个简单的L2Cache,它并不是真正意义上的Cache,但是能完成类似于Cache的功能。由于比较简单,整块Cache在结构上采取了全相联的结构。整块Cache只能存储64位的数据,同时存储的作为比较用的地址是32位。本文中所设计的L2Cache的结构如图5.4所示。●CPX——Datardy_+CPX●—--—-——Dataatom----4---/1Interface、~CPXpktl:sIPCXoktPCX!kyenl—datatPCXl32-bitAddrl64-bitData▲1个——Dalar。旷—÷◆——D蹴alom——今CCXInterf如eL2Cache图5—4本次论文所设计的L2Cache的结构当有读操作的时候,32位的读操作地址会被用来与32位标记地址进行比较,当请求的地址在L2Cache确实存在时,64位的数据会被取出输出到CPX接口上。当有写操作的时候,32位的地址和64位的数据会分别被写入到Cache中去。在本次毕业设计中Cache的读操作和写操作也就对应于Pisces指令中的LW指令和SW指令。由于跟PCX和CPX的接口在接收数据和发送数据上有时序性,Cache的控制由两个有限状态机完成。整个L2Cache的控制操作分为两部分,PCX接收部分和CPX发送部分。PCX上海大学硕十学位论文接收部分的操作流程如图5.5所示:pcxscdatardy20图5—5PCX接收部分的操作流程由于在Pisces发送的数据封包(Packet)中,LW指令是普通的请求,而SW是原子的请求,因此如果PCX接收部分接收从Crossbar发送过来的数据封包是普通的LW请求的时候,会给出一个Senddata信号给CPX发送部分,让其发送LW请求的数据内容。而当PCX接收部分接收从Crossbar发送过来的数据封包是SW的原子请求的时候,PCX接收部分会在接收的同时将数据以及地址分别写入到相应的Cache行中。同时在完成两个32位的数据的写入之后,为了告诉Pisces写入操作成功,还会发送一个确认信号给Pisces,为了通知CPX发送部分发送确认信号,SendACK会被置“l”。下面介绍CPX发送部分,其操作流程如图5-6所示。由于SW指令的返回封包只是一个确认包,因此是一个普通的传输。而LW指令的返回包是一个64位的数据,单个数据封包只能传输32位的数据,因此在本次毕业设计中将这个传输定义为原子传输,这样就能一次传输64位的数据给Pisces核。45上海人学硕上学位论文图5—6CPX发送部分操作流程5.4L2Cache的仿真对L2Cache的仿真主要从接收PCX封包和向CPX发送封包两方面来进行。对L2Cache的仿真是在64位RedhatLinuxWS4的平台上,通过Synopsys的VCS.MX工具进行的。在仿真中采用的数据封包的格式是3.4节定义的格式。PCX接口用来接收Crossbar中PCX发送过来的数据封包,并将封包中的数据和地址存储到存储器,而CPX接口根据请求,把需要发送的数据和地址根据封包的格式打成一个数据封包发送给Crossbar中的CPX。其所发送的数据和地址是之前通过PCX接口接收到并存储在存储器中的数据和地址。对PCX接口接收封包的仿真结果如5.7图所示。从仿真结果中可以看到PCX向Cache模块发送一个SW指令封包和LW指令封包的情况。由于SW指令是原子传输,因此会有连续的两个73位的封包发送给Cache。并且由于是SW的请求,Cache在接收完最后一个封包的时候会把sendack信号拉高,以此来通知CPX发送部分发送确认包。在图5.7中可以看}海^学mI学Ⅱti到在SW封包传输完成Z后scdata的值是64位数据Oxfa55ee88ff007744,而SCaddr的伍是32位数据Oxabcd5410。在SW请求之后是LW清水,在接收过LW封包之后并且根据封包中的字段意义判断mOxabcd5410地址的数据在当前的Cache内,就把senddata拉高,通知CPX发送部分发送数据——一。——..——————__.————[!!m“oi!!j…I…‘……∞…I…D—竺……∞77{}图5—7PCX接口接收封包的仿真结果CPX搂u负责向CPX发送数据封包,对其的仿真结粜蜘l幽5-8所示国5—8CPX接口发送封包的仿真结果从仿真结果町以看到CPX发送部分在收到sendack和senddata信号之后分别向不H的核发送了数据封包。并且由于LW指令的返叫圭J包是原子传输,囡此会在向CPX发m请求之后连续给出之前存储在scdata的低位和高位数据。通过l。而的仿真Ilr咀看到,L2Cache能够寅现对PCX数据封包的存储和对CPX数据封包的发送功能。同时由J和Crossbar相连.对L2Cache的访问权限上海大学硕士学位论文是共享的,任意的处理器核都可以从L2Cache中通过共享地址空间的方式载入或者存储数据。这就达到了各个处理器核之间相互通信的目的。上海大学硕士学位论文第6章用Crossbar连接多个核的仿真在进行多核的仿真前,会对多核中的单个Pisces进行仿真,从而对运行的指令进行分析。这些指令在运行多核的程序时会大量的用到。6.1单核的仿真这一节,将对本次毕业设计所实现的Pisces进行仿真,并对仿真的结果进行相应的分析。仿真是在64位RedhatLinuxWS4的平台上,通过Synopsys公司的VCS.MX工具进行的。仿真所使用的汇编代码以及汇编代码对应的二进制代码将在下面给出。关于如何将汇编代码编译为Pisces的二进制代码会在6.2节进行分析,本节先直接给出。为了便于描述,在二进制代码中使用了“"符号进行分割,同时在每一行的二进制代码中加入了行号。单个Pisces仿真的汇编代码如下:.te)(t.globI一●____一start—.start:ADDIU¥sO,¥sO,Ox00000003ADDIU¥al,¥al,Ox00000009MULTUSsO。¥alMFHlSsOMFL0¥slSWSsO。coreOSW¥sl,coreO-I-1ADDIU¥s2,¥s2,OxOOOOOOlfSUBU¥s2,¥s2,¥alADDUSsO,¥sO,¥al上海人学硕十学位论文LW¥a2。coreO.datacoreO:.word0x00000000.WOrd0x00000000MIPS中32个通用寄存器在运行程序时有不同的用处,表6.1给出了这些寄存器用处【321。由于Pisces在设计上参考了MIPS架构,因此在寄存器的使用上Pisces沿用了MIPS中的用法。之前汇编代码中的sO寄存器就相当于32个通用寄存器中的第16个寄存器,并以此类推。表6.1MIPS中的通用寄存器REGISTERs0Zero常为0lat由汇编编译器使用2.3vO.v1调用函数返同值4.7aO.a3调用函数的前四个参数8.15t0一t7临时变量,不需要被保存16.23sO.s7函数变晕,必须被保存24.25t8.t9另外两个临时变鼍26.27kO.kl被内核使用的寄存器28gp全局指针29sp堆栈指针30印堆栈结构指针31l'a返同最后调用的子程序的地址编译后对应的二进制代码:100100xX0000X000000000000000000XX2001001001010010100000000000010013000000100000010100000000000110014000000000000000010000000000100005000000000000000010001000000100X06001111000000000110000000000000107101011O000110000000000000011100080011110000000001100000000000001091010110000110001000000000011100110001001100101001000000000000111111100000010010001011001000000100011120000001000000101X000000000X00001L自^学峋±学m镕Z1314001111_00000_00110_10000000_0000001010001100110001100000000000111000”■■■■■■■■■■■■■■■■■■■■E£l=口■■z目口■■■■■■■■■■■■■●●●●■一了ii———丁——iH———————————————————————————————呻mⅡ“—”……L…一一…一1∞”l…ⅢⅡ…t"j…『一…“M—■……w:¥■’…fg』■川g2…&f-ⅢⅢ“一¨■,¨o*…~埘所有代码的仿真波形如同6-I所示…‘|IHu*…,¨…J9一一¨n…‘m_-……~'。删I--】”一∞……w_。r__¨”艘…In…=ll…L!…一”一…一…“o”一”…”…ml…∞一1ln■…¨I;…一~…“…Ⅱ…I¨_:…~一…“”Mu一1—!—…●…“~“一“一一…一n…Ⅲ…,一口*^■……n。…m…Ⅱ·_J。…l■●●■_L一4一q一【1~Ⅱ一q…【~…oon●~m一目#*—jj肿==zh一一一一=一一一一一“l…“mL…‘I㈣!一I…‘lJ图6—1所有代码的仿真波形需要注意的是在图6.1左边的端口列表中有连续的5个dataout[31:01,从上生下分别对应sO,sl,s2,a1和毗寄存器。下面将结台二进制代码对单个Pisces的仿真波形进行分析。’”Ⅻ#~"_vaee“叠,tl旦.!J∞l呼叵;司I‰围|oI星日Ⅲ疆.●'1雷蓟同司圄圄l∞目∞11■I。∞∞。c1100。。。lfiD,0002u000。蓝葛等】。j;毒一一,J,,J。i毛主釜垫00060∞口·00300Ⅲm000r3一伴高等”2m勰∥需‘器篙焉口哪9…∞00000000·∞0·0n00t000·0∞-000·0]9—000∞0∞0∞000000…m00∞口000D∞000…00000口口G000000㈧囤6—2『OO900∞OfOeO…——0000∞D口%ADDIU.MULTU,MFHI和MFLO指令的仿真波形从汇编代码和j进制代码“r以看到,首先执行的程序是两条t即数加的指令ADDIU私一条乘法指令MULTU。ADDIU指令是将需要的值丐入到s0和al寄存器,然后通过乘法指令MULTU将sO和a1相乘。一条汇编指令埘府r二进制代码的1—3行。仿真的结果如图6-2所示。由下存在4.4节提到的流水线数据冒险,从图中I·,以看到在80nsu『,ace和aceIo寄存器中的值发生改变,也就是乘法指令执行后的值被写入到了acchihi和accIo寄存器。从蚓6-2中IjJ以开到so和al寄存器的值足分刖在80ns和IOOns的时候被’j入的,如果小是冈为EXE级中的反馈电路,此时的乘法指令将小能执{,,需要等到ADDIU指令对s0和al寄存端的操作完成届爿能进行。JF足山于使用的4.4节巾的反馈}乜蹄.使得在前两条指令末完成时,MULTU指令执行所需要的数据在80ns前已经存在丁dataTs『3l:01和datan口1:o】端¨。这使得流水线不被打断而能继续执}J_。在ADDIU和MULTU指令之后执行的是MFHI和MFLO指令,它们分别将acehi和acelo寄存器中的数捌存到sO和S1寄存器。对应的进制代码分别是笫4和第5行。从图6-2rI·可以看到数据分别在140ns和160nsq八到s0干¨Sl寄存嚣。】u…∞…0000·0000·u…u‘∞1f‘6‘D,‘0…0t口…Ⅻno『¨—r旷r¥—_i—‘自JOlD·∞12·∞口2-Ⅻ·∞02·0039·Ⅱ口1f‘∞23‘…1‘B0∞‘0口3Bi』一.¨_。。一L厂Lm__i—M唧DDI]I]'一JnIH一9一·丽丽T·日uT·曲r·盯0WⅧm·…-∞lf·∞16㈣qⅢⅢm…∞…ⅦuO∞一f∞∞‘u‘[11]1]U‘0uul】‘Ⅲl…l】一Ⅱoo自ii—r_——…o,∞uuuuuuⅢUUOBlh…∞OoDo∞boⅫ~o1nO口0…u¨uuu…uuuul6…o∞∞∞n000…ⅧⅢ…nⅢ】Ⅲ]fl‘0u【一口ulh口口口0…00∞BfllB∞0BB0001——旦”口口0…图63LUI.SW.SUBU和ADDU指令的仿真波形i海人学"ll学&论文两条SW指令的仿真结果如图6.3所ui。nr以看到在扩编代码中并没有LUI指令,但是在汇编编译嚣生成的二进制代码中在每条SW之的都加入了Lul指令。LUI指令的作用是将数拊写入到at寄存器,这么做原冈与SW指令的操作有关。SW指令足将通川寄存器(GPR)的值存储到存储器(Memory)中的某个地址,而这个地址是山苹上也址(也就足m寄存器的值)加卜个偏移量(offset)生成的。在执行SW指令之前加入LUI指令能够很好的保证在存储数据之Ij,『将草地址准备好,阶l}一程序出现纰漏。两条SW指令对应的二进寺州t码是缸9行。LJl丁水文设¨的Pisces的SW指令是原子操作,吲此在240ns的时候,处理器核通过与Crossbar的接lI,f:始发送数批包。可以看到corejcxreq[7:0]端n#ucore_pcx—atm[7:01)Nu分别有一位被置…1’。}Ib"/iI数据也从core_pcx_data[72:0]端FI发H{。SW指令之后足ADDIU,SUBU和ADDU三条指令.它们对应于二进制代码的第10—I2行。』e仿真波形如图6-3所不图64LU[,LW指令的仿真波形LW指令的仿真结果如图6-4所示。¨样,为了程序的安全,编泽器在LW指令前插入了LUI指令。对应的二进制代码是第13和第】4行。通过仿真波形nr以看到,在340ns的时候处理器桉开始发送数槲封包,并月在发送封包的时候上海大学硕士学位论文只有eore_pcx_req[7:0]端口中有一位被置“1",而core_pcxatm[7:0]端口则为全“0”。这是因为在本次毕业设计中LW操作不是原子操作的缘故。相应的数据从core_.pcx_data[72:0]端El发出。6.2多核的仿真在本节将会在多个Pisces核中运行一个程序。程序的主要功能是完成4点的快速傅里叶变换。多个Pisces核的会比较平均的分配一些计算量。首先会对快速傅里叶变换和蝶形运算单元进行一下介绍。6.2.1快速傅里叶变换作为对数据的一种处理方法离散傅立叶变换(DiscreteFourierTransform,DFT)在数字信号处理中有非常大的作用,而当要使用处理器作为处理工具,进行离散傅立叶变换的时候,为了减少处理器的运算量,常常采用优化的算法,也就是快速傅里叶变换(FastFourierTransform,FFT)[45】。图6—54点的基2的快速傅立叶变换如图6.5所示是一个4点的基2的快速傅立叶变换,在快速傅立叶变化中包含了多个的形状类似于蝴蝶的单元称为蝶形运算(Butterfly)单元。如图6-6所示,一个蝶形运算单元包含了一个复数乘法和两次复数加法[461。这些运算使用处理器来运算需要消耗比较长的时间,一般处理快速傅立叶变换是使用DSP采用硬件的方式进行实现的,但是本次只是用来验证设计,所以并以上海大学硕十学位论文此来说明设计的可行性,所以采用的是软件编程的手段实现整个的快速傅立叶变换的运算。G(k)X(k)=G(k)+WN’H(k)H(k)一%图6—6X(k)=G(k)-、凡~‘H(k)蝶形运算单元6.2.2多核的计算量分配对于多个Pisces核,各个核只会被分配傅立叶变换中的一部分计算,以4点的基2的快速傅立叶变换为例,如图6.7所示,使用虚线框包含起来的运算表示是由两个核完成的,8个核中的每个核都分配了1/8的计算量,为了便于区分,有些虚线框内添加了阴影。Core0&1Core2&3Core4&5Core6&7图6—78个Pisces核计算量的分配从图6.7中可以看到,完成一次4点的基2的快速傅立叶变换,每个核每次只完成每个蝶形运算中的1/4的计算量,并且需要进行两次。第一次蝶形运算所需要的数据来自于本地存储,而第二次蝶形运算所需要的数据来自于其他的核计算出的结果。由于蝶形运算中包含了复数的乘法和加法,因此在本文的设计中,使用序号为O,2,4,6的核进行实数的运算,而序号为1,3,5,7的核进行虚数的运算。以Core0为例,其第二次蝶形运算中的数据上海人学硕上学位论文来自于Core4第一次蝶形运算所计算出的结果。6.2.3汇编代码这一节会以8个核中的一个核的代码作为例子来介绍,其他的核的代码和它类似。因为Pisces有32个通用寄存器,所以下面定义在进行蝶形运算需要用到的寄存器。一次蝶形运算的公式如下所示,其中gl,92,hl,hE,WI,W2表示的是相应复数的实数部分和虚数部分。X(k)=G(k)+嗽H(k)X(k)=xl+x2iG(k)=gl+92in(k)=hl+h2iw嵩2Wl+W2i作为运算结果的x(k)是会被存储到L2Cache以供其它核来使用。本次设计中为各个变量的寄存器分配如表6.2所示。表6.2寄存器分配x2}I,变量寄存器xiglaO92alhla2h2a3WltoW2t1sO&s2s1&s3对xl和X2都分配了两个寄存器是因为32位乘法会产生64位的数据,虽然在本文所使用的程序中并不会产生64位的数据,但还是会将乘法所产生的高32位数据存储在s2和s3中。接下来给出Core0的代码。代码注释中的R[】表示所取数据的实部,I口表示所取数据的虚部。.te)(t.globlstart:start捌釉嵴垧蝴嵴辫蝌拍渊拍蝴锋制崩柏嘲群掬燃撑1stbuRerflY聋gettheinitiafvalueforcoreSaO,¥aO,Ox00000009撑aO<一R【X(O)】ADDIU¥a2。¥a2,Ox00000003撑a2<一R【X(2)1ADDIU上海大学硕士学位论文捍w(o)=1ADDIU¥tO,sto,0x00000001撑tO<--R【W(0)】ADDIU¥tl,¥tl,0x00000000撑tl<--i[vv(o)】MULTUSt0,¥a2MFLO¥a2MFHI¥s2ADDU¥s0,¥a0,¥a2#StorethedataSW¥s0,val0——realSW¥s2,valO—real+1捎獬瞵构弹群拍恸辱舳蝴嵴撑2ndbutferflY拍鼢嵴拘恸群批蝴骅垧9蝴撑getthedatafromval2reaILW¥a2.val2reaILW¥s2。val2reaI+1撑w(o)=1ADDIUSt0,¥tl,0x00000001撑tO<一R【\/\f(0)】ADDIU¥tl,¥tl,0x00000000撑tl<一lf\^,(0)】MULTU¥tO,¥a2MFLO¥a2MFHI¥s2ADDUSs0。¥s0,¥a2#StOrethedataSWSs0,val0——realSW¥s2,val0_real+1.dataval0real:.WOrd0x00000000.WOrd0x00000000val0img:.WOrd0×00000000.WOrd0x00000000vailreal:.WOrd0×00000000.WOrd0x00000000撑R[VV(0)】★R【X(2)】撑a2<--R【W(0)】★Rp((2)】稃sO<一R【X(0)】+R[W(0)】★R【X(2)】撑it'szero群RM,(O)】·val2一real撑a2<一R[W(0)】★val2_real撑sO<一val0一real+R【W(0)】★val2一real5"/上海大学硕十学位论文vailimg:.WOrdOx00000000.WOrd0x00000000val2real:.WOrdOx00000000.WOrdOx00000000val2jmg:.WOrdOx00000000.WOrdOx00000000val3real:.WOrd0x00000000.WOrdO×00000000val3img:.WOrd0x00000000.WOrd0x000000006.2.4编译及仿真前的数据转换MIPS公司的SDE(SoftwareDevelopmentEnvironment)是MIPS结构处理器的交叉开发系统‘471,它能产生基于MIPS平台的代码。SDE.1it是SDE一个免费版,本次毕业设计使用SDE—lit中的汇编编译器将程序编译为二进制文件。将Core0的汇编代码编译的命令如下(这里core0.asm是它的汇编代码文件):首先会通过sde.as生成目标文件¥sde-as-mips32coreO.asm一0coreO.0然后用sde.1d生成可执行文件¥sde-IdcoreO.0—0coreO最后使用sde.corrv生成二进制文件¥sde—cony-fbin一0coreO.bincoreO由于在仿真的时候需要载入的ICache初始化文件是由“0",“1"序列构成的文件,而不是真正的二进制文件(“0",“1”序列的顺序跟二进制文件中时一样的),因此对生成的二进制文件本文还使用Perl语言进行了格式转换。Perl的代码如下:撑!lusrlbinlped-Wusestrict;上海大学硕士学位论文my¥1ine;my¥code;my¥flag;my¥binfile=shift@ARGV;my¥memfile=shift@ARGV;openBINFILE。”<¥binfile”:openMEMFILE,”>¥memfile”;binmodeBIN.——FILE;while(¥1ine=<BIN—FILE>){¥code=unpack(”B"’。¥1ine);if(¥flag){¥-.=¥code;)else{¥一=¥code;}¥f|ag++:)s/((110){32})/¥1\n/g;printMEM—FILE¥-:close(BIN_FILE);close(MEM...FILE);转换好的数据通过使用¥readmemb系统函数初始化到ICache。6.2.5仿真结果这一节将对8个Pisces核运行快速傅里叶变换的情况进行仿真,并对仿真的结果进行相应的分析。仿真是在64位Redhat的VCS.MX工具进行的。8个Pisces核的仿真结果如图6.8所示。图6.8中从上到下8个scdata[63:0]是8块L2Cache中所存储的数据。快速傅立叶变化输入的数据如下:XXXX===LinuxWS4的平台上,通过Synopsys97++3+2+研殖负;∞D动筇=59l海^学碗l学位论zD250∞o500ooDnndnnnlira_.^ⅢoⅢI㈣_.m州日:WlJI-埘∞:01“J·Iq∞:q|l啊∞∞∞∞7j‘q■8口EH9也^mq日棚_i【m∞∞∞∞■E^州∞:OlnnnnⅡnnnⅡnnnlI啊∞∞∞嘛…口…00006·一0007……0…-0±…c∞00…00口目0,‘0D…n3∞……¨Ⅷ300n00口n000…5∞0∞口…Ⅲ001‘BD唧OUB6……0∞00r‘00删01S…0……‘00Ⅲoo,B00I_0【Ⅲ口口00007s口oo口}ooooo口‘0…UUBB00s∞∞∞i∞‘OOODu……0·Ⅻ0…u00u00∞0∞∞∞∞∞……Ⅻ…0000∞OB‘口0D000…∞∞∞∞∞∞7∞u…00000u【_000…‘000…0【mu…Ⅱ00口0000000∞00·00000∞OD0000000∞1∞0∞口¨0000000∞00000ODU0‘Ofl0000∞0∞∞…IⅢnnnn1it00000∞0000∞000Ⅱ∞n…口0D…∞0iⅢ口…0000000…0‘0口0¨Ⅲ姗帅nn00·00∞0…Ⅻ0uⅡu∞口0…0∞00…D000…0∞00…∞00∞nnnnn∞∞∞∞∞∞∞00∞00u…00口1000口000口00‘Q00000∞0D00000‘000…000000∞‘…000口∞∞∞000000nnn‘0∞……一·00…00∞…Ⅷ∞∞∞∞∞∞∞珊召68[1咖00…0∞000000∞∞0口0…0—0000‘q00000∞0D0Ⅻi∞(IO0000Ⅲ·∞0Ⅱ00∞0∞畦’8个嚎的仿真结果从图中可以看到,在920ns的时候快速傅口叫变换所训算的结果争部存储到了L2Cache中。由于1字储的结果是32位,所以计算结果存储存L2Cache中的低32位。可以看到计算的结果至j.而下为0x00000007,Oxfflrfffc,0x00000003,0x00000008,Ox00000005,Ox00000006,0x00000015,OxOOOOOOOe。计算结果对应于l。进制的7,一4.3.8,5,6,21,14。为了验证所计算结粜的正确忡.d二64位RedhatLinuxWS4的、r台上使川Matlab进行相应的快速傅、I叶变换。输入数据与之前的仿真相同,Matlab的输出结粜如图6-9所_;。可以看到训算结果完伞『F确。L≈^#m}#Ⅱ*女!。目^De_“gQ酬。p…【m{■…“d目n∞…work’o●‘t。母x、●…■西l}iMnd…帅——一c㈣mol………m州%”挑bCol,yrioht“J曲_xI(o…ndwmdow慧导爿鲁j戡黔21+J。*l,,1%4t‘H^T…B20047DTheMay。620。40㈣(R1Du,usMatZork§Inc4)…-[m“3+5Ⅲ】h目…tartPd,¥e1自ct!!∞L!!k。rftheH…P’薛篇.察谨兰gdI髅泰l9…一…-fft(y,d)7㈣T2…㈣-50000j2㈣_1。。∞12l0000+l4…0000d刖㈣…㈣‘6900∞1图6Matlab进行FFT后的结果图6—108个Pisces的数据通信上海大学硕士学位论文图6.10所示是8个Pisces中进行数据通信实现数据共享的过程,从上至下分别是每个Pisces核中的core__pcxreq[7:0]端口,core_pcx_atm[7:0]端口以及corepox端口。可以看到在的时候,8个核向不同的块发送了.存.da储ta[请72求:0]。而在L2Caches的时候3,080n个s核又向不同的n063e据hca数C入2载L块请求。可以看到在360ns时Core0所请求载入的数据所对应的L2Cache块就是之前在300ns时Core4存储数据时用的L2Cache块。当Core0的载入操作完成后,也就实现了数据的共享。由于请求的是相同的L2Cache块,因此360ns时Core0的core_pcx_req[7:0]端口的值和300ns时Core4的core__pcx_req[7:0]端口的值相同,都是0x04。其它的核发出的请求与Core0的类似。62上海人学硕十学位论文第7章总结与展望7.1总结经过数十年的发展,如今的CPU的设计以及实现水平已经达到了一个崭新的高度。从最初的8位CPU开始,作为计算机中核心运算以及控制部件的CPU,在的主频达到一定的速度后,开始朝多核处理器的方向发展。本文以OpenSPARC作为参考,设计了一个能够构建多核处理器的Crossbar,为如何构建多核处理器,提供了很好的参考。本文的创新点主要体现在以下两个方面:(1)本文设计的Crossbar虽然参考了Sun公司OpenSPARC中的CacheCrossbar的结构,但是所连接的核可以是其它类型的核,例如本文中参考MIPS32指令的Pisces处理器核。其它类型的核通过定义相应的接口能方便利用Crossbar实现多核的架构。(2)为了能够连接不同类型的处理器核,Crossbar采用了参数化的设计,可以根据需要调整数据位的宽度。这使得其它类型的处理器核与Crossbill"连接更加简单。本文所做的工作体现在以下几个方面:(1)在参考Sun公司OpenSPARC处理器中CacheCrossbar的基础上,使用Verilog硬件描述语言,设计了一个能连接多个处理器核的Crossbar。(2)为了验证Crossbar的功能,设计了一个参考MIPS架构的RISC处理器。该处理器采用了5级流水线的架构,实现了MIPS32指令集中的部分指令。同时在流水线上解决了数据冒险的问题。(3)使用Verilog硬件描述语言,设计了~个共8块用于多核处理器进行数据共享的L2Cache。(4)构建了一个8核的处理器,并在这个处理器上运行了一个4点的快速傅立叶变换程序。程序使用汇编语言编写,并使用MIPS公司的汇编编译器编译。63上海人学硕上学位论文7.2展望由于时间的仓促的原因本次毕业论文中所设计的多核处理器中的各个“部件"都采取了“精简”的结构。下面将总结设计中一些有待改进的部分,可以作为将来对本次设计的完善。(1)处理器核的完善处理器核是多核处理器中最为重要的一部分,处理器核的性能的好坏直接影响到多核处理器性能的好坏。在本次毕业设计中,对于处理器核的设计进行了简化,作为一款成熟的多核处理器,这样功能的处理器核是远远不够的。对于处理器核的完善,主要可以从以下几个方面进行考虑。a)指令集的完善可以看到,在本次毕业论文中所设计的Pisces核只实现了MIPS32中的部分指令,需要进一步增加对更多指令的支持,比如,跳转指令,移位指令等等。b)流水线上的完善Pisces的流水线上虽然解决了数据冒险的问题,但是若实现的指令中增加了跳转指令,流水线又会遇到分支冒险的问题,需要进一步优化流水线。c)功能模块的完善在本次毕业论文中设计的Pisces功能还是比较简单,通过增加一些模块,可以增强处理器的功能。可以增加的模块有很多,以下仅列举一些。增加异常和中断处理模块。这一方面可以提高处理器内部对一些重要数据的纠错能力,另一方面可以在发生异常的时候对异常的事件进行相应的处理。增加浮点运算模块。这样处理器就会具有的浮点运算的能力。本文在6.2节之所以只选择4点的快速傅立叶变换,是因为不具备浮点运算单元。而4点的快速傅立叶变换中没有浮点数。DDR内存控制器模块。不论是桌面的处理器还是应用于服务器端的处理器,他们最后一级Cache的数据来源总归是DDR内存。从图2-6可以看到UI仃aSPARC中有相应的内存控制器来连接片外的存储。(2)Cache的完善上海大学硕+学位论文在Cache方面可做的完善工作主要体现在对Cache一致性的要求【4l】,由于采用了多级的Cache,并且L2Cache是作为一个共享的存储器为8个处理器提供数据。L2Cache中的数据可能同时会被L1Cache中的数据Cache和指令Cache需要,并且同一行的Cache可能会在不同的处理器核中会有不一样,这需要有Cache一致性的保证。对Cache部分的另一部分工作是降低Cache的功耗。(3)Crossbar中协议的完善本次毕业设计中所完成的协议比较简单,只有Load/Store数据封包的协议。在OpenSPARC中还有很多协议,比如ICacheFill等。这对于处理器更好的载入和存储有很大的好处。以上几点无疑会给今后的研究工作带来更大的挑战,同时也会带来更多的期待。相信通过不懈的努力和追求,本课题一定会实现更多的成果。上海大学硕士学位论文参考文献【1】郑纬民译,DavidA.Patterson,JohnL.Hennessy.计算机组成与设计硬件/软件接口(原书第3版)【M】.机械工业出版社,2007.4.121李大鹏,张盛兵,罗曼.32位RISC微处理器“龙腾R2”浮点流水线的设计和实现【J】.微电子学与计算机,2006年23卷1期PP【3】【4】【5】188.191.H.Q.Le,W.J.Starke,J.S.Fields.mMPOWER6microarchitecture.2007.11.www:0pensparc.net李明刚.64位MIPS指令处理器的流水线设计【J】.现代电子技术,2005年28卷3期pp98-100.【6】周润德[译】,JanM.Rabaey,AnanthaChandrakasan,BorivojeNikolic.数字集成电路一电路、系统与设计(第二版)【M】.电子工业出版社,2004.【7】【8】MultiProcessorSpecification.IntelCorporation,1997.白跃彬【译】,J.L.Hennessy,D.A.Patterson.计算机系统结构一量化研究方法(第四版)【M】.电子工业出版社,2007.【9】孙海瑁,梁峰等.嵌入式单精度扩展浮点RISC微处理器的设计【J】.微电子学与计算机,2004年第2l卷第6期pp4548.【10]R.JacobBakerandHarryW-LiandDavidE.Boyce.CMOSandCircuitDesign,Layout,andSimulation[M].TheY-0rk.1998.InstituteofElectricalElectronicsEngineers,Inc.,New【11】L.Hammond。B.A.Hubbort,M.Siu.TheV01.20(2):71-84.StanfordHydraCMP[J].IEEEMicro,2000,【12]GrindleyR.,Abdelrahmant,Brown,S..TheNUMAchinemultiprocessor[C].ParallelOilProcessing,2000.Proceedings.2000InternationalConference21—24Aug.2000Page(s):487-496.【13】J.L.Hennessy,D.A.Patterson.ComputerArchitecture:AQuantitativeApproach,FourthEdition[M】.MorganKaufmannPress,2006.【14]BehroozParhami.ComputerArithmeticAlgorithmsandHardwareDesigns[M].Oxford上海大学硕士学位论文UniversityPress,2000.【151李遣波,潘松,徐旭.新型RISC流水线架构的8位微控制器叽.电子产品世界,2003年09A期pp48—50.【161王金明.数字系统设计与VerilogHDL[M].电子工业出版社,2005.【171徐科,王文婷,阂昊.32位嵌入式RISC处理器的VLSI实现[J】.半导体技术,2003年28卷12期pp57-62。【181RonakSinghal.英特尔@下一代微构架Nehalem深入剖析[C】.英特尔信息技术峰会,2008.【191JoelM.Tendler.POWER6TechnologyOverview.IBMCorporation,2007.1201OpenSPARCTMT2CoreMicroarchitectureSpecification.SunMicrosystems,Inc.,2007,RevisionA.[21】VictorP.Nelson,H.TroyNagle,BillD.Carroll,DavidIrwin.Di#mlLogicCircuitAnalysisandDesign[M].PrenticeHall,1995.1221任浩琪.高性能CPU存储层次的分析与实现【D】.同济大学,2007.[231DavidL.Weaver.OpenSPARCInternals.SunMicrosystcms,Inc.,2008.10.[241OpenSPARCTMT2System·On-Chip(soc)MicroarchitectureSpecification.SunMicrosystems,Inc.,2007,RevisionA.1251Wang,Xi.Chuan,Qian,Bin-Feng.TheDesignoftheCacheCrossbarbasedonOpenSPARCArchitecture[C]。2008IntemationalConferenceOilElectronicPackagingTechnology&HighDensityPackaging,2008July,Shanghai,China,P4606979.1261张文俊译,Bhatnagar,H一高级ASIC芯片综合一使用SynopsysDesignCompilerPhysicalCompiler和PrimeTime(第2版)【M】.清华大学出版社,2007.【27】DesignCompilerUserGuide.Synopsys,2007.[281FormalityUserGuide.Synopsys,2007.[291赵俊良,张福新,陶品,译DominicSwcctman.mips处理器设计透视【M】.北京航空航天大学出版社,2005,1301MIPS32@ArchitectureForProgrammersVolumeI:IntroductiontotheMIPS32@Architecture.M1PSTechnologies,Inc.,2005.67上海大学硕士学位论文[311MIPS32回ArchitectureForProgrammersVolumeII:TheMIPS32固InstructionSet.MIPSTechnologies.Inc.2005.[321MIPS32@InstructionSetQuickReference.MIPSTechnologies,Inc.,2007.[331徐科,杨雪飞等.32位嵌入式RISC处理器的硬件验i正[J1.微电子学,2003年33卷6期PP502.505.[341贾琳,樊晓桠.32位RISC微处理器流水线设计【J】.计算机工程与应用,2005年14期PP115-117.【35】江艳,廉殿斌,李勇.64位RISC微处理器的结构设{flf[J].微电子学与计算机,2005年第22卷第4期pp72.74,77.[361钱彬丰,汪西川.一款RISC型流水线MCU的设计与实现【J】.仪表技术,2008年9期:PP55-57.[371周敏,付慧生,李雪峰.基于流水线的RISC微处理器设计[J】.大众科技,2006年5期:PP138155.57。Hardware/softwareresolutionofpipelinehazardsinpipelinesynthesisofinstructionsetprocessors[C].Computer-AidedDesign,1993.ICCAD一93.Digestof011TechnicalPapers.1993IEEE/ACMInternationalConference7-11Nov.1993Page:594—599.[391Qian,Bin.Feng,Yah,Li.Min.TheResearchoftheInclusiveCacheusedinMulti.CoreProcessor[C】.2008InternationalConferenceonElectronicPackagingTechnology&Hi曲DensityPackaging,2008July,Shanghai,China,P4606981.[401黄海林,许彤,范东睿,唐志敏.嵌入式处理器中降低Cache缺失代价设计方法研究[J】.小型微型计算机系统,2006.[41】陈石坤.多核处理器中CACHE一致性协议研究和实现[D】.国防科学技术大学,2005.[421贺宁.64位微处理器中数据缓存的设计与实现【D】.同济大学,2007.[431MarkBalch.CompleteDigitalandComputerSystemDesign:AComprehensiveGuidetoDigitalElectronicsArchitecture【M】。Beijing:TsinghuaChandrakasanandPress,2004.【44】JanM.Rabaey,AnanthaBorivojeNikolie.数字集成电路一设计透视(第2版)【M】.北京:清华大学出版社,2004.上海大学硕士学位论文[451程佩青.数字信号处理教程(第三版)【M】.清华大学出版社,2007.[461郑君里,应启珩,杨为理.信号与系统(第二版)下册【M】.北京.高等教育出版社,2000.1471MIPS@SDE5.03Programmep8’Guide.MIPSTechnologies,Inc.,2004.[481陈杰.MATLAB宝典[M】.电子工学出版社,2007.上海人学硕上学位论文致谢首先要感谢我尊敬的导师汪西川副教授对我的指导和教诲,论文的选题、具体研究和撰写过程都凝聚着导师的心血与汗水。在我读研究生期间,汪老师尽可能地为我营造一个良好的科研和学习环境,使我更专心的投入学习研究;并且时常生活中,汪老师还给予我各方面的指导,包括做人、做事和做学问。两年多来汪老师对我生活上、学习上的无微不至的关怀与照顾令我终身难忘。同时要感谢严利民老师以及冯旭老师等对我在研究上的指导与建议。另外要感谢实验室里各位同学对我学业上的帮助,正是工作在这样一个团结友爱的集体中,才使我在学业上有了长足的发展和充实,并顺利完成这篇论文的写作。感谢上海大学微电子研究与开发中心对我的培养,感谢曾经教育和帮助我的所有老师。这段难忘的经历使我终生受益。最后感谢我的父母,我的家人,感谢他们在学习期间对我的支持、鼓励和关爱,是他们给了我无穷的动力,让我坚持不懈的前进!同时衷心感谢百忙之中抽出时间参加论文评阅和评议的各位专家学者,感谢他们为审阅本文所付出的辛勤劳动1钱彬丰2009年1月70上海人学硕上学位论文研究生在读期间发表的学术论文和研究成果【1】钱彬丰,汪西川.一款RISC型流水线MCU的设计与实现[J】.仪表技术2008年9期:PP55-57[21Wang,Xi—Chuan;Qian,Bin-Feng.TheDesignoftheCacheCrossbarbasedonOpcnSPARCArchitecture[C].2008InternationalConferenceonElectronicPackagingTechnology&HigllDensityPackaging,2008July,Shanghai,China,P4606979.(EIAccessionnumber:084011615631,ISTPnumber:O00260248800047)131Qian,Bin-Feng;Yah,Li.Min.TheResearchoftheInclusiveCacheusedinMulti-CoreProcessor[C].2008InternationalConferenceonElectronicPackagingTechnology&HighDensityPackaging,2008July,Shanghai,China,P4606981.(EIAccessionnumber:000260248800049)71
因篇幅问题不能全部显示,请点此查看更多更全内容