实验6 CPU组成与机器指令执行实验
- 格式:doc
- 大小:70.50 KB
- 文档页数:4
计算机组成原理实验一、实验目的本实验旨在通过实际操作,加深对计算机组成原理的理解,掌握计算机硬件的基本原理和工作方式。
二、实验设备和材料1. 计算机主机:型号为XXX,配置了XXX处理器、XXX内存、XXX硬盘等。
2. 显示器:型号为XXX,分辨率为XXX。
3. 键盘和鼠标:标准配置。
4. 实验板:包括CPU、内存、存储器、输入输出接口等模块。
5. 逻辑分析仪:用于分析和调试电路信号。
6. 示波器:用于观测电路信号的波形。
三、实验内容1. 实验一:CPU的工作原理a. 将实验板上的CPU模块插入计算机主机的CPU插槽中。
b. 连接逻辑分析仪和示波器,用于观测和分析CPU的工作信号和波形。
c. 打开计算机主机,启动操作系统。
d. 运行一段简单的程序,观察CPU的工作状态和指令执行过程。
e. 通过逻辑分析仪和示波器的数据分析,了解CPU的时钟信号、数据总线、地址总线等工作原理。
2. 实验二:内存的存储和读写a. 将实验板上的内存模块插入计算机主机的内存插槽中。
b. 打开计算机主机,启动操作系统。
c. 编写一个简单的程序,将数据存储到内存中。
d. 通过逻辑分析仪和示波器的数据分析,观察内存的写入和读取过程,了解内存的存储原理和读写速度。
3. 实验三:存储器的工作原理a. 将实验板上的存储器模块插入计算机主机的存储器插槽中。
b. 打开计算机主机,启动操作系统。
c. 编写一个简单的程序,读取存储器中的数据。
d. 通过逻辑分析仪和示波器的数据分析,观察存储器的读取过程,了解存储器的工作原理和数据传输速度。
4. 实验四:输入输出接口的工作原理a. 将实验板上的输入输出接口模块插入计算机主机的扩展插槽中。
b. 打开计算机主机,启动操作系统。
c. 编写一个简单的程序,通过输入输出接口实现数据的输入和输出。
d. 通过逻辑分析仪和示波器的数据分析,观察输入输出接口的工作过程,了解数据的传输和控制原理。
四、实验结果分析1. 实验一:通过观察CPU的工作状态和指令执行过程,可以验证CPU的时钟信号、数据总线、地址总线等工作原理是否正确。
cpu组成与机器指令执行实验实验报告CPU组成与机器指令执行实验实验报告一、引言计算机是现代社会不可或缺的工具,而中央处理器(CPU)则是计算机的核心组成部分。
理解CPU的组成和机器指令的执行过程对于深入理解计算机的工作原理至关重要。
本实验旨在通过搭建一个简单的CPU模型,探究CPU的组成结构和机器指令的执行过程。
二、实验原理1. CPU的组成结构CPU主要由运算器、控制器和寄存器组成。
运算器负责进行各种算术和逻辑运算,控制器则负责指挥各个部件的工作,寄存器用于存储数据和指令。
2. 机器指令的执行过程机器指令的执行包括取指令、译码、执行和访存四个阶段。
取指令阶段从内存中读取指令,译码阶段将指令翻译成对应的操作,执行阶段进行运算或逻辑操作,访存阶段用于读取或写入数据。
三、实验过程1. 搭建CPU模型根据实验要求,我们搭建了一个简单的CPU模型,包括运算器、控制器和寄存器。
通过将这些部件连接起来,我们可以模拟CPU的工作过程。
2. 编写指令为了测试CPU的功能,我们编写了一些简单的指令,包括加法、减法和逻辑运算等。
这些指令将被存储在内存中,CPU在执行过程中会逐条读取并执行。
3. 执行指令我们按照预定的顺序执行指令,观察CPU的工作状态和输出结果。
通过这个过程,我们可以更好地理解指令的执行过程和CPU的工作原理。
四、实验结果在实验过程中,我们成功搭建了一个简单的CPU模型,并编写了一些指令进行测试。
通过执行这些指令,我们观察到CPU按照预期工作,并得到了正确的输出结果。
五、实验分析通过本次实验,我们深入了解了CPU的组成结构和机器指令的执行过程。
我们发现,CPU的运算器、控制器和寄存器相互配合,完成了复杂的运算和逻辑操作。
同时,我们也注意到指令的执行过程需要经过多个阶段,每个阶段都起到了重要的作用。
六、实验总结本次实验让我们对CPU的组成与机器指令的执行有了更深入的理解。
通过搭建CPU模型并执行指令,我们亲身体验了CPU的工作过程,加深了对计算机原理的理解。
第六节CPU组成与机器指令执行实验CPU组成与机器指令执行实验一、实验目的(1)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机;(2)用微程序控制器控制模型机数据通路;(3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。
二、实验电路本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。
因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。
在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。
而在本次实验中,数据通路的控制将由微程序控制器来完成。
CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。
三、实验设备(1)TEC-4计算机组成原理实验系统一台(2)双踪示波器一台(3)直流万用表一只(4)逻辑测试笔一支四、实验任务(1)对机器指令系统组成的简单程序进行译码。
将下表的程序按指令格式手工汇编成十六进制机器代码,此项任务应在预习时完成。
(2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。
连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。
其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。
开关控制控制台时序发生器开关控制指示灯信号控制信号时序信号控制信号微程序控制器数据通路指令代码、条件信号模型计算机连线示意图(3)将上述任务(1)中的程序机器代码用控制台操作存入内存中,并根据程序的需要,用数码开关SW7―SW0设置通用寄存器R2、R3及内存相关单元的数据。
计算机组成与系统结构实验报告CPU设计与实现院(系):专业班级:计算机科学与技术组员:指导教师:实验目得:设计实现CPU部件。
实验仪器:PC机(安装Altebra 公司得开发软件QuartusII,Modelsim)两台TEC—CA计算机组成原理试验箱实验过程:一、理论设计1、1、设计指令集设计CPU第一步,就就是根据需求,确定功能,并且设计出指令集。
指令集包括每一条指令得编码方式,操作码以及每一条指令实现得功能。
考虑到第一次设计CPU,在指令集设计过程中难免会出现考虑不周全或者指令集设计不科学得问题,我们借鉴了经典得31条MIPS指令集。
在对指令集每一条指令进行解读、分析后,我们确定:31条MIPS指令可以满足我们得CPU得基本功能。
下面将31条MIPS指令得编码格式、对应得操作类型以表格得形式列举出来:10$1=1else$1=0rt=1 else rt=0 ;ﻫ其中rs=$2,rt=$1J-typeopaddressj000010addressj 10000goto 10000PC 〈—(PC+4)[31、、28],address,0,0 ;address=10000/4jal000011addressjal 10000$31<-PC+4;ﻫ goto 10000$31<—PC+4;PC<- (PC+4)[31、、28],address,0,0ﻫ ;address=10000/4经典得MIPS指令有三种格式:R—TYPE、I—TYPE、J—TYPE。
其编码格式各不相同,分别代表寄存器操作指令、立即数操作指令、跳转指令。
寄存器操作主要就是将寄存器中得树取出进行运算并存回寄存器;立即数操作为一个寄存器数与指令中得扩展后得立即数进行运算得到结果再存回寄存器;跳转我们后面得设计都就是对这31条指令进行具体实现,所有得内容紧密围绕这31条指令。
1、2、画数据通路图在设计完指令后,要做得就就是根据指令描述得功能确定CPU有哪些部件,并且确定各部件之间得连线方式。
CPU实验报告范文一、实验目的本次实验的目的是设计和实现一个简单的中央处理器(CPU),通过实践掌握CPU的基本工作原理和实现方法。
二、实验原理1.CPU的基本概念中央处理器(CPU)是计算机的核心部件,负责执行计算机指令和控制计算机的操作。
它由运算器、控制器和寄存器组成。
运算器负责执行算术和逻辑运算,包括加法、减法、乘法、除法等。
控制器负责指挥CPU的工作,通过控制总线实现对内存和其他外部设备的访问。
寄存器是CPU内部的存储器,用于暂时存放指令、数据和中间结果。
2.CPU的实现方法CPU的实现采用组合逻辑电路和时序逻辑电路相结合的方法。
组合逻辑电路是由逻辑门构成的电路,它的输入只依赖于当前时刻的输入信号,输出也只与当前时刻的输入信号有关。
而时序逻辑电路则包含存储元件,其输出不仅与当前时刻的输入信号有关,还与之前的输入信号有关。
CPU的实现过程主要包括以下步骤:(1)设计指令集:确定CPU支持的指令集,包括指令的格式和操作码。
(2)设计控制器:根据指令集设计控制器,确定各个指令的执行过程和控制信号。
(3)设计运算器:根据指令集设计运算器,确定支持的算术和逻辑运算。
(4)设计寄存器:确定需要的寄存器数量和位数,设计寄存器的输入输出和工作方式。
3.实验环境和工具本次实验使用的环境和工具如下:(1)硬件环境:计算机、开发板、示波器等。
(2)软件环境:Win10操作系统、Vivado开发工具等。
三、实验步骤1.设计指令集根据实验要求,我们设计了一个简单的指令集,包括加法、减法、逻辑与、逻辑或和移位指令。
每个指令有特定的操作码和操作数。
2.设计控制器根据指令集设计了一个控制器。
控制器根据指令的操作码产生相应的控制信号,控制CPU内部寄存器、运算器和总线的操作。
3.设计运算器根据指令集设计了一个运算器。
运算器包括加法器、减法器、与门和或门等。
它通过输入的操作数和控制信号完成相应的运算操作。
4.设计寄存器根据实验需求确定了所需的寄存器数量和位数。
计算机组成原理实验(六)实验项目名: CPU指令部件实验实验要求:了解CPU重要组成部件-程序计数器、指令寄存器的构造原理,理解CPU是如何按照程序计数器的值依次取指令进行分析执行的过程。
实验内容:(1)预习。
回顾课堂中学习的关于CPU的功能、控制寄存器以及指令处理过程中数据流的相关知识。
本次试验中,将通过实验台模拟CPU顺序取指令进行处理的过程。
(2)了解实验原理,完成硬件电路的连接。
本次实验需要使用地址模块、存储器模块、程序计数器模块、指令寄存器模块和时序启停模块。
按照详细说明中关于实验电路原理的说明,理解并连接好实验电路。
(3)了解各功能模块的控制信号及使用方法,根据实验题目的要求,确定控制动作的发生顺序,设计相应的控制信号序列。
(4)通过实验台的微控制输入开关,逐条的输入微控制信号,在控制信号和时序信号的作用下,利用单步工作模式,观察指令的逐条处理过程。
实验详细说明:(1)实验逻辑框图本次实验的逻辑电路原理如上图所示,需要完成的实验连线包括:①地址锁存器模块扁缆:D0~D7;A0~A7控制信号:LDAR②存储器模块扁缆:D0~D7控制信号:CE,WE③程序计数器模块扁缆: D0~D7控制信号:PC-B, LDPC,LOAD④指令寄存器模块控制信号: LDIR⑤时序启停部件时序信号输入:程序计数器PC在上电复位后初始化为00H,PC中存放的永远是下一条将要执行的指令的地址,将PC的值作为地址访问存储器,获得指令,而后通过总线存储到指令寄存器IR中,等待分析执行,与此同时,控制PC增量。
这样,就完成了CPU一次取指令的过程。
要完成上述过程,需要通过控制信号控制数据通路及部件的操作,下面介绍本次实验涉及的各控制信号。
(2)控制信号说明(注意参考上图)①存储器操作控制信号✶LDAR,将总线上的内容锁存到存储器的地址寄存器中。
✶CE,存储器的片选使能信号。
✶WE,存储器的读/写控制信号。
Eg. 完成一次存储器读操作的控制过程。
实验六,,CPU组成与机器指令执行周期实验讲义实验六UCPU组成与指令周期实验一、实验目的1.用微程序控制器控制数据通路,将相应的信号线连接,构成一台能运行测试程序的CPU。
2.执行一个简单的程序,掌握机器指令与微指令的关系。
3.理解计算机如何取出指令、如何执行指令、如何在一条指令执行结束后自动取出下一条指令并执行,牢固建立的计算机整机概念。
二、预习要求1.回顾前面五个实验内容(实验一至实验五),认真阅读本实验的实验目的和实验内容等,了解CPU组成与指令周期。
2.按照附录二实验报告格式写好预习报告。
最主要的是理论数据要写上,以便与实验数据作比较。
三、实验环境软件:WINXP、串口调试助手软件硬件:1.微机1台2.TEC-8实验系统1台3.逻辑测试笔1支4.编程器公用四、实验内容及说明1.实验电路及说明硬连线控制器控制信号切换电路ALUA端口B端口CZR0R1R2R3IRPCAR双端口RAMDBUSS0S1S2S3MLDCLDZ控制信号控制信号MEMWMBUSA7LA0LD7LD0LABUSLPCPCINCCLR#CLR#LIRA组控制信号组控制信号B组控制信号组控制信号CZCLR#SBUS控制转换2选1选择器IR3IR0CLR#QDMFDPPC7PC0AR7AR0A7A0B7B0T3T3T3T3T2T3SWDRD0RD1RS0RS1LR0T3T 3T3LR1LR2LR3CINA7RA0RD7RD0RPCADDLARARINCIARLIARIABUST3SELCTLT3SWCSWA 微程序控制器CZCLR#T3SEL3SEL0IR3IR0IR7IR4W3W1STOPINTENINTDIINTPSHORTLONG时序发生器T1T2T3W1W2W3INTQDBUSDBUS数据开关数据开关SD7SD0PC7PC0IR7IR4DRWDRWDRWDRW4选1选择器A4选1选择器B24译码器RD1RD0LR0LR1LR2LR3IRBUSIRBUSRD0RD1RS1RS0INS7INS0数据总线数据总线独立K15-K0图6.1TEC-8模型计算机框图本实验将前面几个实验中的所有电路,包括时序发生器、通用寄存器组、算术逻辑运算部件、存储器、微程序控制器等模块组合在一起,构成一台能够运行程序的简单处理机。
CPU组成与机器指令执行实验报告1. 引言本实验旨在探究中央处理器(CPU)的组成以及机器指令的执行过程。
通过深入理解CPU的工作原理和机器指令的执行流程,我们可以更好地理解计算机的数据处理过程。
2. CPU的组成CPU是计算机的核心组件之一,它负责执行计算机上的所有任务。
一个典型的CPU由以下几个重要组成部分构成:2.1 控制单元(Control Unit)控制单元是CPU的核心组件之一,负责协调和控制整个CPU的操作。
它从存储器中读取指令,并解码这些指令以确定下一步的操作。
2.2 算术逻辑单元(Arithmetic Logic Unit,ALU)算术逻辑单元是CPU的另一个重要组成部分,负责执行各种算术和逻辑运算,如加法、减法、乘法、除法等。
ALU能够执行基本的数学计算和布尔逻辑运算。
2.3 寄存器(Registers)寄存器是CPU内部的临时存储器,用于存储指令和数据。
CPU拥有多个寄存器,每个寄存器都有特定的功能,如程序计数器(Program Counter,PC)用于存储下一条指令的地址,累加器(Accumulator)用于存储运算结果等。
3. 机器指令的执行过程机器指令是计算机能够理解和执行的指令,它们以二进制的形式表示。
机器指令的执行过程可以分为以下几个步骤:3.1 取指令(Fetch)控制单元从存储器中读取下一条指令,并将其存储在指令寄存器(Instruction Register,IR)中。
3.2 解码指令(Decode)控制单元解码指令寄存器中的指令,确定需要执行的操作类型和操作数。
3.3 执行指令(Execute)根据解码的结果,CPU执行指令中指定的操作。
这可能涉及到从寄存器中读取数据、进行算术运算、修改寄存器的值等。
3.4 存储结果(Store)执行指令后,结果可能需要存储在寄存器或存储器中,以备后续操作使用。
4. 实验步骤在本次实验中,我们将使用一个简单的汇编语言程序来演示机器指令的执行过程。
实验一运算器[实验目的]1.掌握算术逻辑运算加、减、乘、与的工作原理;2.熟悉简单运算器的数据传送通路;3.验证实验台运算器的8位加、减、与、直通功能;4.验证实验台4位乘4位功能。
[接线]功能开关:DB=0 DZ=0 DP=1 IR/DBUS=DBUS接线:LRW:GND(接地)IAR-BUS# 、M1、M2、RS-BUS#:接+5V控制开关:K0:SW-BUS# K1:ALU-BUSK2:S0 K3:S1 K4:S2K5:LDDR1 K6:LDDR2[实验步骤]一、(81)H与(82)H运算1.K0=0:SW开关与数据总线接通K1=0:ALU输出与数据总线断开2.开电源,按CLR#复位3.置数(81)H:在SW7—SW0输入10000001→LDDR2=1,LDDR1=0→按QD:数据送DR2置数(82)H:在SW7—SW0输入10000010→LDDR2=0,LDDR1=1→按QD:数据送DR1 4.K0=1:SW开关与数据总线断开K1=1:ALU输出与数据总线接通5. S2S1S0=010:运算器做加法(观察结果在显示灯的显示与进位结果C的显示)6.改变S2S1S0的值,对同一组数做不同的运算,观察显示灯的结果。
二、乘法、减法、直通等运算1.K0K1=002.按CLR#复位3.分别给DR1和DR2置数4.K0K1=115. S2S1S0取不同的值,执行不同的运算[思考]M1、M2控制信号的作用是什么?运算器运算类型选择表选择操作S2 S1 S00 0 0 A&B0 0 1 A&A(直通)0 1 0 A+B0 1 1 A-B1 0 0 A(低位)ΧB(低位)完成以下表格ALU-BUS SW-BUS# 存储器内容S2S1S0 DBUS C输入时:计算时:DR1:01100011DR2:10110100(与)DR1:10110100DR2:01100011(直通)DR1:01100011DR2:01100011(加)DR1:01001100DR2:10110011(减)DR1:11111111DR2:11111111(乘)实验二双端口存储器[实验目的]1.了解双端口存储器的读写;2.了解双端口存储器的读写并行读写及产生冲突的情况。
中央处理器实验报告计算机组成与系统结构中央处理器试验报告姓名:试验时间:2012年6月一、实验名称:中央处理器的设计二、实验原理:将之前设计的数据存储器,寄存器组,多路选择器,运算器,指令译码器以及取指令部件通过数据通路构成一个整体,从而实现中央处理器从取用户输入的指令开始,到给出运算结果,并存入指定寄存器或者存储器的整个过程,由于前期准备较为充足,各个部件指令都已完善,所以需要编写一段主程序调用各个部件的子程序,从而组装成为一个完整的中央处理器。
三、试验目的:编写主函数调用各个部件子程序来实现中央处理器的功能。
四、 Verilog源代码:用于调用子程序的主程序:moduledzqcpu(clk,I,run,busA,busB,AluB,AluF,busW,Datain,Dataout);parameter n=32;input clk,run;output [n-1:0] I,busA,busB,AluB,AluF,busW,Datain,Dataout;wireRegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst;wire [2:0] ALUctr;wire [5:0] op,func;dataroaddataroadbj(clk,RegWr,Branch,Jump,ExtOp,AluSrc,ALUctr,Me mWr,MemtoReg,RegDst,I,run,busA,busB,AluB,AluF,busW,Datain,Dataout);assign op=I[31:26];assign func=I[5:0];zlymqkzbj(op,func,RegWr,Branch,Jump,ExtOp,AluSrc,ALUctr,Mem Wr,MemtoReg,RegDst);Endmodule取指令部件子程序:module qzl(clk,Branch,Jump,Zero,instruction,run);input clk,Zero,Branch,Jump,run;output [31:0] instruction;wire [4:0] addmem;reg [29:0] PC=25;wire [29:0] Newpc,PC_1,imm30,PC_2,PC_3,PC_12;wire Branch_zero;reg reset=1;//fetch instruction from memory,only 32*32b,so PC[2:0]assign addmem={PC[2:0],2'b00};instrumem InsMem(addmem,instruction);//PCalways @(negedge clk)if (run==1)beginif (reset==1)beginPC <=0;reset<=0;endelsebeginPC <= Newpc;endend//Newpcassign PC_1=PC+1;assign imm30={{14{instruction[15]}},instruction[15:0]}; assign PC_2=PC_1+imm30;assign PC_3={PC[29:26],instruction[25:0]};assign Branch_zero=Branch & Zero;defparam mux4.k = 30 ;mux2to1 mux4(PC_1,PC_2,Branch_zero,PC_12);defparam mux5.k= 30 ;mux2to1 mux5(PC_12,PC_3,Jump,Newpc);endmodule// instruction memorymodule instrumem(addr,instruout);parameter n=32;input [4:0] addr;output [n-1:0] instruout;reg [n-1:0] instruout;// Declare the RAM variablereg [n-1:0] Mem [31:0];// write instruction: add 3<=(1)+(2),sub 6<=(4)-(5),jump 0 always @(*)beginMem[0]<={6'b000100,5'b00001,5'b00010,5'b00000,5'b0000 0,6'b000001};Mem[8]<={6'b000010,5'b00000,5'b00000,5'b00000,5'b00000,6' b000010};end// readalways @(addr)begininstruout <= Mem[addr];endEndmodule多路选择器部件子程序:二选一:module mux2to1 (V, W, Sel, F); parameter k = 32;input [k-1:0] V, W;input Sel;output [k-1:0] F;reg [k-1:0] F;always @(V or W or Sel)if (Sel == 0)F <= V;elseF <= W;Endmodule三选一:module mux3to1 (U,V, W, Sel, F); parameter k = 32;input [k-1:0] U,V, W;input [1:0] Sel;output [k-1:0] F;reg [k-1:0] F;always @(U or V or W or Sel) case (Sel)2'b00:F<=U;2'b01:F<=V;2'b10:F<=W;endcaseEndmodule数据存储器部件子程序:module datamem( datain,addr,WE, clk,dataout);parameter n=32;input [n-1:0] datain;input [5:0] addr;input WE, clk;output [n-1:0] dataout;// Declare the RAM variablereg [n-1:0] Mem [63:0];// Writealways @ (negedge clk)beginif (WE)Mem[addr] <= datain;end// readassign dataout = Mem[addr];Endmodule寄存器组部件子程序:module jcqz(clk,wre,wd,data,s1,s2,out1,out2,run); input clk,wre,run;input [4:0] wd;input [31:0] data;input [4:0]s1,s2;output [31:0] out1,out2;reg [31:0] out1,out2;reg [31:0] mem [31:0];//writealways @ (negedge clk)if (run==1)beginif(wre == 1 )beginmem[wd] <= data;endendelsebeginmem[1] <= 10;mem[2] <= 10;mem[3] <=40;mem[4] <=50;end//readalways @ (s1 or s2 or run ) if (run==1)beginout1 <= mem[s1];out2 <= mem[s2];endelsebeginout1 <= mem[3];out2 <= mem[4];endEndmodule运算器部件子程序:module ysq (A, B, ALUctr, Zero, Result, Overflow);parameter n = 32;input [n-1:0] A, B;input [2:0] ALUctr;output [n-1:0] Result;output Overflow,Zero;wire Add_carry,Add_overflow,Add_sign,Zero;wire [n-1:0] Add_result;wire SUBctr,OVctr,SIGctr;wire [1:0] OPctr;wire AC,SO,Cin;wire [n-1:0] AB,SUBctr32,B2;wire less;wire [n-1:0] ZO;// Define ALU control signalassign SUBctr=ALUctr[2];assign OVctr=~ALUctr[1]& ALUctr[0];assign SIGctr=ALUctr[0];assign OPctr={ALUctr[2] & ALUctr[1], ~ALUctr[2] & ALUctr[1] & ~ALUctr[0]}; //B2assign SUBctr32={n{SUBctr}};assign B2=B^SUBctr32;//adder: Overflow,Zeroassign Cin=SUBctr;adderkadder(A,B2,Cin,Add_carry,Zero,Add_overflow,Add_sign,Add_resu lt);assign SO=Add_overflow ^ Add_sign;assign AC=Cin ^ Add_carry;assign Overflow=Add_overflow & OVctr;//Resultassign AB=A | B;mux2to1 mux1(AC,SO,SIGctr,less);mux2to1 mux2(8'h00000000,8'h00000001,less,ZO);mux3to1 mux3(Add_result,AB,ZO,OPctr,Result);endmodule// k-bit addermodule adderk (X,Y,Cin,Cout, zero, overflow, sign, result);parameter k = 32;input Cin;input [k-1:0] X, Y;output [k-1:0] result;output Cout,zero,overflow,sign;reg [k-1:0] result;reg Cout,zero,overflow,sign;always @(X or Y or Cin)begin{Cout, result} <= X + Y + Cin;overflow <= (X[k-1] & Y[k-1] & ~result[k-1])|(~X[k-1] & ~Y[k-1] & result[k-1]);if (result==0)zero<=1;elsezero<=0;sign<=result[k-1];endendmodule指令译码器部件子程序:modulezlymq(op,func,RegWr,Branch,Jump,ExtOp,AluSrc,ALUctr,Me mWr,MemtoReg,RegDst);input [5:0] op,func;outputRegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst;output [2:0] ALUctr;regRegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst;reg [2:0] ALUctr;always @(op)case (op)6'b000000:begin{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr}=7' b0010010;case (func)6'b100000:ALUctr=3'b001;6'b100010:ALUctr=3'b101;6'b100011:ALUctr=3'b100;6'b101010:ALUctr=3'b111;6'b101011:ALUctr=3'b110;endcaseend6'b001101:begin{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,Ext Op}=8'b00010100; ALUctr=3'b010;end6'b001001:begin{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,Ext Op}=8'b00010101; ALUctr=3'b000;end6'b100011:begin{Branch,Jump,RegDst,AluSrc,MemtoReg,RegWr,MemWr,Ext Op}=8'b00011101; ALUctr=3'b000;end6'b101011:begin{Branch,Jump,AluSrc,RegWr,MemWr,ExtOp}=6'b001011;ALUctr=3'b000;end6'b000100:begin{Branch,Jump,AluSrc,RegWr,MemWr}=5'b10000;ALUctr=3'b100;end6'b000010:{Branch,Jump,RegWr,MemWr}=4'b0100;endcaseendmodule数据通路部件子程序:moduledataroad(clk,RegWr,Branch,Jump,ExtOp,AluSrc,ALUctr,Mem Wr,MemtoReg,RegDst,instruction,run,busA,busB,AluB,AluF,busW,Datain,Dataout); parameter n=32;inputclk,RegWr,Branch,Jump,ExtOp,AluSrc,MemWr,MemtoReg,RegDst ,run;input [2:0] ALUctr;output [n-1:0] instruction;output [n-1:0] busA,busB,AluB,AluF,busW,Datain,Dataout; wire [5:0] op,func;wire [4:0] Rs,Rt,Rd;wire [15:0] imm16;wire [4:0] Rw,Ra,Rb;wire [n-1:0] imm32,B2;wire Zero,Overflow,We;//instructionqzl qzlbj(clk,Branch,Jump,Zero,instruction,run);assign op=instruction[31:26];assign Rs=instruction[25:21];assign Rt=instruction[20:16];assign Rd=instruction[15:11];assign func=instruction[5:0];assign imm16=instruction[15:0];//registersmux2to1 mux6(Rt,Rd,RegDst,Rw);assign Ra=Rs;assign Rb=Rt;assign We=RegWr & ~Overflow;jcqz jcqzbj(clk,We,Rw,busW,Ra,Rb,busA,busB,run);//ALUassign imm32={{16{imm16[15] & ExtOp}},imm16[15:0]}; mux2to1 mux7(busB,imm32,AluSrc,AluB);ysq ysqbj(busA,AluB, ALUctr, Zero, AluF, Overflow);//data memoryassign Datain=busB;datamem datamembj(Datain,AluF,MemWr, clk,Dataout);mux2to1 mux8(AluF,Dataout,MemtoReg,busW);endmodule五、试验心得:本次实验通过一个主调函数调用其他各个子函数的程序,构建了一个完整的中央处理器,需要对中央处理器有非常细致的了解,了解整个过程才能很好的设计整个通路,本次实验过程中遇到了很多问题,例如:函数参数调用不正确,指令字长不统一等等,但都得到了解决,最后成功的仿真出了中央处理器的运行过程。
肇庆学院计算机学院/软件学院实验报告专业计算机学院班级姓名学号课程名称:CPU组成与机器指令执行实验学年2014—2015 学期1□/ 2□课程类别专业必修 限选□任选□实践□评分:批阅老师:2016年月日●实验目的(1)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机;(2)用微程序控制器控制模型机数据通路;(3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。
●实验电路本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。
因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。
在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。
而在本次实验中,数据通路的控制将由微程序控制器来完成。
CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。
●实验设备(1)TEC-9计算机组成原理实验系统一台(2)双踪示波器一台(3)直流万用表一只(4)逻辑测试笔一支●实验任务(1)对机器指令系统组成的简单程序进行译码。
将下表的程序按指令格式手工汇编成十六进制机器代码,此项任务应在预习时完成。
地址指令机器代码00H LDA R0,[R2] 58H01H LDA R1,[R3] 5DH02H ADD R0,R1 04H03H JC +4 94H04H AND R2,R3 3EH05H SUB R3,R2 1BH06H STA R3,[R2] 4BH07H STP 60H08H JMP [R1] 84H(2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。
连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。
其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。
开关控制控制台时序发生器时序信号开关控制指示灯信号控制信号时序信号控制信号微程序控制器数据通路指令代码、条件信号图13 模型计算机连线示意图(3)将上述任务(1)中的程序机器代码用控制台操作存入内存中,并根据程序的需要,用数码开关SW7—SW0设置通用寄存器R2、R3及内存相关单元的数据。
注意:由于设置通用寄存器时会破坏内存单元的数据,因此一般应先设置寄存器的数据,再设置内存数据。
也可以使用上端软件或实验台监控系统用PS2键盘写入内容。
(4)用单拍(DP)方式执行一遍程序,列表记录通用寄存器堆RF中四个寄存器的数据,以及由STA指令存入RAM中的数据(程序结束后从RAM的相应单元中读出),与理论分析值作对比。
单拍方式执行时注意观察微地址指示灯、IRBUS指示灯、DBUS指示灯、AR2指示灯、AR1指示灯和判断字段指示灯的值,以跟踪程序中取指令和执行指令的详细过程(可观察到每一条微指令)。
(5)以单指(DZ)方式重新执行程序一遍,注意观察IR/DBUS指示灯、AR2/AR1指示灯的值(可观察到每一条机器指令)。
执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。
注意:单指方式执行程序时,四个通用寄存器和RAM中的原始数据与第一遍执行程序的结果有关。
(6)以连续方式(DB、DP、DZ都设为0)再次执行程序。
这种情况相当于计算机正常运行程序。
由于程序中有停机指令STP,程序执行到该指令时自动停机。
执行结束后,记录RF中四个寄存器的数据,以及由STA指令存入RAM中的数据,与理论分析值作对比。
同理,程序执行前的原始数据与第二遍执行结果有关。
实验步骤和实验结果1、对机器指令系统组成的简单程序进行译码。
地址指令机器代码00H LDA R0,[R2] 58H01H LDA R1,[R3] 5DH02H ADD R0,R1 04H03H JC +4 94H04H AND R2,R3 3EH05H SUB R3,R2 1BH06H STA R3,[R2] 4BH07H STP 60H08H JMP [R1] 84H2、接线微程序控制器与数据通路之间的线可以通过选择开关直接选择。
将开关设置为“微程序”。
只需连接数据通路部分的线。
a、数据通路的LDIR接CER、LDPC接LDR4、LDDR1接LDDR2、M1接M2、LDAR1接LDAR2。
b、指令寄存器IR的输出IR0接双端口寄存器堆的RD0、WR0,IR1接RD1、WR1,IR2接RS0,IR3接RS1。
信号1 LDIR LDPC LDDR1 M1 LDAR1 IR0 IR0 IR1 IR1 IR2 IR3信号2 CER LDR4 LDDR2 M2 LDAR2 RD0 WR0 RD1 WR1 RS0 RS1选择模式开关拔=“微程序”3、实验步骤(1)、设置通用寄存器R2、R3的值。
在本操作中,使R2 = 60H,R3 = 61H。
令DP = 0,DB = 0,DZ =0,使实验系统处于连续运行状态。
令SWC = 0、SWB = 1、SWA = 1,使实验系统处1)、于寄存器加载工作方式KLD。
按CLR#按钮,使实验系统处于初始状态。
2)、在SW7—SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用。
该存储器地址最好是不常用的一个地址,以免设置通用寄存器操作破坏重要的存储器单元的内容。
例如可将该地址设置为0FFH。
3)、按一次QD按钮,将0FFH写入AR0和AR1。
4)、在SW7—SW0上设置02H,作为通用寄存器R2的寄存器号。
按一次QD按钮,则将02H写入IR。
5)、在SW7—SW0设置60H,作为R2的值。
按一次QD按钮,将60H写入IR指定的R2寄存器。
6)、在SW7—SW0上设置03H,作为通用寄存器R3的寄存器号。
按一次QD按钮,将03H写入IR。
7)、在SW7—SW0设置61H,作为R3的值。
按一次QD按钮,将61H写入R3。
设置R2、R3结束,按CLR#按钮,使实验系统恢复到初始状态。
或用实验台监控系统或系统上端软件直接写入内容(2)、存程序机器代码。
本操作中,我们从00地址开始依次存10个机器代码:58H,5DH,04H,94H,3EH,1BH,4BH, 60H,84H。
在60H存入24H,用于给R0置初值;在61H存入83H,用于给R0置初值。
令DP = 0,DB = 0,DZ =0,使实验系统处于连续运行状态。
令SWC = 0、SWB = 1、SWA = 0,使实验系统处于写双端口存储器工作方式KWE。
按CLR#按钮,使实验系统处于初始状态。
1)、置SW7—SW0为00H,按QD按钮,将00H写入AR1。
2)、置SW7—SW0 为58H,按QD按钮,将58H写入存储器00H单元。
AR1自动加1,变为01H。
3)、置SW7—SW0为5DH,按QD按钮,将5DH写入存储器01H单元。
AR1自动加1,变为02H。
重复进行下去,一直到将84H写入存储器09H单元。
按CLR#按钮,使实验系统恢复到初始状态。
4)、置SW7—SW0为60H,按QD按钮,将60H写入AR1。
5)、置SW7—SW0 为24H,按QD按钮,将24H写入存储器60H单元。
AR1自动加1,变为61H。
6)、置SW7—SW0为83H,按QD按钮,将83H写入存储器61H单元。
按CLR#按钮,使实验系统恢复到初始状态。
或用实验台监控系统或系统上端软件直接写入内容(3)用单拍(DP)方式执行一遍程序。
(SWC=0,SWB=0,SWA==0;DP=1,DZ=0,DB=0)在单拍执行过程中,首先要随时监测AR2的值和IR的值,以判定程序执行到何处,正在执行哪条指令。
监测微地址指示灯和判断字段指示灯,对照微程序流程图,可以判断出微指令的地址和正在进行的微操作。
程序执行的结果如下:初值:R0未定,R1未定,R2 = 60H,R3 = 61H。
存储器60H单元的内容是24H,61H单元的内容是83H。
地址指令机器代码R0 R1 R2 R3 察看AR2即PC地址00H LDA R0,[R2] 58H 24H XXH 60H 61H 0000000001H LDA R1,[R3] 5DH 24H 83H 60H 61H 0000000102H ADD R0,R1 04H A7H 83H 60H 61H 0000001003H JC +4 94H A7H 83H 60H 61H 0000001104H AND R2,R3 3EH A7H 83H 60H 61H 0000010005H SUB R3,R2 1BH A7H 83H 60H 01H 0000010106H STA R3,[R2] 4BH A7H 83H 60H 01H 0000011007H STP 60H A7H 83H 60H 01H 0000011108H JMP [R1] 84H A7H 83H 60H 01H 00001111(4)、用单指(DZ=1)方式执行程序。
1)、按步骤(1)写寄存器内容。
使R2 = 60H,R3 = 61H。
2)、按步骤(2)写存储器内容。
从00地址开始依次存10个机器代码:58H,5DH,04H,95H,3EH,1BH,4BH,60H,84H。
在60H存入24H,用于给R0置初值;在61H存入83H,用于给R0置初值。
3)、单指执行程序(SWC=0,SWB=0,SWA==0;DP=0,DZ=1,DB=0)初值:R0未定,R1未定,R2 = 60H,R3 = 61H。
存储器60H单元的内容是24H,61H单元的内容是83H。
地址指令机器代码R0 R1 R2 R3 察看AR2即PC地址00H LDA R0,[R2] 58H 24H XXH 60H 61H 0000000001H LDA R1,[R3] 5DH 24H 83H 60H 61H 0000000102H ADD R0,R1 04H A7H 83H 60H 61H 0000001003H JC +4 94H A7H 83H 60H 61H 0000001104H AND R2,R3 3EH A7H 83H 60H 61H 0000010005H SUB R3,R2 1BH A7H 83H 60H 01H 0000010106H STA R3,[R2] 4BH A7H 83H 60H 01H 0000011007H STP 60H A7H 83H 60H 01H 0000011108H JMP [R1] 84H A7H 83H 60H 01H 00001111(5)、用连续方式执行程序。