当前位置:文档之家› 8位RISC微处理器设计与仿真

8位RISC微处理器设计与仿真

8位RISC微处理器设计与仿真
8位RISC微处理器设计与仿真

本科学生毕业论文

论文题目:8位RISC微处理器设计与仿真学院:电子工程学院

年级:2008级

专业:集成电路设计与集成系统

姓名:

学号:

指导教师:

2012年5月12日

摘要

CPU即中央处理单元的英文缩写,它是计算机的核心部件。计算机进行信息处理可分为将数据和程序(即指令序列)输入到计算机的存储器中和从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。因此它必须具有取指令、分析指令、执行指令的功能。

RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器。不过它虽然容易,却也不失CPU的基本功能和结构。本文对RSIC CPU 的结构、实现进行了讨论,详细介绍了如何设计RSIC CPU ,并且立足于RSIC CPU 设计实例,用Verilog HDL语言编写了模块,以EDA工具Quartus II进行仿真,全面而系统地介绍了RSIC CPU设计设计实例从模块划分、设计输入、功能仿真、逻辑综合、时序仿真等各环节的流程和方法。同时本CPU的总体结构到局部功能的实现采用了自顶向下的设计方法和模块化的设计思想。

关键词

RISC CPU;Verilog HDL;功能仿真

Abstract

CPU is the the acronym of Central Pressing Unit.it is the centre of computer.There are two parts:taking the data and program(order-array)put in the computer and carry out the program from the first order,receive the result,then finish the running.The function of CPU is coordination and control every part to carry out the order,make it go well,so the CPU are provided with the function of get analyse and carry out the order.

RISC(reduced instruction set computer)CUP means that make the CPU as simple as possible,it is simple,but it is provided with function and constraction as a CPU , This paper discusses the construction of RISC CPU and introduces how to design a RISC CPU.Then the paper focuses on an 8 bits RISC CPU. Combined with EDA tools——Quartus II simulation tool it comprehensively and systematacially introduces the flow and methodology of RISC CPU design which is from module partition,design import,function simulation,logic synthesis,timing simulation.At the same time,the construction of CPU and function of part with the design ideology frome top to bottom.

Key words

RISC CPU;Verilog HDL;Function Simulation

目录

摘要 ............................................................................................................................................ I Abstract ................................................................................................................................... II

前言 (1)

第一章CPU与RISC CPU (2)

1.1 CPU概述 (2)

1.1.1 基本原理 (2)

1.1.2基本结构 (2)

1.2 CPU发展与前景 (3)

1.2.1 CPU的发展史 (3)

1.2.2 CPU多核的必然 (3)

1.3 RISC CPU介绍 (4)

1.4本章小结 (4)

第二章语言与操作工具的概述 (5)

2.1 Verilog HDL语言概述 (5)

2.1.1 HDL概念与发展史 (5)

2.1.2 Verilog HDL语言特点 (5)

2.2 QuartusII概述 (6)

2.2.1 QuartusII概念与发展史 (7)

2.2.2 QuartusII特点 (7)

2.3本章小结 (7)

第三章RISC CPU结构 (9)

3.1 RISC CPU各个子模块的功能和设计思想 (9)

3.1.1 RISC CPU寻址方式和指令系统 (10)

3.1.2 时钟发生器 (10)

3.1.3 指令寄存器 (12)

3.1.4 累加器 (16)

3.1.5 算术运算器 (17)

3.1.6 数据控制器 (18)

3.1.7 地址多路器 (20)

3.1.8 程序计数器 (21)

3.1.9 状态控制器 (22)

3.2 外围模块 (26)

3.2.1 地址译码器 (26)

3.2.2 RAM (28)

3.2.3 ROM (30)

3.3本章小结 (31)

第四章RISC CPU功能验证 (32)

4.1 RISC CPU 操作和时序 (32)

4.1.1 系统的复位和启动操作 (33)

4.1.2 总线读操作 (33)

4.1.3 总线写操作 (34)

4.2本章小结 (34)

结论 (35)

参考文献 (36)

附录 (38)

致谢 (52)

前言

21世纪,人类进入了信息化的时代,CPU作为集成电路的高端产品,随着半导体工艺水平的发展,遵守摩尔定律发展规律,CPU性能每过18个月就会翻一番。CPU从最初发展至今已经有几十年的历史了,这期间,按照其处理信息的字长,CPU可以分为:四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器。

CPU是Central Processing Unit-中央处理器的缩写,它是计算机中最重要的一个部分,由运算器和控制器组成,其内部结构归纳起来可以分为控制单元、逻辑单元和存储单元三大部分,这三个部分相互协调,便可以进行分析,判断、运算并控制计算机各部分协调工作。CPU能对指令进行译码并进进行执行规定的动作,可以进行算术和逻辑运算,能与存储器、外设交换数据、提供整个系统所需要的控制。CPU是一个复杂的数字逻辑电路,但是基本的逻辑并不复杂。

第一章CPU与RISC CPU

本节将简单介绍CPU特点、功能作用、发展历程以及CPU基本结构。通过本章,我们将对CPU有一个简单的认识和了解。

1.1 CPU概述

中央处理器(Central Processing Unit,CPU),是电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。所谓的计算机的可编程性主要是指对CPU的编程。

CPU是计算机中的核心配件,是一台计算机的运算核心和控制核心。计算机中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。CPU内部存储器和输入/输出设备是电子计算机的三大核心部件。CPU是由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态总线构成。

1.1.1 基本原理

CPU的主要运作原理,不论其外部还是内部结构,都是执行储存于被称为程式里的一系列指令,在此讨论的是遵循普遍的架构设计的。程式以一系列数字储存在电脑记忆体中。几乎所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。

1.1.2基本结构

CPU包括运算逻辑部件、寄存器部件和控制部件。CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。

指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字和特征码。有的指令中也直接包含操作数本身[1]。

1.2 CPU发展与前景

1.2.1 CPU的发展史

从20世纪70年代开始,由于集成电路的大规模使用,把本来需要由数个独立单元构成的CPU集成为一块微小但功能空前强大的微处理器时。这个名称及其缩写才真正在电子计算机产业中得到广泛应用。尽管与早期相比,CPU在物理形态、设计制造和具体任务的执行上都有了戏剧性的发展,但是其基本的操作原理一直没有改变。

1971年,当时还处在发展阶段的Intel公司推出了世界上第一台真正的微处理器--4004。这不但是第一个用于计算器的4位微处理器,也是第一款个人有能力买得起的电脑处理器!4004含有2300个晶体管,功能相当有限,而且速度还很慢,从此以后,Intel公司便与微处理器结下了不解之缘。可以这么说,CPU的历史发展历程其实也就是Intel公司X86系列CPU的发展历程,就通过它来展开的“CPU历史之旅”。

这个标准化趋势始于由单个晶体管组成的大型机和微机年代,随着集成电路的出现而加速。集成电路使得更为复杂的CPU可以在很小的空间中设计和制造出来(在微米的量级)。

1990年,高速CPU时代的腾飞Intel公司推出的80386 SL和80386 DL都是低功耗、节能型芯片,主要用于便携机和节能型台式机。80386 SL与80386 DL的不同在于前者是基于80386SX的,后者是基于80386DX的,但两者皆增加了一种新的工作方式:系统管理方式。当进入系统管理方式后,CPU 就自动降低运行速度、控制显示屏和硬盘等其它部件暂停工作,甚至停止运行,进入“休眠”状态,以达到节能目的。CPU的标准化和小型化都使得这一类数字设备在现代生活中的出现频率远远超过有限应用专用的计算机。现代微处理器出现在包括从汽车到手机到儿童玩具在内的各种物品中。人们又进入了奔腾时代、酷睿时代[2]。

1.2.2 CPU多核的必然

厂商的微处理器发展计划随着64位处理器的来临,英特尔特制定了IA64的发展蓝图,将采用多种方法提升高端处理器安腾的性能这些方法包括提高时钟频率,加入额外地处理内核,改善总体架构效率,以及提升L1、L2、L3高速缓存容量和速度。英特尔

推出了全新的代号为TANGLEWOOD的处理器,这是一种集成了16个内核的CPU,它将带有海量的缓存,和更高的主频。而功耗不会高于现在任何的安腾处理器。这将使服务器设计无需采用水冷等特殊的散热措施。未来产品将全面采用超线程和多核心技术,新的微结构逐步运用于普通桌面产品上。高速缓存容量和时钟频率将不断攀升,近日,英特尔宣布了其未来两年双核心技术的发展蓝图,再命名方式上英特尔双核心处理器将不会沿用目前PENTUM 4的命名方式,新的桌面双核心处理技术将被简单成为奔腾D和CPRE2 DUO,而架构上由目前的单核心没有多大区别,奔腾D不仅是HT技术,而酷睿由于2的支持将可以处理并行4线程任务。

除此以外,两款芯片均支持800兆赫兹缓存容量也一样。虽然摩尔定律的神话以告终结,在短时间内,频率提升似乎已经暂缓了脚步,但是相信科技仍会有方法让我们用上更高性能的处理器,相信在摩尔后时代,多核心处理器将会继续遵循着摩尔定律,从而使得处理器技术得以不断的得以提升和发展[3]。

1.3 RISC CPU介绍

RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。

1.4本章小结

本章主要介绍CPU特点、功能、作用、发展历程以及CPU基本结构,以及今后CPU 多核的必然性,借此引出RISC CPU的定义,通过本章的介绍,能让读者对CPU的整体结构有一个较深的理解,使读者明白CPU存在的跨时代意义,这样能对后续的RISC CPU学习有很大帮助。

第二章语言与操作工具的概述

2.1 Verilog HDL语言概述

本节将简单介绍Verilog HDL语言特点、开发流程,以及Verilog程序的基本结构。通过本章,我们将对Verilog HDL有一个简单的认识和了解。

2.1.1 HDL概念与发展史

Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。

1981年Gateway Automation(GDA)硬件描述语言公司成立,1983年该公司的Philip Moorby首创了Verilog HDL,Moorby后来成为Verrlog HDL-XL的主要设计者和Cadence 公司的第一合伙人。又经过多年的发展,1993年,几乎所有ASIC厂商都开始支持Verilog HDL,并且认为Verilog HDL-XL是最好的仿真器。同时,OVI推出2.0版本的Verilong HDL规范,IEEE接收将OVI的Verilong HDL2.0作为IEEE标准的提案,1995年12月,IEEE制定了Verilong HDL的标准IEEE1364-1995。任何新生事物的产生都有它的历史沿革,早期的硬件描述语言是以一种高级语言为基础,加上一些特殊的约定而产生的,目的是为了实现RTL级仿真,用以验证设计的正确性,而不必像在传统的手工设计过程中那样,必须等到完成样机后才能进行实测和调试。

2.1.2 Verilog HDL语言特点

下面列出的是Ve r i l o g硬件描述语言的主要能力:

基本逻辑门,例如and、o r和nand等都内置在语言中。

用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。

可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。

Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。能够描述层次设计,可使用模块实例结构描述任何层次。设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。Verilog HDL不再是某些公司的专有语言而是IEEE标准。人和机器都可阅读Verilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。

Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。能够使用内置开关级原语在开关级对设计完整建模。同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。

Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。在行为级描述中,Verilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。能够使用门和模块实例化语句在结构级进行结构描述。在Verilog HDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。

Verilog HDL还具有内置逻辑函数,例如&(按位与)和|(按位或)。对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。可以显式地对并发和定时进行建模。提供强有力的文件读写能力。语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果[4]。

2.2 QuartusII概述

本节将简单介绍Verilog HDL语言特点、开发流程,以及Verilog程序的基本结构。通过本章,我们将对Verilog HDL有一个简单的认识和了解。

2.2.1 QuartusII概念与发展史

Quartus II是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

2.2.2 QuartusII特点

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP 应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

Altera Quartus II作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎[5]。

2.3本章小结

本章主要介绍了RISC CPU设计的开发语言和操作工具,对HDL语言的概念和发

展史进行了详细的介绍,并且对设计所用语言Verilog HDL语言特点进行了详细讲解,而后进行操作工具QuartusII软件的概念与发展史以及QuartusII特点进行了介绍,能让读者对RISC CPU的设计方法和设计流程有个整体的了解。

第三章RISC CPU结构

3.1 RISC CPU各个子模块的功能和设计思想

RISC CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂。我们可把它分成八个基本部件:1)时钟发生器2)指令寄存器3)累加器4)RISC CPU算术逻辑运算单元5)数据控制器6)状态控制器7)程序计数器8)地址多路器。各部件的相互连接关系见图3-1。其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。各部件之间的相互操作关系则由状态控制器来控制。各部件的具体结构和逻辑关系在下面的小节里逐一进行介绍[6]。

图3-1各部件相互连接关系图

3.1.1 RISC CPU寻址方式和指令系统

RISC CPU的指令格式如图3-2。

图3-2 RISC指令格式

它的指令系统仅由8条指令组成:

1) HLT 停机操作。该操作将空一个指令周期,即8个时钟周期。

2) SKZ 为零跳过下一条语句。该操作先判断当前alu中的结果是否为零,若是零就跳过下一条语句,否则继续执行。

3) ADD 相加。该操作将累加器中的值与地址所指的存储器或端口的数据相加,结果仍送回累加器中。

4) AND 相与。该操作将累加器的值与地址所指的存储器或端口的数据相与,结果仍送回累加器中。

5) XOR 异或。该操作将累加器的值与指令中给出地址的数据异或,结果仍送回累加器中。

6) LDA 读数据。该操作将指令中给出地址的数据放入累加器。

7) STO 写数据。该操作将累加器的数据放入指令中给出的地址。

8) JMP 无条件跳转语句。该操作将跳转至指令给出的目的地址,继续执行。

RISC CPU是8位微处理器,一律采用直接寻址方式,即数据总是放在存储器中,寻址单元的地址由指令直接给出。这是最简单的寻址方式。

3.1.2 时钟发生器

时钟发生器clkgen利用外来时钟信号clk来生成一系列时钟信号clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外来时钟clk的八分频信号。利用fetch的上升沿来触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地址和数据地址。clk1信号用作指令寄存器、累加器、状态控制器的时钟信号。alu_clk 则用于触发算术逻辑运算单元[7]。

时钟发生器如图3-3。

图3-3时钟发生器

首先对时钟发生器模块进行编译,Verilog HDL模块如部分代码如图3-4。

图3-4 时钟发生器Verilog HDL模块部分代码

模块编译成功如图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位寄存器中[8]。

图3-8指令寄存器

编译成功如图3-9。

图3-9指令寄存器模块编译图

仿真结果如图3-10。

图3-10指令寄存器模块仿真图

当rst为高电平时不读取任何数据,当rst为低平时,且CPU状态控制器load_ir为低电平时通过ena口传输给指令寄存器,当时钟信号clk1正沿触发下,开始读取数据,先读高8位,再度低8位,如上图;在rst为低电平,ena口输入低电平情况下,读取高八位。

指令寄存器代码

module register(opc_iraddr,data,ena,clk1,rst);

output [15:0] opc_iraddr;

input [7:0] data;

input ena, clk1, rst;

reg [15:0] opc_iraddr;

reg state;

always @(posedge clk1)

begin

if(rst)

begin

opc_iraddr<=16'b0000_0000_0000_0000;

state<=1'b0;

end

else

begin

if(ena)

begin

case(state)

1'b0: begin

opc_iraddr[15:8]<=data;

state<=1;

end

1'b1: begin

opc_iraddr[7:0]<=data;

state<=0;

end

/*default: begin

opc_iraddr[15:0]<=16'bxxxxxxxxxxxxxxxx;

state<=1'bx;

end */

endcase

end

else

begin

state<=1'b0;

end

end

相关主题
文本预览
相关文档 最新文档