8位RISC微处理器设计与仿真Word文件下载.docx
《8位RISC微处理器设计与仿真Word文件下载.docx》由会员分享,可在线阅读,更多相关《8位RISC微处理器设计与仿真Word文件下载.docx(43页珍藏版)》请在冰豆网上搜索。
RISCCPU;
VerilogHDL;
功能仿真
Abstract
CPUisthetheacronymofCentralPressingUnit.itisthecentreofcomputer.Therearetwoparts:
takingthedataandprogram(order-array)putinthecomputerandcarryouttheprogramfromthefirstorder,receivetheresult,thenfinishtherunning.ThefunctionofCPUiscoordinationandcontroleveryparttocarryouttheorder,makeitgowell,sotheCPUareprovidedwiththefunctionofgetanalyseandcarryouttheorder.
RISC(reducedinstructionsetcomputer)CUPmeansthatmaketheCPUassimpleaspossible,itissimple,butitisprovidedwithfunctionandconstractionasaCPU,ThispaperdiscussestheconstructionofRISCCPUandintroduceshowtodesignaRISCCPU.Thenthepaperfocusesonan8bitsRISCCPU.CombinedwithEDAtools——QuartusIIsimulationtoolitcomprehensivelyandsystemataciallyintroducestheflowandmethodologyofRISCCPUdesignwhichisfrommodulepartition,designimport,functionsimulation,logicsynthesis,timingsimulation.Atthesametime,theconstructionofCPUandfunctionofpartwiththedesignideologyfrometoptobottom.
Keywords
RISCCPU;
VerilogHDL;
FunctionSimulation
前言
21世纪,人类进入了信息化的时代,CPU作为集成电路的高端产品,随着半导体工艺水平的发展,遵守摩尔定律发展规律,CPU性能每过18个月就会翻一番。
CPU从最初发展至今已经有几十年的历史了,这期间,按照其处理信息的字长,CPU可以分为:
四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器。
CPU是CentralProcessingUnit-中央处理器的缩写,它是计算机中最重要的一个部分,由运算器和控制器组成,其内部结构归纳起来可以分为控制单元、逻辑单元和存储单元三大部分,这三个部分相互协调,便可以进行分析,判断、运算并控制计算机各部分协调工作。
CPU能对指令进行译码并进进行执行规定的动作,可以进行算术和逻辑运算,能与存储器、外设交换数据、提供整个系统所需要的控制。
CPU是一个复杂的数字逻辑电路,但是基本的逻辑并不复杂。
第一章CPU与RISCCPU
本节将简单介绍CPU特点、功能作用、发展历程以及CPU基本结构。
通过本章,我们将对CPU有一个简单的认识和了解。
1.1CPU概述
中央处理器(CentralProcessingUnit,CPU),是电子计算机的主要设备之一。
其功能主要是解释计算机指令以及处理计算机软件中的数据。
所谓的计算机的可编程性主要是指对CPU的编程。
CPU是计算机中的核心配件,是一台计算机的运算核心和控制核心。
计算机中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。
CPU内部存储器和输入/输出设备是电子计算机的三大核心部件。
CPU是由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态总线构成。
1.1.1基本原理
CPU的主要运作原理,不论其外部还是内部结构,都是执行储存于被称为程式里的一系列指令,在此讨论的是遵循普遍的架构设计的。
程式以一系列数字储存在电脑记忆体中。
几乎所有的CPU的运作原理可分为四个阶段:
提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。
1.1.2基本结构
CPU包括运算逻辑部件、寄存器部件和控制部件。
CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。
它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。
指令是计算机规定执行操作的类型和操作数的基本命令。
指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字和特征码。
有的指令中也直接包含操作数本身[]。
1.2CPU发展与前景
1.2.1CPU的发展史
从20世纪70年代开始,由于集成电路的大规模使用,把本来需要由数个独立单元构成的CPU集成为一块微小但功能空前强大的微处理器时。
这个名称及其缩写才真正在电子计算机产业中得到广泛应用。
尽管与早期相比,CPU在物理形态、设计制造和具体任务的执行上都有了戏剧性的发展,但是其基本的操作原理一直没有改变。
1971年,当时还处在发展阶段的Intel公司推出了世界上第一台真正的微处理器--4004。
这不但是第一个用于计算器的4位微处理器,也是第一款个人有能力买得起的电脑处理器!
4004含有2300个晶体管,功能相当有限,而且速度还很慢,从此以后,Intel公司便与微处理器结下了不解之缘。
可以这么说,CPU的历史发展历程其实也就是Intel公司X86系列CPU的发展历程,就通过它来展开的“CPU历史之旅”。
这个标准化趋势始于由单个晶体管组成的大型机和微机年代,随着集成电路的出现而加速。
集成电路使得更为复杂的CPU可以在很小的空间中设计和制造出来(在微米的量级)。
1990年,高速CPU时代的腾飞Intel公司推出的80386SL和80386DL都是低功耗、节能型芯片,主要用于便携机和节能型台式机。
80386SL与80386DL的不同在于前者是基于80386SX的,后者是基于80386DX的,但两者皆增加了一种新的工作方式:
系统管理方式。
当进入系统管理方式后,CPU就自动降低运行速度、控制显示屏和硬盘等其它部件暂停工作,甚至停止运行,进入“休眠”状态,以达到节能目的。
CPU的标准化和小型化都使得这一类数字设备在现代生活中的出现频率远远超过有限应用专用的计算机。
现代微处理器出现在包括从汽车到手机到儿童玩具在内的各种物品中。
人们又进入了奔腾时代、酷睿时代[]。
1.2.2CPU多核的必然
厂商的微处理器发展计划随着64位处理器的来临,英特尔特制定了IA64的发展蓝图,将采用多种方法提升高端处理器安腾的性能这些方法包括提高时钟频率,加入额外地处理内核,改善总体架构效率,以及提升L1、L2、L3高速缓存容量和速度。
英特尔推出了全新的代号为TANGLEWOOD的处理器,这是一种集成了16个内核的CPU,它将带有海量的缓存,和更高的主频。
而功耗不会高于现在任何的安腾处理器。
这将使服务器设计无需采用水冷等特殊的散热措施。
未来产品将全面采用超线程和多核心技术,新的微结构逐步运用于普通桌面产品上。
高速缓存容量和时钟频率将不断攀升,近日,英特尔宣布了其未来两年双核心技术的发展蓝图,再命名方式上英特尔双核心处理器将不会沿用目前PENTUM4的命名方式,新的桌面双核心处理技术将被简单成为奔腾D和CPRE2DUO,而架构上由目前的单核心没有多大区别,奔腾D不仅是HT技术,而酷睿由于2的支持将可以处理并行4线程任务。
除此以外,两款芯片均支持800兆赫兹缓存容量也一样。
虽然摩尔定律的神话以告终结,在短时间内,频率提升似乎已经暂缓了脚步,但是相信科技仍会有方法让我们用上更高性能的处理器,相信在摩尔后时代,多核心处理器将会继续遵循着摩尔定律,从而使得处理器技术得以不断的得以提升和发展[]。
1.3RISCCPU介绍
RISC(reducedinstructionsetcomputer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。
这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。
因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。
1.4本章小结
本章主要介绍CPU特点、功能、作用、发展历程以及CPU基本结构,以及今后CPU多核的必然性,借此引出RISCCPU的定义,通过本章的介绍,能让读者对CPU的整体结构有一个较深的理解,使读者明白CPU存在的跨时代意义,这样能对后续的RISCCPU学习有很大帮助。
第二章语言与操作工具的概述
2.1VerilogHDL语言概述
本节将简单介绍VerilogHDL语言特点、开发流程,以及Verilog程序的基本结构。
通过本章,我们将对VerilogHDL有一个简单的认识和了解。
2.1.1HDL概念与发展史
VerilogHDL是一种硬件描述语言(HDL:
HardwareDiscriptionLanguage),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
VerilogHDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。
两种HDL均为IEEE标准。
1981年GatewayAutomation(GDA)硬件描述语言公司成立,1983年该公司的PhilipMoorby首创了VerilogHDL,Moorby后来成为VerrlogHDL-XL的主要设计者和Cadence公司的第一合伙人。
又经过多年的发展,1993年,几乎所有ASIC厂商都开始支持VerilogHDL,并且认为VerilogHDL-XL是最好的仿真器。
同时,OVI推出2.0版本的VerilongHDL规范,IEEE接收将OVI的VerilongHDL2.0作为IEEE标准的提案,1995年12月,IEEE制定了VerilongHDL的标准IEEE1364-1995。
任何新生事物的产生都有它的历史沿革,早期的硬件描述语言是以一种高级语言为基础,加上一些特殊的约定而产生的,目的是为了实现RTL级仿真,用以验证设计的正确性,而不必像在传统的手工设计过程中那样,必须等到完成样机后才能进行实测和调试。
2.1.2VerilogHDL语言特点
下面列出的是Verilog硬件描述语言的主要能力:
基本逻辑门,例如and、or和nand等都内置在语言中。
用户定义原语(UDP)创建的灵活性。
用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。
开关级基本结构模型,例如pmos和nmos等也被内置在语言中。
提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。
可采用三种不同方式或混合方式对设计建模。
这些方式包括:
行为描述方式—使用过程化结构建模;
数据流方式—使用连续赋值语句方式建模;
结构化方式—使用门和模块实例语句描述建模。
VerilogHDL中有两类数据类型:
线网数据类型和寄存器数据类型。
线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
能够描述层次设计,可使用模块实例结构描述任何层次。
设计的规模可以是任意的;
语言不对设计的规模(大小)施加任何限制。
VerilogHDL不再是某些公司的专有语言而是IEEE标准。
人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。
VerilogHDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。
PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。
设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。
能够使用内置开关级原语在开关级对设计完整建模。
同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。
VerilogHDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。
这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。
在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。
能够使用门和模块实例化语句在结构级进行结构描述。
在VerilogHDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。
VerilogHDL还具有内置逻辑函数,例如&
(按位与)和|(按位或)。
对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。
可以显式地对并发和定时进行建模。
提供强有力的文件读写能力。
语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果[]。
2.2QuartusII概述
2.2.1QuartusII概念与发展史
QuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
2.2.2QuartusII特点
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎[]。
2.3本章小结
本章主要介绍了RISCCPU设计的开发语言和操作工具,对HDL语言的概念和发展史进行了详细的介绍,并且对设计所用语言VerilogHDL语言特点进行了详细讲解,而后进行操作工具QuartusII软件的概念与发展史以及QuartusII特点进行了介绍,能让读者对RISCCPU的设计方法和设计流程有个整体的了解。
第三章RISCCPU结构
3.1RISCCPU各个子模块的功能和设计思想
RISCCPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂。
我们可把它分成八个基本部件:
1)时钟发生器2)指令寄存器3)累加器4)RISCCPU算术逻辑运算单元5)数据控制器6)状态控制器7)程序计数器8)地址多路器。
各部件的相互连接关系见图3-1。
其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。
各部件之间的相互操作关系则由状态控制器来控制。
各部件的具体结构和逻辑关系在下面的小节里逐一进行介绍[]。
图3-1各部件相互连接关系图
3.1.1RISCCPU寻址方式和指令系统
RISCCPU的指令格式如图3-2。
图3-2RISC指令格式
它的指令系统仅由8条指令组成:
1)HLT停机操作。
该操作将空一个指令周期,即8个时钟周期。
2)SKZ为零跳过下一条语句。
该操作先判断当前alu中的结果是否为零,若是零就跳过下一条语句,否则继续执行。
3)ADD相加。
该操作将累加器中的值与地址所指的存储器或端口的数据相加,结果仍送回累加器中。
4)AND相与。
该操作将累加器的值与地址所指的存储器或端口的数据相与,结果仍送回累加器中。
5)XOR异或。
该操作将累加器的值与指令中给出地址的数据异或,结果仍送回累加器中。
6)LDA读数据。
该操作将指令中给出地址的数据放入累加器。
7)STO写数据。
该操作将累加器的数据放入指令中给出的地址。
8)JMP无条件跳转语句。
该操作将跳转至指令给出的目的地址,继续执行。
RISCCPU是8位微处理器,一律采用直接寻址方式,即数据总是放在存储器中,寻址单元的地址由指令直接给出。
这是最简单的寻址方式。
3.1.2时钟发生器
时钟发生器clkgen利用外来时钟信号clk来生成一系列时钟信号clk1、fetch、alu_clk送往CPU的其他部件。
其中fetch是外来时钟clk的八分频信号。
利用fetch的上升沿来触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地
址和数据地址。
clk1信号用作指令寄存器、累加器、状态控制器的时钟信号。
alu_clk
则用于触发算术逻辑运算单元[]。
时钟发生器如图3-3。
图3-3时钟发生器
首先对时钟发生器模块进行编译,VerilogHDL模块如部分代码如图3-4。
图3-4时钟发生器VerilogHDL模块部分代码
模块编译成功如图3-5。
图3-5时钟发生器模块编译图
时钟发生器模块的仿真图如图3-6、3-7。
图3-6时钟发生器仿真图
图3-7时钟发生器仿真图
由于在时钟发生器的设计中采用了同步状态机的设计方法,不但使clk_gen模块的源程序可以被各种综合器综合,也使得由其生成的clk1、clk2、clk4、fetch、alu_clk在跳变时间同步性能上有明显的提高,为整个系统的性能提高打下了良好的基础。
当rest为高电平时,alu_clk、fetch和clk2始终处于低电平状态,clk4处于高电平状态,clk1与输入时钟clk保持相反状态如图3-6;
当rest为低电平时,时钟下降沿到来时,执行s1状态alu_clk和clk2均取自己的相反状态,在rest为低电平状态时,每当时钟下降沿到来时,就会执行下一个参数状态如图3-7。
3.1.3指令寄存器
顾名思义,指令寄存器用于寄存指令。
指令寄存器的触发时钟是clk1,在clk1的正沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中。
但并不是每个clk1的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。
什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。
load_ir信号通过ena口输入到指令寄存器。
复位后,指令寄存器被清为零。
每条指令为2个字节,即16位。
高3位是操作码,低13位是地址。
(CPU的地址总线为13位,寻址空间为8K字节。
)本设计的数据总线为8位,所以每条指令需取两次。
先取高8位,后取低8位。
而当前取的是高8位还是低8位,由变量state记录。
state为零表示取的高8位,存入高8位寄存器,同时将变量state置为1。
下次再寄存时,由于state为1,可知取的是低8位,存入低8位寄存器中[]。
图3-8指令寄存器
编译成功如图3-9。
图3-9指令寄存器模块编译图
仿真结果如图3-10。
图3-10指令寄存器模块仿真图
当rst为高电平时不读取任何数据,当rst为低平时,且CPU状态控制器load_ir为低电平时通过ena口传输给指令寄存器,当时钟信号clk1正沿触发下,开始读取数据,先读高8位,再度低8位,如上图;
在rst为低电平,ena口输入低电平情况下,读取高八位。
3.1.4累加器
图3-11累加器
累加器用于存放当前的结果,它也是双目运算其中一个数据来源。
复位后,累加器的值是零。
当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk1时钟正跳沿时就接收来自于数据总线的数据[]。
在中央处理器CPU中,累加器(accumulator)是一种暂存器,它用来储存计算所产生的中间结果。
如果没有像累加器