cpu报告.docx

上传人:b****5 文档编号:5791816 上传时间:2023-01-01 格式:DOCX 页数:39 大小:1,007.88KB
下载 相关 举报
cpu报告.docx_第1页
第1页 / 共39页
cpu报告.docx_第2页
第2页 / 共39页
cpu报告.docx_第3页
第3页 / 共39页
cpu报告.docx_第4页
第4页 / 共39页
cpu报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

cpu报告.docx

《cpu报告.docx》由会员分享,可在线阅读,更多相关《cpu报告.docx(39页珍藏版)》请在冰豆网上搜索。

cpu报告.docx

cpu报告报告1.引言引言集成电路(IntegratedCircuit,IC)是电子电路,但它又不同于一般意义上的电子电路,它把成千上万的电子元件包括晶体管、电阻、电容甚至电感集成在微小的芯片上。

正是这种奇妙的设计和制造方式使得集成电路为人类社会的进步创造了空前的奇迹,它不仅给人类的生产建设和科学研究带来了巨大便利,而且也彻底改变了人类文明和人们日常生活的面目,可以毫不夸张地说,现今每个人生活的方方面面或多或少都和集成电路有关。

CPU作为集成电路的高端产品,随着半导体工艺水平的发展,遵守摩尔定律发展规律,CPU性能每过18个月就会翻一番。

CPU从最初发展至今已经有几十年的历史了,这期间,按照其处理信息的字长,CPU可以分为:

四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器。

CPU是CentralProcessingUnit中央处理器的缩写,它是计算机中最重要的一个部分,由运算器和控制器组成,其内部结构归纳起来可以分为控制单元、逻辑单元和存储单元三大部分,这三个部分相互协调,便可以进行分析,判断、运算并控制计算机各部分协调工作。

计算机体系结构中的一个根本性的变革是RISC处理器的出现。

RISC即精简指令集计算机(ReducedInstructionSetComputer)的缩写。

RISC-CPU与一般的CPU相比不仅只是简化了指令系统,而且是通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。

从实现的途径看,RISC-CPU与一般的CPU的不同处在于:

它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。

所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。

RISC有一套优化过的指令架构,它是根据著名的80/20法则所订立。

早在上个世纪60年代,计算机科学家们发现,计算机中80%的任务只是动用了大约20%的指令,而剩下20%的任务才有机会使用到其他80%的指令。

如果对指令系统作相应的优化,就可以从根本上快速提高处理器的执行效率。

IBM公司在1975年成功开发出第一款RISC处理器,从此RISC架构开始走进超级计算机中。

由于指令高度简约,RISC处理器的晶体管规模普遍都很小而性能强大,深受超级计算机厂商所青睐。

很快,许多厂商都开发出了自己的RISC指令系统,除了IBM的Power和PowerPC外,还有DEC的Alpha、SUN的SPARC、HP的PA-RISC、MIPS技术公司的MIPS、ARM公司的ARM等。

它的应用范围也远比X86来得广泛,大到各种超级计算机、工作站、高阶服务器,小到各类嵌入式设备、家用游戏机、消费电子产品、工业控制计算机,都可以看到RISC的身影。

RISC处理器可以说既简单又复杂:

简单之处在于,相比于复杂指令集CISC(ComplexInstructionSetComputer,复杂指令系统计算机),这种处理器的指令和变量非常少,正如它的英文字母缩写RSIC所代表的“精简指令集”的含义一样;说RSIC复杂,是因为它们容易实现更高的并行性,而这个特点只有与设计得很好的编译器结合起来,才能显现出其优越性。

RISC与CISC(复杂指令,一般指普通的X86CPU)比较,有以下优势:

(1)指令简单而且少。

(2)指令系统选用那些使用频度高的简单指令和一些实用的但不十分复杂的指令,一般指令不超过100条。

(3)指令字长固定,寻址方式一般不超过四种,指令格式也不超过四种。

(4)所有指令(几乎所有指令)均在单指令周期完成。

(5)指令系统中只允许存(STORE)和取(LOAD)指令访问主存,其它指令均在寄存器之间进行。

(6)CPU中设置大量的寄存器,称作寄存器堆。

(7)指令的运行采用高效的流水线方式。

(8)以硬布线控制逻辑为主,不用或少用微码。

(9)优化的编译程序,简单有效地支持高级语言。

(10)超低功耗。

这里,本文就在学习FPGA的基础上,运用仿真设计软件ISE来实现一个简单的教学用的RISC_CPU。

这里,并不关心CPU总体设计的合理性,这里涉及的每个RISC_CPU的模块,都可以仿真,并综合,也就是说,这是一个能真正通过具体电路结构而实现的CPU。

希望可以通过这次设计,达到下面几个基本目的:

(1)熟悉和了解RISC_CPU的基本原理和结构。

(2)了解VerilogHDL仿真和综合工具。

(3)展示Verilog设计方法对软/硬件联合设计和验证的意义。

(4)学习掌握一些常用的Verilog语法和验证方法。

2RISC-CPU的架构设计的架构设计2.1什么是什么是CPUCPU即中央处理单元的英文缩写,它是计算机的核心部件。

计算机进行信息处理可分为两个步骤:

(1)将数据和程序(即指令序列)输入到计算机的存储器中。

(2)从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。

CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。

因此它必须具有以下基本功能:

a)取指令:

当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。

b)分析指令:

即指令译码。

是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。

c)执行指令:

根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。

将其功能进一步细化,可概括如下:

1)能对指令进行译码并执行规定的动作;2)可以进行算术和逻辑运算;3)能与存储器,外设交换数据;4)提供整个系统所需要的控制;2.2RISC-CPU的架构设计的架构设计尽管各种CPU的性能指标和结构细节各不相同,但它们所能完成的基本功能相同。

一个基本的CPU要包括三部分功能:

数据的存储、数据的运算和控制部分。

与之相对应的硬件结构也分为三部分:

存储器、数据通路和控制器。

存储器存放指令和数据;数据通路包括ALU、程序计数器等,主要功能是对操作数进行运算,得到结果,并产生程序计数器的值,作为要执行的下一条指令的地址;控制器内有指令寄存器,它对指令进行译码,产生相应的控制信号,完成对存储器和数据通路部分的控制。

存储器、数据通路和控制器这三部分的基本关系如图1所示。

图1CPU基本结构

(1)存储器中存放了要执行的指令和相应数据。

存储器的读写信号由控制器给出。

存储器的地址来源有两个:

程序计数器和指令寄存器。

在取新指令时,用程序计数器的值作为存储器地址;在执行指令时,用指令中的地址部分作为存储器地址。

(2)数据通路主要包括累加器、程序计数器和算术逻辑单元。

累加器用于保存参加运算的数据以及运算的中间结果。

实际上,累加器也是寄存器,不过,它有特殊性,即许多指令执行过程以累加器为中心。

往往在运算指令前,累加器中存放一个操作数,指令执行后,由累加器保存运算结果。

另外输入输出指令一般也通过累加器来完成。

程序计数器指向下一条要执行的指令。

由于程序一般存放在内存的一个连续区域,所以,顺序执行程序时,每取一个指令字节,程序计数器便加一。

算术逻辑单元是专门用来处理各种运算的数据信息的,它可以进行加、减、乘、除算术运算和与、或、非、异或等逻辑运算。

(3)控制器产生相应的控制信号送到时序和控制逻辑电路,从而,组合成外部电路所需要的时序和控制信号。

这些信号送往其他部件,以控制这些部件协调工作。

下面图2是一个CPU的简单架构:

图2CPU简单架构本设计的RSIC-CPU数据总线为8位,而每条指令为两个字节(高3位为操作码,低13位是地址),所以每条指令需取两次。

CPU每次取到指令后,其状态控制器(CPU控制中心)分析操作码后,产生一系列控制信号,启动或停止某些部件。

其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。

由功能分析,RISC-CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂,可把它分成以下八个基本部件,1)时钟发生器2)指令寄存器3)累加器4)RISCCPU算术逻辑运算单元5)数据控制器6)状态控制器7)程序计数器8)地址多路器各个模块之间的互连关系如下图3:

图3RISC_CPU结构图2.3RISC_CPU指令集简介指令集简介RISC的最大的特点是简单且结构相似的指令集在流水线中高效并行执行。

相比于复杂指令集CISC,RISC处理器的指令和变量非常少。

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

这是最简单的寻址方式。

其指令格式如下图4,其中,操作码为前3位,可以实现8条指令;地址为后13位,可寻址213(8K字节)的储存器地址空间。

指令集如表1所示,其中PC代表程序计数(ProgramCounter),A表示累加器存储的数据,M表示存储器中存储的数据。

图4RISC_CPU指令格式表1RISC_CPU指令集下面对这几条指令进行详细说明:

1)HLT停机操作。

该操作将空一个指令周期,即8个时钟周期。

2)SKZ为零跳过下一条语句。

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

3)ADD相加。

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

4)AND相与。

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

5)XOR异或。

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

6)LDA读数据。

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

7)STO写数据。

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

8)JMP无条件跳转语句。

该操作将跳转至指令给出的目的地址,继续执行。

2.4RISC-CPU的状态时序和控制信号的状态时序和控制信号前面已经提到指令是CPU最基本的操作,CPU能正常工作就靠这些指令集协调执行,那么是由谁来控制指令有条不紊地工作呢?

答案当然是CPU的核心部件控制器。

如果把指令比作人体的双手的话,那么无疑控制器就好比人体的大脑。

控制器件得到的当前指令进行译码,产生相应的控制信号送到时序和控制逻辑电路,从而合成外部电路所需要的时序和控制信号。

这些信号送到CPU其它部件,以控制这些部件协调工作。

CPU何时进行读指令,读写I/O端口,RAM区等操作,都是由状态机来控制的。

控制信号生成逻辑的功能包括:

(1)生成存储器的读写信号。

(2)控制PC的赋值。

在跳转指令时,PC的值由指令寄存器给出;其它情况下,由上一个值累加得到。

(3)将解码出的操作码送给数据通路ALU,控制ALU的运行。

(4)控制累加器是否要从总线上得到数据。

设计时要根据当前指令的类型和所处的周期来决定哪些控制信号有效。

这里将一个完整的操作分成8个状态,各个状态的作用如表2。

表2RISC-CPU状态控制表比如对于ADD指令,控制时序信号如下:

第1个状态,存储器读信号有效,取高8位指令代码。

第2个状态,存储器读信号有效,取低8位指令代码,且PC增1。

第3个状态,将指令从数据上载入到指令寄存器中。

第4个状态,程序计数器使能信号有效,指示PC地址加1,指向下一条指令。

第5个状态,存储器读信号有效,此时存储器地址取指令寄存器的地址。

因此从存储器中读出的是Maddr。

第6个状态,逻辑算术单元计算A+Maddr,并将结果送到输出端。

这时候累加器使能信号有效,准备好输出结果送到累加器中存放。

第7个状态,将逻辑算术单元的结果锁存到累加器。

第8个状态,各个控制信号保持不变。

对于JMP指令,控制时序信号如下:

前4个状态时的控制信号与ADD指令一样。

第5个状态,使得选择总线输入地址使能信号有效,用指令寄存器的地址部分更新PC的值。

第6个状态,所存目标地址。

第7和8状态,各个控制信号保持不变。

对于STO指令,控制时序信号如下:

前4个状态时的控制信号与ADD指令一样。

第5个状态,存储器写信号有效。

第6个状态,将累加器的值送到逻辑算术单元的输出端。

第7和8状态,各个控制信号保持不变。

这样,一个八位的RISC-CPU的基本工作流程就介绍清楚了,也实现了要求的基本功能。

下面就要对其每一个模块的具体工作原理,具体实现进行详细介绍了。

3.八位八位RISC-CPU的设计实现的设计实现八位RISC-CPU设计实现将分为模块划分、模块设计、功能仿真、逻辑综合、时序仿真、布局布线、版图验证几个部分。

设计流程如下面图5所示:

图5RISC-CPU设计流程图3.1八位八位RISC-CPU各个子模块的功能和设计思想各个子模块的功能和设计思想八位RISC-CPU可以划分为八个基本部件:

时钟发生器、指令寄存器、累加器、RISC-CPU算术逻辑运算单元、数据输出控制器、状态控制器、程序计数器、地址多路器,下面将具体阐述各子模块的功能和设计思想。

3.1.1时钟发生器时钟发生器时钟发生器clkgen利用外来时钟信号clk来生成一系列时钟信号clk1、fetch、alu_clk送往CPU的其他部件。

其中fetch是外来时钟clk的八分频信号。

利用fetch的上升沿来触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地址和数据地址。

clk1信号用作指令寄存器、累加器、状态控制器的时钟信号。

alu_clk则用于触发算术逻辑运算单元。

时钟发生器的框图结果如下图6:

图6时钟发生器时钟发生器clkgen的波形见下图7所示:

图7时钟发生器的波形3.1.2指令寄存器指令寄存器顾名思义,指令寄存器用于寄存指令。

如图8,指令寄存器的触发时钟是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.1.3累加器累加器累加器用于存放当前的结果,它也是双目运算其中一个数据来源,如图9所示。

复位后,累加器的值是零。

当累加器通过ENA口收到来自CPU状态控制器LOAD_ACC信号时,在CLK1时钟正跳沿时就收到来自于数据总线的数据。

图9累加器结构3.1.4算术运算器算术运算器算术逻辑运算单元根据输入的8种不同操作码分别实现相应的加、与、异或、跳转等8种基本操作运算,如图10所示。

利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作。

图10算术运算器的结构在高速通信系统的设计中,如何提高系统的工作速度是这一系统设计成败的关键。

本设计虽然着手于简单的RISC-CPU开发流程,但是对于如何提高系统工作速度也进行了探讨。

对于RISC-CPU中的算术运算单元的要求当然是工作速度。

流水线的设计思想:

所谓流水线处理如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。

这样可以大大提高工作速度。

流水线设计模式的确能提高系统的工作速度,对于要求速度很高并且计算量很大的设计,流水线方法能有效地解决这类问题。

但是流水线设计方法是以牺牲面积来换取速度,所以在实际应用中,要综合考虑速度和面积方面的问题,择优设计。

3.1.5数据控制器数据控制器数据控制器的作用是控制累加器数据输出,如图11,由于数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。

有时要传输指令,有时要传送RAM区或接口的数据。

累加器的数据只有在需要往RAM区或端口写时才允许输出,否则应呈现高阻态,以允许其它部件使用数据总线。

所以任何部件往总线上输出数据时,都需要一控制信号。

而此控制信号的启、停,则由CPU状态控制器输出的各信号控制决定。

数据控制器何时输出累加器的数据则由状态控制器输出的控制信号DATACTL_ENA决定。

图11数据控制器结构3.1.6地址多路器地址多路器地址多路器用于选择输出的地址是PC(程序计数)还是数据/端口地址,如图12所示。

每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址。

后4个时钟周期用于对RAM或端口的读写,该地址由指令中给出。

地址的选择输出信号由时钟信号的8分频信号FETCH提供。

图12地址多路器结构3.1.7程序计数器程序计数器程序计数器用于提供指令地址,如图13。

以便读取指令,指令按地址顺序存放在存储器中。

有两种途径可形成指令地址:

其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。

下面就来详细说明PC地址是如何建立的。

图13程序计数器结构复位后,指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行。

每条指令执行完需2个时钟,这时PC_ADDR已被增2,指向下一条指令(因为每条指令占两个字节)。

如果正执行的指令是跳转语句,这时CPU状态控制器将会输出LOAD_PC信号,通过LOAD口进入程序计数器。

程序计数器(PC_ADDR)将装入目标地址(IR_ADDR),而不是增2。

3.1.8状态控制器状态控制器状态控制器如图14,由两部分组成:

(1)状态机(上图中的MACHINE部分)

(2)状态控制器(上图中的MACHINECTL部分)图14状态控制器结构状态机控制器接受复位信号RST,当RST有效时通过信号ENA使其为0,输入到状态机中停止状态机的工作。

状态机是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。

CPU何时进行读指令读写I/O端口,RAM区等操作,都是由状态机来控制的。

状态机的当前状态,由变量state记录,state的值就是当前这个指令周期中已经过的时钟数。

指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的操作。

(1)第1个时钟,因为CPU状态控制器的输出:

RD和LOAD_IR为高电平,其余均为低电平。

指令寄存器寄存由ROM送来的高8位指令代码。

(2)第2个时钟,与上一时钟相比只是INC_PC从0变为1故PC增1,ROM送来低8位指令代码,指令寄存器寄存该8位代码。

(3)第3个时钟,空操作。

(4)第4个时钟,PC增1,指向下一条指令。

若操作符为HLT,则输出信号HLT为高。

如果操作符不为HLT,除了PC增一外(指向下一条指令),其它各控制线输出为零。

(5)第5个时钟,若操作符为AND、ADD、XOR或LDA,读相应地址的数据;若为JMP,将目的地址送给程序计数器;若为STO,输出累加器数据。

(6)第6个时钟,若操作符为AND、ADD或XOR,算术运算器就进行相应的运算;若为LDA,就把数据通过算术运算器送给累加器;若为SKZ,先判断累加器的值是否为0,如果为0,PC就增1,否则保持原值;若为JMP,锁存目的地址;若为STO,将数据写入地址处。

(7)第7个时钟,空操作。

(8)第8个时钟,若操作符为SKZ且累加器值为0,则PC值再增1,跳过一条指令,否则PC无变化。

本设计中所有模块的设计都是通过VerilogHDL硬件描述语言来实现的。

将在下一节中详细介绍。

3.2八位八位RISC_CPU各模块的各模块的VerilogHDL实现及仿真实现及仿真3.2.1时钟发生器的实现及仿真时钟发生器的实现及仿真时钟发生器的VerilogHDL实现代码如下:

moduleclk_gen(clk,reset,clk1,clk2,clk4,fetch,alu_clk);inputclk,reset;outputclk1,clk2,clk4,fetch,alu_clk;wireclk,reset;regclk2,clk4,fetch,alu_clk;reg7:

0state;parameterS1=8b00000001,S2=8b00000010,S3=8b00000100,S4=8b00001000,S5=8b00010000,S6=8b00100000,S7=8b01000000,S8=8b10000000,idle=8b00000000;assignclk1=clk;always(negedgeclk)if(reset)beginclk2=0;clk4=1;fetch=0;alu_clk=0;state=idle;endelsebegincase(state)S1:

beginclk2=clk2;alu_clk=alu_clk;state=S2;endS2:

beginclk2=clk2;clk4=clk4;alu_clk=alu_clk;state=S3;endS3:

beginclk2=clk2;state=S4;endS4:

beginclk2=clk2;clk4=clk4;fetch=fetch;state=S5;endS5:

beginclk2=clk2;state=S6;endS6:

beginclk2=clk2;clk4=clk4;state=S7;endS7:

beginclk2=clk2;state=S8;endS8:

beginclk2=clk2;clk4=clk4;fetch=fetch;state=S1;endidle:

state=S1;default:

state=idle;endcaseendendmodule在ISE软件中进行综合仿真,得到结果如下图15:

图15时钟发生器的仿真结果从图中,可以看出要求时钟发生器完成的基本功能都得以实现。

3.2.2指令寄存器的实现及仿真指令寄存器的实现及仿真指令寄存器的VerilogHDL实现代码如下:

moduleregister(opc_iraddr,data,ena,clk1,rst);output15:

0opc_iraddr;input7:

0data;inputena,clk1,rst;reg15:

0opc_iraddr;regstate;always(posedgeclk1)beginif(rst)beginopc_iraddr=16b0000_0000_0000_0000;state=1b0;endelsebeginif(ena)/如果加载指令寄存器信号load_ir到来,begin/分两个时钟每次8位加载指令寄存器c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1