文档库 最新最全的文档下载
当前位置:文档库 › 单周期CPU设计

单周期CPU设计

单周期CPU设计
单周期CPU设计

信息科学与工程学院

课程设计报告

课程名称:计算机组成原理与结构

题目:单周期CPU逻辑设计

年级/专业: XXXXXXXXXXXXXXX X 学生姓名:王侠侠、李怀民

学号: XXXXXXXXXXXXXXXXXXX

指导老师: XXXX

开始时间:2016年9月15日

结束时间:2016年11月15日

摘要

一、设计目的与目标

1.1 设计目的

1.2 设计目标

二、课程设计器材

2.1 硬件平台

2.2 软件平台

三、CPU逻辑设计总体方案

3.1 指令模块

3.2 部件模块

四、模块详细设计

4.1 指令设计模块

4.2 部件设计模块

五、实验数据

5.1 初始数据

5.2 指令数据

六、结论和体会

七、参考文献

本CPU设计实验以Quartus II 9.0为软件设计平台,以Cyclone 采III型号EP3C16F484C6为FPGA实测板。此CPU设计采用模块化设计方案,首先设计指令格式模块,此模块决定CPU各个部件的接口数据容量及数量,再对CPU各个部件独立设计实现,主要涉及的部件有:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元以及扩展单元。分部件的设计通过软件平台模拟仿真各部件的功能,在确保各部件功能正确的情况下,将所有部件模块整合在一起实现16位指令的CPU功能。再按照指令格式设计的要求,设计出一套能完整运行的指令,加载到指令存储器中,最终通过在FPGA实测板上实现了加2减1的循环运算效果,若要实现其他效果,也可更改指令存储器或数据存储器的数据而不需要对内部部件进行更改元件。

关键词:CPU设计、16位指令格式、模块化设计、Quartus软件、CPU各部件

一、设计目的与目标

1.1设计目的

1)了解Quartus II软件的使用,学习软件环境下设计CPU的基本过程;

2)在Quartus II平台上完成各个单元的设计,加深对每个单元(控制器、寄

存器、存储器等)工作原理的理解;

3)对各个单元组合而成的CPU进行指令测试,配合使用模拟仿真,了解指令和

数据在各个单元中的传输过程及方向。

1.2设计目标

1)设计一个单周期CPU,能实现基本的指令功能,如ADD,SUB指令实现对操作

数加减功能,LW,SW指令实现从存储器取数和存数,J指令实现指令间的跳转。

2)采用模块化设计CPU,通过模拟仿真保证各模块的正确性,以保证最终CPU

功能的正确性,能正确地在FPGA板上完成指令设计的效果。

3)通过设计合理的16位指令,实现从存储器取初始数和存数,对初始数进行

加减操作,通过修改存储器初始数据,实现FPGA上LED显示无限加n减m 的效果。

二、课程设计器材

2.1 硬件平台

本实验所需的硬件主要有:PC微型计算机和FPGA板--Cyclone III系列,型号EP3C16U484C6实验开发板以及USB连接线。

2.2 软件平台

1)操作系统:Win 7;

2)开发平台:Quartus II 9.0集成开发软件;

3)编程语言:VerilogHDL硬件描述语言。

三、CPU逻辑设计总体方案

单周期CPU设计方案从宏观上把握主要分为器件模块和指令/数据模块这两大模块,器件模块是指令模块的载体,指令数据在器件上流动,指令数据的格式是器件模块的主宰。所以当设计CPU时,我们采用模块化设计,单独对着两模块进行设计,考虑到指令数据模块的格式决定指令器件模块接口的数据容量大小,所以应先完成指令数据模块的格式设计。

图1 CPU宏观设计方案

3.1指令模块

3.1.1指令格式简要设计

本CPU实验是针对16位指令数据设计的,所以应当合理划分指令数据区间段的指令相应的功能。从下图2可以看出,16位指令数据划分为5个区间段,指令的[15-12]位作为控制位传入控制器产生控制信号,指令[11-9]位作为地址1从寄存器取数输出数据到寄存器1号输出口,指令[8-6]位作为地址2从寄存器取数输出数据到寄存器2号输出口,指令[5-3]位与指令[8-6]位作为数据选择器选择地址输入寄存器写地址口,指令[5-0]位作为扩展单元输入,扩展数据成16位。另外指令[11-0]位作为扩展输入,扩展成16位数据作为PC计数器的选择器一端。

图2 指令格式简要设计图

3.2 器件单元模块

此模块的设计是CPU设计的核心部分,它主要涉及到CPU中多个器件的设计。我们依然采用模块设计方案,把总体设计拆分成多个相互独立的器件,再对每部分器件单独设计。在此模块中包括:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元这六大主要单元。如下图2所示,展示出六大单元的设计方案以及六大单元之间的联系。

图3 器件模块设计方案图

从上图我们可以看出各单元之间的联系:初始数据从数据存储器RAM中取出,通过两种数据传入方式:一种是不经过数据选择器,另一种是经过数据选择器,数据传入到寄存器组中作为寄存器数据。而后当传入的是地址数据时,就从寄存器取出,经过ALU运算单元,将数据传入寄存器组中保存或传入数据存储器中保存。在整个过程中,PC计数器自动加1作为地址去指令存储器ROM中取指令作为此轮执行的指令数据,而控制器在整个过程中依据指令数据的指令码产生相应的控制信号(操作码)控制器件的运作,从而完成整个CPU的执行功能。下面我们将对主要的单元进行简要概述。

3.1.1寄存器组

寄存器组是作为保存数据的器件,故应使用时钟触发的D触发器(DFFE),等待一个时钟到来将数据传出去。本实验设计为16位CPU,故每个寄存器应为16位,即每个寄存器是由16个D触发器扩展而成。考虑到指令从寄存器取数位数为3位,所以可以设置8个寄存器用于保存数据,如果是写地址的3位指令通过74138(3-8译码器)译码作为寄存器的有效EN使能端输出数据;如果是读地址的3位指令数据通过8位扩展数据选择器(LPM-MUX)选择数据输出。

3.1.2控制器

控制器是作为CPU控制信号产生的器件,通过产生控制信号,使其他器件有效或无效,因此控制器的设计显得尤为重要。控制器的设计主要如下:先必须自己设计好各功能指令的4位01码(指令的[15-12]),然后针对某个控制信号,找出使其为1的功能指令,对每个功能指令的0位上取非,然后4位相与,之后将所有为1的功能指令相或,结果作为此控制信号。对每个控制信号执行重复操

作,控制器也就是这些信号的组合。

3.1.3存储器

存储器分为两种类型:一种是数据存储器RAM,另一种是地址存储器ROM。考虑到设计的方便,否则使用寄存器设计存储器也是可行的。

3.1.3.1数据储存器

数据存储器为RAM型,表示可读可写,所以数据储存器有4个端口,当写信号有效时,应给出写的地址及数据,再加上时钟信号,这里的数据存储器采用软件封装好的RAM-1-PORT存储器。

3.1.3.2指令存储器

指令存储器为ROM型,表示只读,所以地址存储器有2个端口,应给出读的地址信号以及时钟信号这里的数据存储器采用软件封装好的ROM-1-PORT存储器。

3.1.4PC计数器

PC计数器主要作为执行一条指令后,地址自动加1到指令存储器中取16位指令作为此轮操作。故PC计数器应能等待一个时钟后将加1后的数据送至指令存取器中,所以它应包括ALU累加器(一端为1)和寄存器(当一个时钟信号到来,将数据输出),书中还包括一个数据选择器,用于设置PC的值,以至于不会无限增长,实现J指令。

3.1.5数据选择器

数据选择器主要是解决数据来源问题,通过控制信号使数据选择器选择的数据端口不同,此数据选择器可选用软件封装的2选1选择器。

3.1.6ALU单元

ALU单元主要用于将输入端的两个数做加减操作,通过控制信号01的变化产生运算,该ALU可以使用软件封装的加减ALU(LPM-ADD-SUB),当控制信号为1时作加法,为0时作减法。

3.1.7符号扩展单元

符号扩展单元主要用于将不够16位的指令数据扩展成16位,作为输入数据的一端参与数据选择器运算,这里我们仅考虑最简单的扩展方式:将不足16位的指令数据由高位向低位依次补0直至数据长度为16位。

四、模块详细设计

4.1指令设计模块

4.1.1 指令处理流程

一般来说,CPU在处理指令时需要经过以下几个过程:

(1)取指令(IF):根据程序计数器PC中的指令地址,从指令存储器中取出一条指令,同时PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。

(2)指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,由指令的[15-12]位产生相应的操作控制信号,用于驱动执行状态中的各种操作。

(3)指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。

(4)存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。

(5)结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。

图4 单周期CPU指令处理过程

4.1.2 指令格式详细设计

本次CPU设计主要有5条功能指令,分别为ADD、SUB、LW、SW、J指令,对这5个功能指令的控制码分别设定为0101/0110/1001/0001/1010,现对5条指令各自的指令格式进行设计:

寄存器的数相加,结果数据存放至rd3位对应的寄存器的位置,reserved作为保留位。

寄存器的数相减,结果数据存放至rd3位对应的寄存器的位置,reserved作为保留位。

成16位数据相加,结果作为数据存储器地址,取出地址对应的数据存放到rt3位对应的寄存器中。

成16位数据相加,结果作为数据存储器地址A,将rt3位对应的寄存器的数据取出来,存放到A地址对应的存储器单元中。

4.2 器件单元模块

此模块的设计是CPU设计的核心部分,它是将众多模块整合在一起,在此模块中主要包括:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元这六大单元。如下图5所示,展示出模块间整合的总体效果,可以看出,每个模块的功能还是显而易见的,各模块间通过命名一致达到数据双向传输效果。

图5 CPU综合模块示意图

4.2.1寄存器组

由上面总体设计方案中指出,每个寄存器应该由16个D触发器构成,为了避免设计复杂,我们采用迭代的设计方法,即先由单个D触发器设计成包含2个D触发器模块,图6示出了由单个D触发器构成2个D触发器模块。为了避免篇幅颇多,这仅展示由8个D触发器构成最终16个D触发器的示意图,如图7,以及最终16位D触发器综合模块效果,如图8。

图6 单个D触发器构成2个触发器

图7 8个D触发器构成16个D触发器图8 16位D触发器综合模块

寄存器组作为数据保存的器件,当读取寄存器中的数据时,涉及读地址端口以及对应的输出数据端口,故应该有两个读地址端口,两个写地址端口;当写入寄存器数据时,涉及写的信号、写的地址以及写的数据也应该准备好,故应有一个写地址端口,一个数据准备端口以及一个写信号,同时数据的传送需要在一个时钟信号到来的上升沿操作,故应有一个时钟信号CLK,所以总共端口共有8个。在图9中展示出寄存器组的综合模块。

图9 寄存器组综合模块

下面我们来看寄存器组综合模块的详细设计,如图10所示。主要有3处值得注意:

●因为我们设计的从寄存器取数的指令位数为3位,所以最多可寻8个寄存器,

所以可看到图中示出了8个16位D触发器的综合模块。

●图中还有一个74138译码器,G1端为WE写信号,当要向寄存器存数时,应

使写信号有效,同时给出3位需要写的地址,将要写入的数据存至译码生成对应的寄存器中。

●同时图中还有2个8位数据选择器,主要是用于当读取寄存器数据时,给出

读取寄存器的地址,对应8位数据选择器输出对应寄存器中的数据。

图10 寄存器组详细设计

4.2.2控制器

控制器的设计是整个CPU的命脉,因为控制器产生的控制信号用于整个CPU 运作,针对某条功能指令,控制信号要能准确控制器件的运作。因此必须明确各

个控制信号的作用,如下表1所示以及控制信号和功能指令之间的关系,如下表2所示:

出某个信号在所有功能指令中为1的量,对相应功能操作码为0的位置改为非,再将4位相与,对不同的功能指令之间相或。假设功能操作码的4位从左向右依次对应S3、S2、S1、S0,则可以得出所以控制信号表达式:

RegDst=~S3S2~S1S0+~S3S2S1~S0;

ALUSrcB=S3~S2~S1S0+~S3~S2~S1S0;

ALUOp=~S3S2~S1S0+ S3~S2~S1S0+~S3~S2~S1S0;

RegWrite=~S3S2~S1S0+~S3S2S1~S0+ S3~S2~S1S0;

MemtoReg= S3~S2~S1S0;

MemWr=~S3~S2~S1S0;

PCSource=S3~S2S1~S0;

对应的逻辑电路图即是与非门的组合,如图11,示出了ALUOp的电路图实现,输入指令[15-12]的4位,通过功能指令内的相与和功能指令间的相或得出最后控制信号ALUOp的值,对于其他信号的电路实现这里就不举例了。

图11 ALUOp控制信号的电路实现

按照上述示例对所有控制信号的电路都能实现,则需要将所有控制信号模块整合在一起,因此可以得出如图12的控制器详细设计:输入的是指令[15-12]的控制码,输出7个控制信号,从图13可以看到控制器的综合模块接口。

图12 控制器的信号组合

图13 控制器综合模块

4.2.3存储器

为了省去不必要的设计,存储器模块我们采用的是软件封装好的Memory。本次设计将存储器分为数据存储器和指令存储器:数据存储器使用RAM-1-PORT,可读可写,主要用于存放数据,用于寄存器取数和存数;指令存储器使用ROM-1-PORT,只读,用于存放16位指令数据。

4.2.3.1 数据存储器

从图14可以看出,数据存储器RAM有4个输入端和1个输出端,能够实现将数据写入存储器操作,应该要有准备写入的数据,要写入的地址以及内存写操作控制信号,同时应有时钟信号控制,对应的输出端即从内存取出的数据。

图14 数据存储器RAM

4.2.3.2 指令存储器

从图15可以看出,指令存储器ROM有2个输入端和1个输出端,能够实现将指令数据从指令存储器中取出,输入端应有准备要取出指令的地址以及时钟信号,输出端即从指令存储器中取出的16位指令。

图15 指令存储器ROM

4.2.4 PC计数器

程序计数器是用于当每个时钟的上升沿到来后,PC计数器就自增1从指令存储器中取出对应增1的地址的指令数据,作为本轮运算的指令。所以PC计数器模块应该由图16所示的三部分组成:自增1的ALU单元、PC跳转数据选择器(主要用于实现J指令)以及暂存增1的指令数据的16位寄存器。从图中可以看出,PC计数器只要在时钟信号上升沿到来时就将增1的地址送入指令存储器中,因为在暂存增1地址的寄存器输出端的16位地址,不经任何信号控制就送入ALU 的一端,与1相加,在本次时钟上升沿就能将结果送入暂存寄存器中,等待下次时钟信号的到来,输出去的是已经增1的地址了,或是由J指令直接指定的目标地址。

图16 PC计数器综合模块

4.2.5数据选择器

数据选择器主要用于根据控制信号,来选择对应的数据端输入,在本次设计中用到4处数据选择器,其内部实现都是采用软件封装的2选1数据选择器,在图19中展示出PC数据选择器具体实现方法,其他数据选择武器实现类似。下面介绍4处数据选择器,分别是:

根据MemtoReg信号判断写入寄存器的数据是来自于ALU或是存储器,如图17所示;

图17 写入寄存器数据选择器

●根据PCSource控制信号,判断PC计数器的下一条地址是来自于PC+1还是

来自于J指令指出的目标地址,主要用于J指令的跳转,如图18是PC数据选择器的综合模块,图19是其具体实现方案,主要采用2选1数据选择器。

图18 PC数据选择器

图19 PC数据选择器内部实现

●根据RegDst信号确定写入寄存器的地址是来自于指令数据的[5-3]位还是

[8-6]位,如图20所示。

图20 写入寄存器地址数据选择器

●根据ALUSrcB控制信号确定ALU单元的输入B端的数据来源,主要用于LW

指令中,判断存储器地址是由寄存器的1端和2端相加得到还是由寄存器的1端和指令后6位扩展成16位相加得到,如图21所示。

图21 ALU的B端数据选择器

4.2.6 ALU单元

ALU单元主要用于将两端输入数据进行加或减操作,从图22可以看到,ALU 综合模块,有3个输入端,分别是输入数据A、B端和控制信号,对应输出端是AB端加或减的结果。从图23我们了解ALU模块的内部实现,ALU的实现主要是应用软件的ALU_ADD_SUB,器件做加或减的操作来自于ALUOp的控制,当ALUOp 位1时,做加法;当为0时,做减法。

图22 ALU综合模块

图23 ALU模块内部实现

4.2.7 扩展单元

扩展单元主要用于填补数据的不足,此次设计的扩展单元为最简单的扩展,即对于输入不足的数据,在其高位上依次补0直至凑够16位数。设计中主要用到两处扩展:

当执行LW指令时,基址中的数据和指令后6位数据扩展成16位数据相加,结果作为存储器的地址,从存储器取数,如图24所示。

图24 指令后6位扩展16位

当执行J指令时,由J指令的后12位扩展成16位作为目标跳转地址,如图25所示。

图25 指令后12位扩展16位作为跳转目标地址

4.2.8 FPGA实验板数码管显示

此模块主要解决结果输出显示在FPGA实验板上的问题。设计的CPU位16位,但是FPGA实验板的数码管每个数字有8位,有4个数码管,所以应该让结果的4位对应数码管的8位显示,故需要使用Verilog语言按照引脚对应编写,如下是4位结果对应数码管8位显示。图26是对应策略的模块,可以看到,使用了4个此模块,分别将结果数据的[3-0]、[7-4]、[11-8]、[15-12]对应显示管的[7-0]、[15-8]、[23-16]、[31-24]。

module changer(IN,OUT);

input [3:0]IN;

output [7:0]OUT;

reg[7:0] OUT;

always

begin

case(IN)

'b0000 : OUT = 'b11000000;

'b0001 : OUT = 'b11111001;

'b0010 : OUT = 'b10100100;

'b0011 : OUT = 'b10110000;

'b0100 : OUT = 'b10011001;

'b0101 : OUT = 'b10010010;

'b0110 : OUT = 'b10000010;

'b0111 : OUT = 'b11111000;

'b1000 : OUT = 'b10000000;

'b1001 : OUT = 'b10010000;

'b1010 : OUT = 'b10001000;

'b1011 : OUT = 'b10000011;

'b1100 : OUT = 'b11000110;

'b1101 : OUT = 'b10100001;

'b1110 : OUT = 'b10000110;

'b1111 : OUT = 'b10001110;

endcase

end

endmodule

图26 显示对应模块

显示还有一步骤是将上述总模块编译成功后,会有32个输出端口,按照引脚对应接在如图27的引脚图上。

图27 实验板引脚图

另外还有一个显示问题是:时钟信号太快,人肉眼来不及观察,所以应将时钟延长,所以采用如图28所示的时钟计数器,输入的时钟信号经过时钟计数器产生24个时钟信号,器件使用最高位时钟信号,即C[23],这样相当于延长了时钟信号,便于人眼观察数码管的显示。

图28 时钟计数器

五、实验数据

实验数据包括两大部分:数据存储器中存储初始数据、指令存储器中存储指令数据,现分别对两部分数据展示。

5.1 数据存储器初始数据

数据存储器中存放初始数据如表3,在数据存储器中以二进制存在,这里表述使用16进制,表示的意思是:在数据存储器中,地址0H,1H,2H,3H存放的初始数据是0002H,0001H,0003H,0004H。

表3 数据存储器数据表

5.2 指令存储器指令数据

指令存储器中存放指令数据如表4,在指令存储器中以二进制存在。它表达的意思需要结合功能指令的格式进行分析。具体分析如下:

表4 指令存储器数据表

第一条指令将寄存器000中的数据和000000扩展成16位0000H相加结果为0000H(初始寄存器000数据为0000H)作为数据存储器的地址(实验中取结果的[4-0]位作为地址)0H号地址取出原始数据0002H,存放至寄存器001号中;第二条指令将寄存器000中的数据和000001扩展成16位0001H相加结果为0001H(初始寄存器000数据为0000H)作为数据存储器的地址1H号地址取出原始数据0001H,存放至寄存器010号中;

第三条指令的前4位功能操作码为0101,是ADD指令。根据ADD指令的格式,将寄存器000号中的数据(初始还是0000H)和寄存器001号中的数据0002H(存储器取出放至寄存器001中的)相加结果送入寄存器000号中。

第四条指令的前4位功能操作码为1010,是J指令。根据J指令的格式,将指令后12位[11-0]数据004H零扩展成16位0004H,即跳转至地址为0004H(此处即为下一条指令,这里设置J指令主要是为了解决加减显示的时间不一致性)。

第五条指令的前4位功能操作码为0110,是SUB指令。根据SUB指令的格式,将寄存器000号中的数据(此时是0002H)和寄存器010号中的数据0001H(存储器取出放至寄存器010中的)相减结果送入寄存器000号中。

第六条指令的前4位功能操作码为1010,是J指令。根据J指令的格式,将指令后12位[11-0]数据002H零扩展成16位0002H,即跳转至地址为0002H(此处即为ADD指令)。

而数码管显示的结果是寄存器000号中的数据,所以在实验板上能够实现加2减1的循环运算,若想更改数据,可以修改数据存储器中的初始数据。实现加n减m的运算,同样修改指令存储器中的指令数据位置,也可以实现减n加m运算。

六、结论和体会

通过此次10周的CPU设计实验,让我们对CPU内部组成以及指令在CPU部件上如何运作有了一个更深的理解。在实验过程中,我们遇到了各种问题,一开始老师布置下来的CPU任务的时候,完全是懵的,因为CPU器件和指令运算只在课本上学习,从来没有真正实践过,现在需要自己设计CPU的各个部件,而且要将指令在器件上运行,那时简直崩溃。但在接下来的日子,我们没有因为不会而放弃,而是努力专心去设计好每个部件,对每个部件的功能进行模拟仿真,确保这一部件模块不出错,在设计过程中,感觉我们头脑慢慢开窍,也明白了下一步需要设计的东西,或许这是潜移默化的效果吧。确保每个CPU部件功能都是正确的后,然后需要将所有部件模块整合在一起,很不幸,编译没有通过,于是我们在努力盘查细节问题,最终编译成功。但还有另外一大问题,就是将软件设计的模型放在FPGA实验板上运行,而问题需要将结果数据显示在数码管上,需要编写显示对应的Verilog语言,以及需要将结果和pin脚相连等操作。皇天不负有心人,终于完成了CPU的设计,这过程虽然很苦,但结果却是令人兴奋的,经过这番“彻骨寒”,让我们迎来了“梅花香”,让我们对CPU有了更深的理解,而不只是纸上谈兵。

最后,在这里感谢老师这十来周的辛勤付出,感谢学院开设这门有意义、有难度的课程,以及感谢所有帮过我们解决问题的同学!!!

七、参考文献

[1] 钱江波. 短学期指导. 宁波大学实验手册,2016/09/10

[2] 白中英,戴志涛. 计算机组成原理. 科学出版社,2013/03

[3] kingduan. 简单CPU设计实践. 博客园.

https://www.wendangku.net/doc/2117426917.html,/kingduan/p/4054484.html

[4] 姜咏江. CPU设计我要让更多人掌握它. 博客.

https://www.wendangku.net/doc/2117426917.html,/blog-340399-283456.html

精简8位cpu设计报告

精简8位cpu实验设计报告 实验介绍: 实验分为两个部分,第一部分为16*8 ROM 设计与仿真 第二部分为SAP-1 设计与仿真 实验流程: ①16*8 ROM 的设计与仿真 Rom16_8.VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM16_8 is PORT( DATAOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Data Output ADDR :IN STD_LOGIC_VECTOR(3 DOWNTO 0); --ADDRESS CE :IN STD_LOGIC --Chip Enable ); END ROM16_8; ARCHITECTURE a OF ROM 16_8 IS BEGIN DATA<=“00001001”WHEN ADDR=“0000”AND CE=‘0’--LDA 9H “00011010”WHEN ADDR=“0001”AND CE=‘0’ELSE --ADD AH “00011011”WHEN ADDR=“0010”AND CE=‘0’ELSE --ADD BH “00101100”WHEN ADDR=“0011”AND CE=‘0’ELSE --SUB CH “11100000”WHEN ADDR=“0100”AND CE=‘0’ELSE --OUT “11110000”WHEN ADDR=“0101”AND CE=‘0’ELSE --HLT “00010000”WHEN ADDR=“1001”AND CE=‘0’ELSE “00010100”WHEN ADDR=“1010”AND CE=‘0’ELSE “00011000”WHEN ADDR=“1011”AND CE=‘0’ELSE

MIPS单周期CPU设计2018版体会

11条MIPS指令单周期CPU设计 2018元月份,我按照袁春风老师的第三版教材,又重新设计了11条MIPS 指令的单周期CPU。这次的设计与我2017年7月份的单周期CPU还是有些区别。2017年7月份设计的CPU主要是参考《计算机组成与设计-硬件/软件接口David A.Patterson》。 设计中的几点体会如下: 一.基本流程 1.首先要分析清楚这11条指令的格式和特点。按照MIPS指令的格式和特 点,完全掌握它们的功能和执行的过程。 2.这些指令执行过程中需要哪些硬件部件和控制信号,这些部件如何连接 构成数据通路。 3.对所有需要的控制信号进行归纳分析,列出真值表,设计相应的控制电 路。 二.具体设计过程 1.ALU的设计。ALU的设计重点在于先设计出32位的加法器,减法运算是利用 加法的“变反加一”。同时要产生各种运算结果的信号:溢出(OF)、进位(CF)、符号位(SF)、零符号位(Zero)。OF=C n⊕C n-1;CF=C out⊕C in。至于需要其它的运算指令,如逻辑运算、移位运算、乘除法运算,都可以直接调用logisim库中的器件,添加到ALU中,这些运算的结果可以同时产生,只是最后用多路选择器来选择那种指令的结果输出,用的控制信号是OPctr。在ALU中需要设计一个控制信号生成部件,用于产生ALU内部需要的各种控制信号。见袁春风老师教材P155。(第一次实验:ALU部件的设计)(ALU设计中,现在的加法器只是串行的,可以让好的学生用先行进位加法器)

图1:ALU电路图 2.设计寄存器部件。设计一个32个*32位的寄存器部件。两路输入和两路输出, 可读写。(第二次实验:寄存器部件的设计) 图2:寄存器电路图 3.数据通路的设计。通路的设计不能急于求成,要一条指令一条指令来分析和 设计。首先设计R-type中的add、sub、subu、slt、sltu等的通路。要注意是否要判断溢出。在此基础上,再分析I-type带立即数运算指令的数据通路,分析出需要添加哪些部件。再分析sw、lw指令的数据通路,分支指

单周期CPU实验报告

MIPS-CPU设计实验报告

实验名称:32位单周期MIPS-CPU设计 姓名学号:刘高斯11072205 实验日期:2014年12月19日 目录 前言 MIPS简介------------------------------------------------------------- 3 实验目的------------------------------------------------------------- 3 第一部分VERILOG HDL 语言实现部分 实验内容------------------------------------------------------------- 4 试验环境------------------------------------------------------------- 4 模块简介------------------------------------------------------------- 4 实验截图------------------------------------------------------------- 5 实验感想------------------------------------------------------------- 5 实验代码------------------------------------------------------------- 6 第二部分LOGISIM 语言实现部分 实验内容------------------------------------------------------------- 16 实验环境------------------------------------------------------------- 16

(完整版)类MIPS单周期处理器

一、实验目的 1.了解微处理器的基本结构。 2.掌握哈佛结构的计算机工作原理。 3.学会设计简单的微处理器。 4.了解软件控制硬件工作的基本原理。 二、实验任务 利用HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。 (1)支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令 (2)支持基本的内存操作如lw,sw指令 (3)支持基本的程序控制如beq,j指令 三、实验过程 1、建立工程 在ISE 14.7软件中建立名为Lab1 的工程文件。芯片系列选择Artix7,具体芯片型号选择XC7A100T,封装类型选择CSG324,速度信息选择-1。

2、分模块设计 1)指令存储器ROM设计 新建IP core Generator,命名为irom。设定的指令存储器大小为128字,指令存储器模块在顶层模块中被调用。输入为指令指针(PC)与时钟信号(clkin),输出为32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立即数符号扩展模块进行相应的处理。 然后制作COE文件。先使用UltraEdit编辑代码,代码如下 main: addi $2,$0,85 sw $2,0($3) addi $2,$0,50 sw $2,4($3) addi $2,$0,48 sw $2,8($3) addi $2,$0,49 sw $2,12($3) addi $2,$0,53 # sw $2,16($3) addi $2,$0,49 # sw $2,20($3) addi $2,$0,51 # sw $2,24($3) addi $2,$0,52 # sw $2,28($3) addi $2,$0,54 # sw $2,32($3) addi $2,$0,52 # sw $2,36($3) j main

计算机硬件课程设计报告(cpu设计)

计算机硬件课程设计 设计报告 学号: 姓名:成绩: 学号: 姓名:成绩: 东南大学计算机科学与工程系 二0 10 年11 月

一、设计名称: My CPU的设计 二、本设计的主要特色: 1、熟悉挂总线的逻辑器件的特性和总线传送的逻辑实现方法。 2、掌握半导体静态存储器的存取方法。 三、设计方案: 1. 数据格式——8位二进制定点表示 2. 指令系统——CPU的指令格式尽量简单规整,这样在硬件上更加容易实现。 7条基本指令:输入/输出,数据传送,运算,程序控制。 指令格式:Array 7 6 5 4 3 2 1 0 两种寻址方式: 寄存器寻址Array 7 6 5 4 3 2 1 0 直接地址寻址,由于地址要占用一个字节,所以为双字节指令。 7条机器指令:

IN R目:从开关输入数据到指定的寄存器R目。 OUT R源:从指定的寄存器R源中读取数据送入到输出缓冲寄存器,显示灯亮。 ADD R目,R源:将两个寄存器的数据相加,结果送到R目。 JMP address : 无条件转移指令。 HALT : 停机指令。 LD R目,address : 从内存指定单元中取出数据,送到指定寄存器R 目。 ST address , R 源: 从指定的寄存器R源中取出数据,存入内存指定单元。

Address(内存地址) 3. CPU内部结构 4.数据通路设计 根据指令系统,分析出数据通路中应包括寄存器组、存储器、运算器、多路转换器等,采用单总线结构。 通用寄存器组:

运算器: 存储器: 多路转换器:

输出缓冲器: 5.控制器设计 控制通路负责整个CPU的运行控制,主要由控制单元和多路选择器MUX 完成。在每一个时钟周期的上升沿指令寄存器IR 从内存中读取指令字后,控制单元必须能够根据操作码,为每个功能单元产生相应主控制信号,以及对ALU 提供控制信号。对于不同的指令,同一个功能单元的输入不同,需要多路选择器MUX 来对数据通路中功能单元的输入进行选择。

计算机组成原理实验报告单周期cpu的设计与实现

1个时钟周期 Clock 电子科技大学计算机科学与工程学院 标 准 实 验 报 告 (实验)课程名称: 计算机组成原理实验 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周 一、 实验室名称: 主楼A2-411 二、 实验项目名称: 单周期CPU 的设计与实现。 三、 实验学时: 8学时 四、 实验原理: (一) 概述 单周期(Single Cycle )CPU 是指CPU 从取出1条指令到执行完该指令只需1个时钟

周期。 一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。对于单周期CPU 来说,这些执行步骤均在一个时钟周期内完成。 (二) 单周期cpu 总体电路 本实验所设计的单周期CPU 的总体电路结构如下。 (三) MIPS 指令格式化 MIPS 指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS 指令选用MIPS-32。以下所说的MIPS 指令均指MIPS-32。 MIPS 的指令格式为32位。下图给出MIPS 指令的3种格式。 本实验只选取了9条典型的MIPS 指令来描述CPU 逻辑电路的设计方法。下图列出了本实验的所涉及到的9条MIPS 指令。 五、 实验目的 1、掌握单周期CPU 的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、26 31 221 216 15 11 1 6 5 0 op rs rt rd sa func R 型指令 26 31 221 216 15 0 op rs rt immediate I 型指令 26 31 20 op address J 型指令

CPU课程设计报告

课程设计报告 课程片上计算机系统 题目 CPU模型机设计 班级 专业 学生 学号 指导教师 2014年7 月 3 日 目录: 1.课程设计的目的及要求 (3) 2.处理器的设计思想和设计内容 (3)

3.设计处理器的结构和实现方法 (3) 4.模型机的指令系统 (4) 5.处理器的状态跳转操作过程 (4) 6. CPU的Verilog代码 (7) 7. 模型机在Quartus II环境下的应用 (19) 8. 仿真波形 (19) 9. 课程设计的总结 (21) 一.课程设计的目的及要求: (一)目的: 1.掌握RISC CPU与内存数据交换的方法。 2.学会指令格式的设计与用汇编语言编写简易程序。 3.能够使用VHDL硬件描述语言在QuartusⅡ软件环境下完成CPU模型机的 设计。

(二)要求: 1.以《计算机组成与设计》书中123页的简化模型为基础更改其指令系 统,形成设计者的CPU, 2.在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达 到设计构想。 二.处理器的设计思想和设计内容: 处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括七个状态。(一)关于修改后的CPU: 一共设计25条指令,主要包括空操作指令、中断指令、加法指令、减法指令、加法指令、四种逻辑运算指令、比较、算术移位操作指令、逻辑移位操作指令、加减1指令、加减2指令、数据传输指令、转移类指令、读写指令、特权指令等等。 (二)关于RAM: 地址线设置成8bits,主存空间为4096words。 三.设计处理器的结构和实现方法: (指令格式) 格式1:寄存器寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Rx Ry 空白 格式2:寄存器变址寻址方式 OP Ry 空白 格式3:立即数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白 格式4:无操作数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白空白 格式5:直接寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr 内存(2的12次方) 四.模型机的指令系统 CPU的指令集: 操作码OP IR(15..1 2) 指令 格式 指令的助记指令的内容

单周期CPU设计

信息科学与工程学院 课程设计报告 课程名称:计算机组成原理与结构题目:单周期CPU逻辑设计年级/专业:XXXXXXXXXXXXXXX X 学生姓名:王侠侠、李怀民 学号:XXXXXXXXXXXXXXXXXXX 指导老师:XXXX 开始时间:2016年9月15日 结束时间:2016年11月15日

摘要 一、设计目的与目标 1.1 设计目的 1.2 设计目标 二、课程设计器材 2.1 硬件平台 2.2 软件平台 三、CPU逻辑设计总体方案 3.1 指令模块 3.2 部件模块 四、模块详细设计 4.1 指令设计模块 4.2 部件设计模块 五、实验数据 5.1 初始数据 5.2 指令数据 六、结论和体会 七、参考文献

本CPU设计实验以Quartus II 9.0为软件设计平台,以Cyclone 采III型号EP3C16F484C6为FPGA实测板。此CPU设计采用模块化设计方案,首先设计指令格式模块,此模块决定CPU各个部件的接口数据容量及数量,再对CPU各个部件独立设计实现,主要涉及的部件有:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元以及扩展单元。分部件的设计通过软件平台模拟仿真各部件的功能,在确保各部件功能正确的情况下,将所有部件模块整合在一起实现16位指令的CPU功能。再按照指令格式设计的要求,设计出一套能完整运行的指令,加载到指令存储器中,最终通过在FPGA实测板上实现了加2减1的循环运算效果,若要实现其他效果,也可更改指令存储器或数据存储器的数据而不需要对内部部件进行更改元件。 关键词:CPU设计、16位指令格式、模块化设计、Quartus软件、CPU各部件

MIPS单周期CPU实验报告

《计算机组成原理实验》 实验报告 (实验二) 学院名称: 专业(班级): 学生姓名: 学号: 时间:2017 年11 月25 日

成绩: 实验二:单周期CPU设计与实现 一.实验目的 (1) 掌握单周期CPU数据通路图的构成、原理及其设计方法; (2) 掌握单周期CPU的实现方法,代码实现方法; (3) 认识和掌握指令与CPU的关系; (4) 掌握测试单周期CPU的方法; (5) 掌握单周期CPU的实现方法。 二.实验内容 设计一个单周期的MIPSCPU,使其能实现下列指令: ==> 算术运算指令 ==> 逻辑运算指令 功能:rd←rs | rt;逻辑或运算。 ==>移位指令 ==>比较指令

==> 存储器读/写指令 将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。 即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。 ==> 分支指令 功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4 特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。immediate 符号扩展之后左移2位再相加。为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。 12 特别说明:与beq不同点是,不等时转移,相等时顺序执行。 功能:if(rs>0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4 ==>跳转指令 ==> 停机指令

《单周期CPU设计》实验报告

《计算机组成原理与接口技术实验》 实验报告 学院名称: 学生姓名: 学号: 专业(班级): 合作者: 时间:2016 年4 月25 日 成绩: ________ 实验二: 一. 实验目的 1.掌握单周期CPU数据通路图的构成、原理及其设计方法; 2.掌握单周期CPI的实现方法,代码实现方法; 3.认识和掌握指令与CPU勺关系; 4.掌握测试单周期CPI的方法。 二. 实验内容 设计一个单周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令

与格式如下:

==>算术运算指令 功能:rd Jrs + rt 。 reserved为预留部分,即未用,一般填“0 (2)addi rt , rs , immediate 功能:rt J rs + (sign-extend) immediate ;immediate 符号扩展再参加“加”运算(3) sub rd , rs , rt 完成功能:rd J rs - rt ==>逻辑运算指令 (4)ori rt , rs , immediate 功能:rt Jrs | (zero-extend) immediate ; immediate 做“ o ”扩展再参加“或”运算(5) and rd , rs , rt 功能:rd Jrs & rt ;逻辑与运算 (6)or rd , rs , rt 功能:rd Jrs | rt ;逻辑或运算。 ==>传送指令 功能:rd Jrs + $0 ; $0=$zero=0。 ==>存储器读/写指令 (8)sw rt , immediate( rs)写存储器 功能:memory[rs+ (sign-extend) immediate ] J rt ; immediate 符号扩展再 相加。

CPU设计实验报告

实验中央处理器的设计与实现 一、实验目的 1、理解中央处理器的原理图设计方法。 2、能够设计实现典型MIPS的11条指令。 二、实验要求 1、使用Logisim完成数据通路、控制器的设计与实现。 2、完成整个处理器的集成与验证。 3、撰写实验报告,并提交电路源文件。 三、实验环境 VMware Workstations Pro + Windows XP + Logisim-win-2.7.1 四、操作方法与实验步骤 1、数据通路的设计与实现 数据通路主要由NPC、指令存储器、32位寄存器文件、立即数扩展部件、ALU、数据存储器构成。其中指令存储器和数据存储器可直接调用软件库中的ROM和RAM元件直接完成,其余部件的设计如图所示: 图1.1 NPC

图1.2 32位寄存器

图1.3 立即数扩展部件 图1.4 ALU 2、控制器的设计与实现 控制器的主要设计思想如图所示 图2.1 控制器设计思想 输入 1 1 0

输出R-type ORI LW SW BEQ JUMP RegDst 1 0 0 x x x ALUSrc 0 1 1 1 0 x MemtoReg0 0 1 x x x RegWrite 1 1 1 0 0 0 MemWrite0 0 0 1 0 0 Branch 0 0 0 0 1 0 Jump 0 0 0 0 0 1 Extop x 0 1 1 1 x ALUop2 1 0 0 0 0 x ALUop1 x 1 0 0 x x ALUop0 x 0 0 0 1 x ALUop[2:0] Funct[3:0] 指令ALUctr[2:0] 111 0000 add 010 111 0010 sub 110 111 0100 and 000 111 0101 or 001 111 1010 slt 111 010 xxxx ori 001 000 xxxx Lw/sw 010 011 xxxx beq 110 表2.1 控制器设计真值表

CPU与简单模型机设计 实验报告汇总

计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称计算机组成与结构 项目名称 CPU与简单模型机设计实验 班级 学号 姓名 同组人员无 实验日期 2015-11-15

一、实验目的 1.掌握一个简单CPU的组成原理; 2.在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机; 3.为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。 二、实验逻辑原理图与分析 2.1 实验逻辑原理图及分析 本实验要实现一个简单的CPU,并且在此CPU的基础上,继续构建一个简单的模型计算机。CPU由运算器(ALU)、微程序控制器(MC)、通用寄存器(RO)、指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图下图所示。这个CPU在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU必须和贮存挂接后,才有实际的意义,所以还需要在该CPU的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。 基本CPU构成原理图 系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD芯片中。CLR连接至CON单元的纵情断CLR,按下CLR按钮,将是PC清零,LDPC和T3相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU内总线的数据打入PC。 程序计数器(PC)原理图

2.2 逻辑原理图分析 本模型机;和前面微程序控制器实验相比,新增加一条跳转指令JMP,供有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移)、HLT(停机)、其指令格式瑞霞(高4为为操作码): 其中JMP为双字节指令,其余均为单字节指令,********为addr对应的二进制地址码。微程序控制器实验的指令是通过手动给出的,现在要求CPU自动从存储器读取指令并执行。 系统涉及到的微程序流程如下图所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1>测试。由于“取指”微指令是所有微程序都使用的公用微指令,因此P<1>的测试结果出现多分支。本机用指令寄存器的高6位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定为地址单元,剩下的其他地方就可以一条微指令占用控制一个微地址单元随意填写,微程序流程图上的但愿地址为16进制。 当全部为程序设计完毕后,应将每条微指令代码化,下表即为将下图的微程序流程图按微指令格式转化而成的“二进制微代码表”。 简单模型机微程序流程图

单周期处理器

实验八单周期处理器的实现 实验目的: 进一步理解数据通路、控制通路等基本概念 掌握处理器中控制器的基本设计方法 进一步理解单周期处理器以及多周期处理器的工作原理和设计思路实验要求: 设计和实现一个单周期处理器(60%) 可执行至少7条MIPS指令,add、sub、ori、lw、sw、beq、j 编写测试程序的二进制代码,测试实现的电路 撰写实验报告,dead line:5.19 设计和实现一个多周期处理器(40%) Dead line:6.6 。 实验报告: (1)实验过程 1 控制器的设计与实现 控制器的功能 根据当前指令,生成处理器内部各部件所需要的控制信号 控制器的输入输出

输入:op[5:0],func[5:0] 输出:RegDst,ALUSrc,MemtoReg,RegWrite,MemWrite,Branch,Jump,ExtOp,ALUctr[2:0] 图表1 主控的设计 图表2 ALUCTR的设计

图表3 控制器的封装 2 ALU的设计与实现 ALU的功能 根据控制信号ALUctr[2:0],将输入端口的两个32位的数据进行加、减、与、或操作,并判断结果是否为0 ALU的输入输出 输入:A[31:0],B[31:0],ALUctr[2:0] 输出:OUT[31:0],Zero ALU的实现 将运算器实验中实现的加减法扩展为32位

增加32位与、或功能 增加结果判零电路 根据ALUctr[2:0]信号确定ALU的输出 图表4 加法器的设计与封装 (由于上一个实验已做成ALU,这里不再赘述加法器的制作) 根据ADD/SUB信号判断实现加法或是减法,并且设置Zero 项输出,用作Beq指令的判定依据

CPU设计实验报告

实验中央处理器的设计与实现 一、实验目的 1、 理解中央处理器的原理图设计方法。 2、 能够设计实现典型MIPS 的11条指令。 二、 实验要求 1、 使用Logisim 完成数据通路、控制器的设计与实现。 2、 完成整个处理器的集成与验证。 3、 撰写实验报告,并提交电路源文件。 三、 实验环境 VMware Workstatio ns Pro + Win dows XP + Logisim-wi n-2.7.1 四、 操作方法与实验步骤 1、数据通路的设计与实现 数据通路主要由NPC 、指令存储器、32位寄存器文件、立即数扩展部件、 ALU 、数据存储器构成。其中指令存储器和数据存储器可直接调用软件库中的 ROM 和RAM 元件直接完成,其余部件的设计如图所示: Cue ------- 吊孙 ----------- n -ar ch Zan [p]~ 图 1.1 NPC G —-- DO jlf* 04 4 D 04 nero & res?l ■&

幣> >曰CXI e Q

图1.3立即数扩展部件 图 1.4 ALU 2、控制器的设计与实现 控制器的主要设计思想如图所示 图2.1控制器设计思想 通过列真值表得到控制器的两部分电路,真值表如下 : 输入 000000 001101 100011 101011 000100 000010 immIC £it£ DOO -DO ooo n Q □□□non UOnflO OOC ?>:>0 DQ 000 指令 lnst :ruction[31:O] OP[5:OJ fu net [5:0] Jump ExBp Branch Mem Write ALUctr * RegWrite MemtoReg * ALUSrc 控制器 控制信号 LLLLLLLLLmM f ZERO A ()-- irnmmmiiiimiiiiifeiiim IIII93 1-] * 11114444 ".'O

哈工大CPU设计报告

计算机设计与实践CPU设计报告

指令格式设计: 注:Ri代表3位该寄存器号的二进制表示,X,sign为8位立即数,add为8为地址

一整体框图

二各模块详细说明(数据流关系、接口说明) 1 时钟管理模块 1.1结构框图: 1.2功能描述:时钟模块为一节拍发生器,以输入时钟信号作为触发,四个节拍循环往复,当“rst”为1时节拍复位。 1.3数据流关系: 1.4接口说明: port( rst: in std_logic; --复位信号 clk: in std_logic; --输入时钟信号 k: out std_logic_vector(3 downto 0) --节拍输出 ); 2 取址模块 2.1 visit_mem_flag pc_out ir_out 2.2功能描述:取指模块主要负责取指操作,当复位信号为1时,pc置零;若pc更新标志(pc_in_flag)为1,则更新当前的pc值;在第一个节拍,将当前pc给到访存控制模块,同时送访存请求信号(visit_mem_flag),取得指令;同时将取得的指令送往运算模块、回写模块,pc送往回写模块。

2.3数据流关系: Port (rst: in std_logic; --复位 k0,k1: in std_logic; --节拍控制 pc_in_flag: in std_logic; --PC回写允许 ir_in : in std_logic_vector(15 downto 0); --IR进入 pc_in : in std_logic_vector(15 downto 0); --PC回写 visit_mem_flag: out std_logic; --访存信号 pc_out : out std_logic_vector(15 downto 0); --PC输出 ir_out : out std_logic_vector(15 downto 0) --IR输出 ); 3 运算模块 3.1结构框图: 3.2功能描述:复位信号为1时,alutou、addr、Cy、Z清零;当回写信号为1时,将回写的数据回写入寄存器中;在第二节拍完成指令的译码工作,并根据译码结果置if_reg(是否更新寄存器),if_pc(是否更新PC),m_r(是否读请求),m_w(是否写请求)四个标志位,并对相关的指令置好addr、aluout和ToHX,以及对一些改变运算标志位的指令置好Cy和Z这两个标志位。

单周期CPU设计参考

单周期CPU及其Verilog HDL设计 一、指令的设计 MIPS32的指令的三种格式的参考: R类型: I类型: J类型: R类型指令的op为0,具体操作由func指定。rs和rt是源寄存器号,rd是目的寄存器号。只有移位指令使用sa来指定移位位数。I类型指令的低16位是立即数,计算时要把它扩展到32位。依指令的不同,有零扩展和符号扩展两种。J类型指令右边26位是字地址,用于产生跳转的目标地址。具体的指令格式和内容请参考MIPS32。 设计报告中需自行设计所有指令的二进制格式和对应的汇编指令格式。 二、单周期CPU的设计 我们把时钟的电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。单周期CPU指的是一条指令的执行在一个这样的时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个周期。 2.1执行一条指令所需的硬件电路 我们的目的地是要设计CPU的硬件电路,使其能够从存储器中读出一条条指令并执行指令所描述的操作。从存储器中读取指令的动作一般与指令本身的意义无关,可以以同样的方法把指令从存储器中取出。而执行指令则与指令本身的意义密切相关,因此最重要是首先搞清楚CPU要执行的每条指令的意义。下面以两种类型的电路来举例。 2.1.1与取指令有关的电路

指令存储在存储器中。CPU取指令时把程序计数器(PC)中的内容作为存储器的地址,根据它来访问存储器,从PC值指定的存储单元中取来一条32位指令。如果取来的指令执行时没有引起转移,PC的值要加4;如果转移,要把转移的目标地址写入PC,以便在下一个时钟周期取出下一条指令。 图2.1 取指令时用到的硬件电路和指令寄存器 如图2.1所示,PC是一个简单的32位寄存器,由32个D触发器构成。指令存储器(Inst Mem)的输入端a是地址、输出端do是数据输出,即指令。图中的加法器专供PC+4使用,它的输出接到多路器的一个输入端。如果取来的指令没有引起转移或跳转,则选择PC+4,在时钟上升沿处将其打入PC;若引起转移或跳转,则用多路器选择下一条指令该打入的PC值。 2.1.2寄存器计算类型指令执行时所需电路 寄存器类型的指令有add等。如图2.2所示是执行它们所需的部分硬件电路。大多数MIPS指令属于三操作数指令。指令格式中的rs和rt是两个5位的寄存器号,由它们从寄存器堆(Regfile)中读出两个32位的数据。由于寄存器号有5位,所以能从32个寄存器中选出一个。32个寄存器合在一起称为寄存器堆(Register File)。从寄存器堆读出的两个32位数据分别被送到ALU的a和b的输入端。 图2.2 执行寄存器计算类型指令所需电路 具体的计算由ALU完成。ALU的计算控制码aluc由控制部件(Control Unit)产生。这里的控制部件是简单的组合电路,输入信号是指令的操作码op和功能码func,输出信号3个,它们分别是ALU的操作码aluc、计算结果是否写入寄存器堆的控制信号wreg和下一条指令的地址选择信号pcsource。ALU的计算结

单周期CPU设计

短学期综合实验报告 实验名称:单周期CPU设计 院系:信息科学与工程学院 专业:计算机科学与技术 组员:XXXXXXXXXXX XXXXXXXXXXX 指导老师:XXXXXXX 二〇一一年七月八日

摘要 中央处理器(CPU)是计算机取指令和执行指令的部件,它是由算术逻辑单元(ALU)、寄存器和控制器组成,简称处理器(或CPU),CPU是计算机系统的核心部件,在各类信息终端中得到了广泛的应用。处理器的设计及制造技术也是计算机技术的核心之一。 CPU设计的第一步应当根据指令系统来建立数据路径,再定义各个部件的控制信号,确定时钟周期,完成控制器的设计。然后建立数据路径,进而可以进行数字设计、电路设计,最后完成物理实现。而在本次试验中,我们研究的重点是数据路径的建立和控制器的实现。 一个机器的性能由三个关键因素决定:指令数、时钟周期,以及执行每条指令所需的时钟周期数(CPI)。然而不论是时钟周期,还是每条指令所需的时钟周期数目,都是由处理器的实现情况决定的。在本次试验中,我们构造了单周期的数据路径和组合逻辑实现的控制器。 本次试验中,我们运用Quartus II 8.0软件设计出了一个拥有6条指令的单周期CPU,并对它进行了简单的测试,最终完成了一个正确的单周期CPU的设计。 关键词:数据路径,控制器,控制信号,单周期

Abstract Central processing unit (CPU) is a computer instruction fetch and execution of components, it is an arithmetic logic unit (ALU), registers and a controller, referred to as the processor (or CPU), CPU is the core component of computer systems in all type information terminal has been widely used. Processor design and manufacturing technology is one of the core computer technology. The first step should be based on CPU design instruction to create a data path, and then define the various components of the control signals to determine the clock cycle, the controller design. Then set up a data path, and then can be digital design, circuit design, physical implementation finalized. In this experiment, the focus of our research is to establish the data path and controller implementation. The performance of a machine consists of three key factors: the number of instructions, clock cycles to execute each instruction as well as the required number of clock cycles (CPI). Whether it be a clock cycle, each instruction or the number of clock cycles required are determined by the achievement of the processor. In this study, we constructed single-cycle data path and the combinational logic to achieve the controller. This experiment, we use Quartus II 8.0 software to design a single-cycle instruction with 6 CPU, and it conducted a simple test, the

计算机组成原理实验报告 单周期CPU的设计与实现

1个时钟周 期 Cloc k 电子科技大学计算机科学与工程学院 标 准 实 验 报 告 (实验)课程名称: 计算机组成原理实验 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周 一、 实验室名称: 主楼A2-411 二、 实验项目名称: 单周期CPU 的设计与实现。 三、 实验学时: 8学时 四、 实验原理: (一) 概述 单周期(Single Cycle )CPU 是指CPU 从取出1条指令到执行完该指令只需1个时钟周期。 一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。对于单周期CPU 来说,这些执行步骤均在一个时钟周期内完成。 (二) 单周期cpu 总体电路 本实验所设计的单周期CPU 的总体电路结构如下。

(三) MIPS 指令格式化 MIPS 指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS 指令选用MIPS-32。以下所说的MIPS 指令均指MIPS-32。 MIPS 的指令格式为32位。下图给出MIPS 指令的3种格式。 本实验只选取了9条典型的MIPS 指令来描述CPU 逻辑电路的设计方法。下图列出了本实验的所涉及到的9条MIPS 指令。 五、 实验目的 1、掌握单周期CPU 的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、运算器等。? 2、认识和掌握指令与CPU 的关系、指令的执行过程。? 3、熟练使用硬件描述语言Verilog 、EDA 工具软件进行软件设计与仿真,以培养学生的分析和设计CPU 的能力。 六、 实验内容 (一)拟定本实验的指令系统,指令应包含R 型指令、I 型指令和J 型指令,指令数为9条。 (二)CPU 各功能模块的设计与实现。 (三)对设计的各个模块的仿真测试。 (四)整个CPU 的封装与测试。 七、 实验器材(设备、元器件): (一)安装了Xilinx ISE Design Suite 13.4的PC 机一台 (二)FPGA 开发板:Anvyl Spartan6/XC6SLX45 (三)计算机与FPGA 开发板通过JTAG (Joint Test Action Group )接口连接,其连接方式如图所示。 八、 实验步骤 一个CPU 主要由ALU (运算器)、控制器、寄存器堆、取指部件及其它基本功能部件等构成。? 在本实验中基本功能部件主要有:32位2选1多路选择器、5位2选1多路选择器、32位寄存器堆、ALU 等。 (一)新建工程(New Project ) 启动ISE Design Suite 13.4软件,然后选择菜单File →New Project ,弹出New 26 31 25 21 20 16 15 11 10 6 5 0 op rs rt rd sa func R 型指令 26 31 25 21 20 16 15 0 op rs rt immediate I 型指令 26 31 25 0 op address J 型指令

CPU设计实验报告

武汉大学计算机学院计算机科学与技术专业 CPU设计实验报告 实验名称:开放式实验CPU设计课题名称: 计算机组成原理 班级: 计科2班 指导教师:徐爱萍 组长: 组员: 二零一五年三月

目录 目录 (2) 1 实验环境(张航宇) (4) 1.1 Quartus Ⅱ介绍 (4) 1.2 硬件描述语言(VHDL) (4) 1.3实验的主要成果 (4) 2 实验要求(彭阳坤) (5) 2. 1 指令格式要求 (5) 2. 2 指令流程及微信号序列分析 (5) 2.2.1 ADD指令分析 (5) 2.2.2 ADC指令分析 (5) 2.2.3 SUB指令分析 (6) 2.2.4 SBC指令分析 (6) 2.2.5 INC指令分析 (6) 2.2.6 DEC指令分析 (6) 2.2.7 SHL指令分析 (7) 2.2.8 SHR指令分析 (7) 2.2.9 MOVR指令分析 (7) 2.2.11 MOVD指令分析 (7) 2.2.12 LDRR指令分析 (8) 2.2.13 STRR指令分析 (8) 2.2.14 JMP指令分析 (8) 2.2.15 JRZ指令分析 (8) 2.2.16 JRC指令分析 (9) 3.部件仿真实验(彭阳坤) (10) 3.1 八个通用寄存器设计与仿真 (10) 3.1.1 设计代码 (10) 3.1.2 RTL连接图 (16) 3.1.3 仿真过程 (16) 3.2算术逻辑单元设计与仿真 (17) 3.2.1 设计代码 (17)

3.2.2 RTL连接图 (22) 3.2.3 仿真过程 (23) 4. CPU设计(彭阳坤) (24) 4.1取指设计 (24) 4.2 时序节拍设计 (25) 4.3指令译码的设计 (26) 4.4执行部分设计 (29) 4.5存储器部分设计 (31) 4.6通用寄存器组设计 (32) 4.7寄存器输出设计 (38) 4.8顶层实体设计 (38) 5. 测试报告(张航宇) (42) 5.1规则文件 (42) 5.2测试文件 (42) 5.3指令测试 (44) 6 实验总结 (46) 6.1 彭阳坤的小结 (46) 6.1.1 实验收获 (46) 6.1.2 建议与意见 (46) 6.2张航宇的小结 (46) 6.2.1 实验收获 (46) 6.2.2 建议与意见 (47) 参考资料 (47)

相关文档