CPU与简单模型机设计实验实验报告
实验4 简单CPU设计与仿真
预做实验报告4简单CPU设计与仿真一、实验目的理解并掌握CPU的基本电路结构及其设计方法,学会使用Verilog HDL对电路进行行为建模、结构建模以及仿真测试。
二、实验内容利用Verilog HDL设计一个简单的CPU模型,并进行仿真测试。
要求该处理机能够实现下列指令系统:31262521201615540指令000000rd rs1rs2and rd,rs1,rs2 000001rd rs1imme andi rd,rs1,imme 000010rd rs1rs2or rd,rs1,rs2 000011rd rs1imme ori rd,rs1,imme 000100rd rs1rs2add rd,rs1,rs2 000101rd rs1imme addi rd,rs1,imme 000110rd rs1rs2sub rd,rs1,rs2 000111rd rs1imme subi rd,rs1,imme 001000rd rs1imme load rd,rs1,imme 001001rd rs1imme store rd,rs1,imme 001010disp bne disp001011disp beq disp001100disp branch disp 要求把指令的执行分为以下5个步骤,每个步骤用一个时钟周期。
1、取指令及PC+1周期2、指令译码、读寄存器及转移周期3、ALU执行或者存储器地址计算周期4、ALU指令结束周期或者存储器访问周期5、写回周期三、实验环境PC机1台、Modelsim仿真软件1套。
四、实验步骤1、电路结构设计与逻辑设计多周期处理机的总体电路图P C寄存器堆ALUABZERO 存储器Addres sDataou t Detain CSOEWE WRITEMEMALUOPZEROWRITEZEROM U XM U X M U X1偏移量符号扩展立即数符号扩展WRITEREG DI AD A1A2Q2Q1SELLOADSELST偏移量立即数Rd rs1rs2RdWRITEPCM U XI RM U XSELLDSTSELALUASELALUBAB IM WRITEIRZEROOPCODE 控制部件控制信2、建立Verilog 模型module TOP(clk,rst,start,memwe,memin,memaddr,zero,n,v,c,dataout);input clk,rst,start,memwe;input [31:0]memin;input [4:0]memaddr;output [31:0]dataout;output n,v,c,zero;wire clk,rst;wire writepc,selldst,writemem,writeir,selload,selst,writereg,selalua,writezero;wire [5:0]opcode;wire [1:0]aluop,selalub;wire zero;datapathu0(writepc,selldst,writemem,writeir,selload,selst,writereg,selalua,selalub,aluop,w ritezero,clk,rst,memin,memaddr,memwe,zero,n,v,c,opcode,dataout);controlu1(clk,start,zero,opcode,writepc,selldst,writemem,writeir,selload,selst,writereg,se lalua,selalub,aluop,writezero);endmodulemoduledatapath(writepc,selldst,writemem,writeir,selload,selst,writereg,selalua,selalub,alZEROuop,writezero,clk,rst,memin,memaddr,memwe,zero,n,v,c,opcode,dataout); inputwritepc,selldst,writemem,writeir,selload,selst,writereg,selalua,writezero,clk,rst,m emwe;input[1:0]selalub,aluop;input[4:0]memaddr;input[31:0]memin;output zero,n,v,c;output[5:0]opcode;output[31:0]dataout;wire[4:0]pcout,address,memaddr,mux3out;wire[31:0]memin,mux4out,mux5out,imme,disp;wire memwe,zero1;wire[31:0]dataout,Q1,datain,irout,f,aluout;pc pc1(pcout,aluout[4:0],writepc,clk,rst);mux21_5mux1(address,pcout,aluout[4:0],selldst);memorymem(dataout,datain,address,writemem,memin,memaddr,memwe,clk,rst);//memin,memaddr,memweÊÇΪÁËÔڼĴæÆ÷ÖÐÊäÈëÊý¾Ý¶øÓÃir ir1(irout,dataout,clk,rst,writeir);mux21_32mux2(f,aluout,dataout,selload);mux21_5mux3(mux3out,irout[4:0],irout[25:21],selst);registerfileregisterfile(Q1,datain,f,clk,rst,writereg,irout[25:21],irout[20:16],mux3out); mux21_32mux4(mux4out,Q1,{27'b0,pcout},selalua);assignimme={irout[15],irout[15],irout[15],irout[15],irout[15],irout[15],irout[15],irout[1 5],irout[15],irout[15],irout[15],irout[15],irout[15],irout[15],irout[15],irout[15],iro ut[15:0]};assigndisp={irout[25],irout[25],irout[25],irout[25],irout[25],irout[25],irout[25:0]}; mux41_32mux5(mux5out,datain,imme,32'd1,disp,selalub);ALU alu1(aluop,mux4out,mux5out,aluout,n,v,c,zero1);dff zeroflag(zero,zero1,clk,rst,writezero);assign opcode=irout[31:26];endmodulemodulecontrol(clk,start,zero,opcode,writepc,selldst,writemem,writeir,selload,selst,writer eg,selalua,selalub,aluop,writezero);input clk,start,zero;input[5:0]opcode;output writepc,selldst,writemem,writeir,selload,selst,writereg,selalua,writezero;output[1:0]selalub,aluop;reg[3:0]q;wire[3:0]d;wire zero;always@(posedge clk)beginif(start)q<=4'd0;elseq<=d;endassignd[0]=(~q[3]&~q[2]&~q[1]&~q[0])|((~q[3]&~q[2]&~q[1]&q[0])&(~opcode[3]&op code[0]))|((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&op code[0]))|(~q[3]&~q[2]&q[1]&q[0])|(~q[3]&q[2]&~q[1]&q[0]);assignd[1]=((~q[3]&~q[2]&~q[1]&q[0])&(~opcode[3]&~opcode[0]))|((~q[3]&~q[2]&~q [1]&q[0])&(~opcode[3]&opcode[0]))|(~q[3]&~q[2]&q[1]&~q[0])|(~q[3]&~q[2]& q[1]&q[0])|(q[3]&~q[2]&~q[1]&~q[0]);assignd[2]=((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&~opcod e[0]))|((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&opcod e[0]))|(~q[3]&~q[2]&q[1]&~q[0])|(~q[3]&~q[2]&q[1]&q[0]);assignd[3]=(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1]& ~q[0]);assignwritepc=(~q[3]&~q[2]&~q[1]&~q[0])|((~q[3]&~q[2]&~q[1]&q[0])&((opcode[3]& opcode[2]&~opcode[1]&~opcode[0])|(opcode[3]&~opcode[2]&opcode[1]&~opco de[0]&~zero)|(opcode[3]&~opcode[2]&opcode[1]&opcode[0]&zero)));assignselldst=(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1] &~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assign writemem=q[3]&~q[2]&~q[1]&q[0];assign writeir=~q[3]&~q[2]&~q[1]&~q[0];assignselload=(~q[3]&q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&q[1] &~q[0]);assign selst=(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1]&q[0]);assignwritereg=(~q[3]&q[2]&q[1]&~q[0])|(~q[3]&q[2]&q[1]&q[0])|(q[3]&~q[2]&q[1] &~q[0]);assign selalua=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0]); assign selalub[1]=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0]);assignselalub[0]=(~q[3]&~q[2]&~q[1]&q[0])|(~q[3]&~q[2]&q[1]&q[0])|(~q[3]&q[2]&~ q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(~q[3]&q[2]&q[1]&q[0])|(q[3]&~q[2]&~q [1]&~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assign writezero=(~q[3]&q[2]&q[1]&~q[0])|(~q[3]&q[2]&q[1]&q[0]);assignaluop[1]=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0])|((~q[3]&~q[2] &q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&~q[2]&q[1]&q[0])&(~opcode[ 3]&opcode[2]))|(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|((~q[3]&q[2]&q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&q[2]&q[1]&q[0])&(~opcode[3]&opcode[2]))|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[ 2]&q[1]&~q[0]);assignaluop[0]=((~q[3]&~q[2]&q[1]&~q[0])&(~opcode[3]&opcode[1]))|((~q[3]&~q[2] &q[1]&q[0])&(~opcode[3]&opcode[1]))|((~q[3]&q[2]&q[1]&~q[0])&(~opcode[3] &opcode[1]))|((~q[3]&q[2]&q[1]&q[0])&(~opcode[3]&opcode[1])); endmodulemodule memory(dataout,datain,address,we,memin,memaddr,memwe,clk,reset); output[31:0]dataout;input[31:0]datain,memin;input[4:0]address,memaddr;input clk,reset,we,memwe;wire we1;wire[4:0]address1;wire[31:0]decoderout;wire[31:0]regen;wire[31:0]datain1;wire[31:0]q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21, q22,q23,q24,q25,q26,q27,q28,q29,q30,q31;assign address1=memwe?memaddr:address;assign datain1=memwe?memin:datain;decoder dec0(decoderout,address1);assign we1=we|memwe;assign regen[0]=decoderout[0]&we1;assign regen[1]=decoderout[1]&we1;assign regen[2]=decoderout[2]&we1;assign regen[3]=decoderout[3]&we1;assign regen[4]=decoderout[4]&we1;assign regen[5]=decoderout[5]&we1;assign regen[6]=decoderout[6]&we1;assign regen[7]=decoderout[7]&we1;assign regen[8]=decoderout[8]&we1;assign regen[9]=decoderout[9]&we1; assign regen[10]=decoderout[10]&we1; assign regen[11]=decoderout[11]&we1; assign regen[12]=decoderout[12]&we1; assign regen[13]=decoderout[13]&we1; assign regen[14]=decoderout[14]&we1; assign regen[15]=decoderout[15]&we1; assign regen[16]=decoderout[16]&we1; assign regen[17]=decoderout[17]&we1; assign regen[18]=decoderout[18]&we1; assign regen[19]=decoderout[19]&we1; assign regen[20]=decoderout[20]&we1; assign regen[21]=decoderout[21]&we1; assign regen[22]=decoderout[22]&we1; assign regen[23]=decoderout[23]&we1; assign regen[24]=decoderout[24]&we1; assign regen[25]=decoderout[25]&we1; assign regen[26]=decoderout[26]&we1; assign regen[27]=decoderout[27]&we1; assign regen[28]=decoderout[28]&we1; assign regen[29]=decoderout[29]&we1; assign regen[30]=decoderout[30]&we1; assign regen[31]=decoderout[31]&we1; register reg0(q0,datain1,clk,reset,regen[0]); register reg1(q1,datain1,clk,reset,regen[1]); register reg2(q2,datain1,clk,reset,regen[2]); register reg3(q3,datain1,clk,reset,regen[3]); register reg4(q4,datain1,clk,reset,regen[4]); register reg5(q5,datain1,clk,reset,regen[5]); register reg6(q6,datain1,clk,reset,regen[6]); register reg7(q7,datain1,clk,reset,regen[7]); register reg8(q8,datain1,clk,reset,regen[8]); register reg9(q9,datain1,clk,reset,regen[9]); register reg10(q10,datain1,clk,reset,regen[10]); register reg11(q11,datain1,clk,reset,regen[11]); register reg12(q12,datain1,clk,reset,regen[12]); register reg13(q13,datain1,clk,reset,regen[13]); register reg14(q14,datain1,clk,reset,regen[14]); register reg15(q15,datain1,clk,reset,regen[15]); register reg16(q16,datain1,clk,reset,regen[16]); register reg17(q17,datain1,clk,reset,regen[17]); register reg18(q18,datain1,clk,reset,regen[18]); register reg19(q19,datain1,clk,reset,regen[19]); register reg20(q20,datain1,clk,reset,regen[20]);register reg21(q21,datain1,clk,reset,regen[21]);register reg22(q22,datain1,clk,reset,regen[22]);register reg23(q23,datain1,clk,reset,regen[23]);register reg24(q24,datain1,clk,reset,regen[24]);register reg25(q25,datain1,clk,reset,regen[25]);register reg26(q26,datain1,clk,reset,regen[26]);register reg27(q27,datain1,clk,reset,regen[27]);register reg28(q28,datain1,clk,reset,regen[28]);register reg29(q29,datain1,clk,reset,regen[29]);register reg30(q30,datain1,clk,reset,regen[30]);register reg31(q31,datain1,clk,reset,regen[31]);mux_32mux0(dataout,q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q 18,q19,q20,q21,q22,q23,q24,q25,q26,q27,q28,q29,q30,q31,address); endmodule3、设计测试文件`timescale1ns/1nsmodule TOP_test;reg clk,rst,start,memwe;reg[31:0]memin;reg[4:0]memaddr;wire zero,n,v,c;wire[31:0]dataout;TOP u(clk,rst,start,memwe,memin,memaddr,zero,n,v,c,dataout);always#50clk=~clk;initialbeginclk=1;rst=0;start=0;#20rst=1;//load instruction and data to memory.#100rst=0;memwe=1;memin=32'b001000_00000_11111_0000000000010000;//load r0,r31,16memaddr=5'd0;#100memwe=1;memin=32'b001001_00000_11111_0000000000010001;//store r0,r31,17memaddr=5'd1;#100memwe=1;memin=32'b001000_00001_11111_0000000000010001;//load r1,r31,17memaddr=5'd2;#100memwe=1;memin=32'b000001_00010_00000_0101010101010101;//andi r2,r0,16'b0101010101010101memaddr=5'd3;#100memwe=1;memin=32'b000101_00011_00010_0000000000001011;//addi r3,r2,16'b0000000000001011memaddr=5'd4;#100memwe=1;memin=32'b001100_11111111111111111111111011;//branch-5memaddr=5'd5;#100memwe=1;memin=32'hFFFF_FFFF;//load data to memorymemaddr=5'd16;//start to execuit instructions.#100memwe=0;start=1;#100start=0;#10000$stop;endendmodule注意:测试的完备性。
基本模型机的设计与实现实验报告
基本模型机的设计与实现实验报告本文将围绕“基本模型机的设计与实现实验报告”进行分析和阐述。
基本模型机的设计与实现是计算机系统课程中的重点内容,是学生理解计算机系统的核心;设计和实现基本模型机需要学生掌握计算机组成原理的基本知识,能够编写汇编语言程序和理解存储器层次结构等相关概念。
一、实验目的本次计算机系统实验的目的是掌握CPU的设计与实现,以及理解汇编语言的底层执行过程。
通过本次实验,学生可以深入了解计算机系统的基本组成部分,从而提高对计算机实现原理的认识和理解。
二、实验中设计与实现模型机的步骤1、确定模型机性能要求根据实验要求,我们需要设计出一个能够运行汇编语言程序的模型机。
此时,我们需要确定模型机的性能需求,如运行速度、存储容量和输入输出设备等方面。
2、设计和实现CPU在模型机中,CPU是核心部件,所以首先需要设计和实现CPU。
CPU需要包括寄存器、算术逻辑单元、控制器和取指令等组成部分。
由于我们使用的是逻辑电路实现,所以需要进行逻辑门设计,采用Verilog语言来实现。
3、设计和实现存储器存储器是CPU所需的重要组成部分之一,我们需要为CPU设计实现一套存储器,包括RAM和ROM两部分,其中RAM用于存储数据,ROM用于存储指令。
4、设计和实现输入输出设备在模型机中,输入输出设备也是必不可少的部分。
我们需要设计并实现一套输入输出设备,用于用户输入指令和数据,以及模型机输出结果。
5、编写汇编程序在完成模型机的设计和实现后,我们需要编写汇编程序来测试模型机的功能是否正常。
我们可以编写一些简单的汇编程序来测试模型机的运行速度和结果准确性。
三、实验结果与分析经过实验,我们成功地设计并实现了一套基本模型机,并编写了一些简单的汇编程序进行测试。
模型机具有较高的运行速度和存储容量,并且可以实现输入输出设备的基本功能。
同时,我们也发现了一些问题,如指令与数据存储的冲突等,需要进一步改进。
在完成实验过程中,我们深刻理解了计算机系统的结构和运作原理,提高了对计算机系统的认识和理解能力。
Cpu与简单模型机
1.写入微程序
将下面微代码写入芯片
地址
HEX
高八位
A字段
21,19-12位
CN_I
S3-S0
uM_PC7..uM_PC0
00
6F0ED001
6F
00
0 11101101
0
0000
01
08
3B0AF009
3B
00
0 10101111
0
0000
09
09
5D0AF00A
5D
00
0 10101111
PC+1IN---RO
RO---B
R0----A
A+B----RO
RO---OUT
实验过程及
结果记录
一 准备好实验仪
二.写入微程序,机器程序
三.本机运行(出现错误)
输入数据10101000即为A8
多次检验发现错误,微指令与机器指令的首地址出现问题
实验结果
分析
思考
1在不同地址 输入微指令(信号
uM_PC7..uM_PC0
计算机组成原理实验报告
实验名称
Cpu与简单模型机
实验日期
2016.11.14
学生姓名
学号
班级
实验目的
(简述实验的目的及意义)
(1) 了解并掌握一个基础的CPU的组成原理
(2) 在前几章介绍的各单元电路的基础上,构造一个简单模型计算机
(3) 给简单模型机设计4条机器指令,并编写每条机器指令的微指令,上机调试,掌握整机概念。
;START:IN R0
;从IN单元读入数据送 R0
00000001
0000 0000
CPU-与简单模型机设计实验
评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 自评成绩: 85实验报告实验名称:CPU 与简单模型机设计实验日期:2015.11.17 班级: 2 学号:13 姓名:周小多一、实验目的:1. 掌握一个简单CPU 的组成原理。
2. 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
3. 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
二、实验内容:1.要实现一个简单的CPU,并且在此CPU 的基础上,继续构建一个简单的模型计算机。
CPU 由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图2-1-1 所示。
这个CPU 在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU 必须和主存挂接后,才有实际的意义,所以还需要在该CPU 的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。
2.本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码):助记符机器指令码说明IN 0010 0000 IN→R0ADD 0000 0000 R0 + R0→R0OUT 0011 0000 R0→OUTJMP addr 1100 0000 addr→ PCHLT 0101 0000 停机3. 设计一段机器程序,要求从IN 单元读入一个数据,存于R0,将R0 和自身相加,结果存于R0,再将R0 的值送OUT 单元显示。
根据要求可以得到如下程序,地址和内容均为二进制数。
地址内容助记符说明00000000 00100000 ; START: IN R0 从IN 单元读入数据送R000000001 00000000 ; ADD R0,R0R0 和自身相加,结果送R000000010 00110000 ; OUT R0R0 的值送OUT 单元显示00000011 11100000 ; JMP START跳转至00H 地址00000100 0000000000000101 01010000 ; HLT停机三、项目要求及分析:1. 试修改现有的指令系统,将加法指令的功能修改为R0的内容和某个存储单元的内容相加;增加存数、取数和减法三条机器指令,指令助记符分别为STA、LAD 和SUB,指令操作码分别为十六进制的60、70和80。
cpu与简单模型机设计实验报告总结
cpu与简单模型机设计实验报告总结
本实验主要是通过设计一个简单的模型机,来了解计算机的基本原理和CPU的功能。
通过实验,我们可以学到计算机CPU的基本工作原理和内部结构,并且学会了如何用电路实现CPU的基本功能。
在本次实验中,我们成功地设计出了一个具有ALU、寄存器、存储器和控制器等主要模块的简单模型机。
通过对这些模块的理解和组合,实现了模型机的功能。
在设计CPU的过程中,我们注意到了CPU的运行需要精确的时钟控制,否则就会导致指令执行出错。
同时,我们也学会了如何通过存储器、寄存器等模块交互来支持指令的执行。
另外,我们还学会了如何设计简单的计算机指令,如加、减、移位等等。
总之,通过本次实验,我们更深入地了解了计算机CPU的基本工作原理和内部结构,并且学会了如何用电路实现CPU的基本功能。
这些知识对我们今后的学习和工作都有重要的意义。
简单模型机实验报告
简单模型机实验报告篇一:模型机实验报告HUNAN UNIVERSITY课程实习报告题目:模型机学生姓名学生学号 XX0801328专业班级计算机科学与技术(3)班指导老师方恺晴完成日期思考题:1. 给定一个复合运算式子以及指令码IR[7..5]与八位BUS总线对应情况。
要求写出七条指令新的指令码并写出复合运算执行mif文件。
修改模型机电路调试程序以实现复合运算。
例:已知A=55H,B=8AH,C=F0H;IR[7..5]对应BUS8,BUS1,BUS3;写出(Aplus/B)^(/(/CplusB))的mif文件,并在模拟机上实现。
答:模拟机电路修改如下:存储器预设指令重设:计算结果:(A+/B)^(/(/C+B))=42H2. Microcomputer.vhd代码中进程ct1,ct2,ct3,ct4功能划分依据是什么?ct1:微序列控制器下址跳转。
ct2:实现各种指令,主要集中在实现从存储器或者寄存器释放数据到总线上。
ct3:完成各种指令,从总线上装载数据到相应的存储器或者寄存器中。
ct4:生成下址,判断下址生成方式,根据不太那个的方式生成下址。
3. Microcomputer.vhd代码中如何定义并初始化RAM?type ram is array(0 to 37)of std_logic_vector(7 downto 0); --38*8ramsignal ram8:ram:=(x”20”, x”1e”, x”80”, x”40”, x”20”, x”20”, x”1d”, x”c0”, x”20”, x”40”, x”21”, x”20”, x”1f”, x”80”, x”40”, x”22”, x”20”, x”1e”, x”c0”, x”22”, x”80”, x”e0”, x”21”, x”40”, x”23”, x”60”, x”23”, x”a0”, x”00”, x”55”, x”8a”, x”f0”,others=>x”00”) –initialize ram44. Microcomputer.vhd代码中bus_reg_t2 将ram8存储器中对应于ar中地址单元的数据取出来放到bus_reg_t2寄存器中。
机组实验报告三—非常简单CPU与相对简单的CPU模拟器实验
非常简单CPU与相对简单的CPU模拟器实验实验目的:本次实验主要是在非常简单和相对简答的CPU模拟器上观察程序的运行,更加形象直观的了解CPU中程序运行的各个步骤以及各个寄存器和逻辑单元在各个步骤时发挥的作用。
加深对CPU的分析和理解。
实验方法:在Java Runtime Eviroment软件平台下通过运行CPU模拟器,输入指令程序,然后运行,直接观察CPU的寄存器部分和状态图部分的运行,记录并进行分析,理解。
实验准备:在启动模拟器之前必须先行安装Java Runtime Eviroment软件,准备好VSCPU.zip、RSCPU.zip两个文件,并建目录“c:\实验”,将VSCPU.zip、RSCPU.zip 放置其中。
实验步骤与CPU的截图分析:一、非常简单的CPU模拟器:在做好前面的准备工作后,即可以开始非常简答的CPU模拟器模拟:1、先将目录c:\实验下的VSCPU.zip解压至D:\vscpu2、打开D:\vscpu\VSCPU中的index.html页面以运行“非常简单CPU模拟器”。
如下图所示的页面:3、观看该模拟器使用方法的动画:(如果了解操作步骤此步也可以省略)D:\vscpu\VSCPU\Very Simple-FLASH\VerSimpleCPUSCREEN.html。
4、输入教材P168页程序,在模拟器中观察程序的运行。
如下图所示:分析:在输入程序的时候,应注意像27H,39H这些数据前面要加上DB,并且要有空格,然后才能运行程序。
上面的六行指令是书上的指令,下面就是要运行一下,动态观察CPU的运行过程。
运行CPU模拟器的步骤如下:首先在输完代码之后要先进行编译,点击Assemble按钮你,编译成功,后分别点击1、View Register Section 按钮,即是CPU寄存器部分的运行图2、View Memory按钮,即是内存部分的运行图3、View Control Unit按钮,即是控制单元的运行图,分别从这三个图观察CPU 的运行过程。
CPU 与简单模型机设计实验
《计算机组诚愿理》实验报告实验序号:04 实验项目名称: CPU 与简单模型机设计实验(2)载入指令文件,进行验证:(3)运行指令(程序):将时序与操作台单元的开关KK1 和KK3 置到‘运行’档,实验类型选择简单模型机,CON单元中按CLR清零,检测结果是否与预测的一致。
四、实验结果与数据处理(过程分析):(1)启动IN单元,向其中输入操作数(这里值为03);(2)启动程序计数器(PC),然后自动进行加1操作,将指令地址存放到地址寄存器(AR);(3)从存储器当中读取指令,并将它存放到指令寄存器(IR)当中,然后对指令进行编译处理,形成控制信号,来控制各个部件的工作;(4)启动读操作,将IN单元当中操作数(03)读入到R0寄存器;(5)接着从PC中取出第二条指令的地址,并自动加1,并将它存放到AR当中;(6)从存储器当中取出第二条指令,并将它存放到IR当中,并进行编译;(7)将存储器R0中的03值送到A和B当中;(8)启动ALU运算器,执行加操作,并将运算结果送往R0当中;(8)同样从PC当中第三条指令(将运算结果送往OUT单元显示),取指令流程与上述类似;执行操作,将运算结果送往OUT单元进行显示;五、分析与讨论(心得)答:这是一个简单的CPU是由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成;这个实验是了解了一些指令::IN(输入)、ADD(二进制加法)、OUT(输出)、JMP (无条件转移),HLT(停机);再者,就是观察运行载入的指令文件的过程,通过数据通路图整个过程的变化即数据的流向及处理情况,尝试着去理解CPU在MC的控制下CPU的其他部件(ALU RO IR PC AR)的调用和处理的细节;通过这。
计算机组成原理课程设计模型机实验报告 精品
实践报告计算机组成原理--模型机设计报告作者姓名:专业:计算机科学与技术学号:指导教师:完成日期:年月号******学院计算机工程系摘要“计算机组成原理”是计算机科学与技术系的一门核心专业基础课程,在计算机专业中起了很重要的作用。
课程中分部分介绍了计算机的各个部件,我们有必要将它们组合起来以对计算机有一个整体的认识。
这次课程设计通过对一个简单模型机的设计与实现,是我们对计算机的基本组成、部件的设计、部件间的连接有更深的理解。
依次设计计算机的几个部件并进行连接使成为一个完整的模型机。
通过运行和调试,使之正常工作。
关键词:运算器;控制器;存储器;输入输出接口;模型机正文:一、课设目的要求:《计算机组成原理》是一门理论性、实践性均较强的专业基础课,要求学生具有一定的电路分析、指令系统编写能力、软件设计能力。
通过计算机组成原理实践周,要突出《计算机组成原理》理论联系实际的特点,培养实践动手能力。
1.培养学生运用理论知识和技能,构建建立问题逻辑结构,锻炼学生分析解决实际问题的能力。
2.培养学生使用PROTEUS软件分析和设计计算机内部器件的方法和技巧。
3.培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。
4.通过实践设计,要求学生在指导教师的指导下,独立完成设计课题的全部内容,包括:(1)通过调查研究和上机实习,掌握PROTEUS软件的设计和仿真调试技能。
(2)掌握计算机系统的组成结构及其工作原理。
(3)设计实现一个简单计算机的模型机,并能够使用PROTEUS软件进行电路仿真验证二、课设内容:利用所学的计算机结构和工作原理的知识,要求学生独立完成简单计算机的模型机设计,并用PROTEUS软件进行验证。
在分析设计过程中,要求学生养成良好的习惯,学会分析实际问题,并利用所学的知识建立系统的逻辑结构,学会PROTEUS调试技巧和方法,通过逻辑设计和工程设计培养调试硬件电路的实际动手能力。
要求学生掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法;锻炼分析问题与解决问题的能力,在出现故障的情况下,独立分析故障现象,并排除故障。
cpu实验报告
武汉大学计算机学院课程实验(设计)报告题目:CPU设计专业(班):2008级信息安全三班项目组成员:组长:许洋学号:*****组员:王滢学号:*****殷丽学号:*****刘博文学号:*****课程名称:计算机组成原理课程设计任课教师:***2010-5-17目录1引言 ............................................................... 错误!未定义书签。
实验目的 ...................................................... 错误!未定义书签。
国内外研究现状........................................... 错误!未定义书签。
实验环境 ...................................................... 错误!未定义书签。
主要成果 ...................................................... 错误!未定义书签。
2实验方法........................................................ 错误!未定义书签。
总体说明 ...................................................... 错误!未定义书签。
各部分说明 .................................................. 错误!未定义书签。
时序控制信号形成部件 ...................... 错误!未定义书签。
指令寄存器IR ...................................... 错误!未定义书签。
程序计数器PC ..................................... 错误!未定义书签。
数电实验丨模型机(CPU)综合设计报告
简易计算机系统综合设计设计报告一、设计目的完整、连贯地运用《数字逻辑》所学到的知识,熟练掌握EDA工具基本使用方法,为学习好后续《计算机原理》课程做铺垫。
二、设计内容①按照给定的数据通路、数据格式和指令系统,使用EDA工具设计一台用硬连线逻辑控制的简易计算机;②要求灵活运用各方面知识,使得所设计的计算机具有较佳的性能;③对所设计计算机的性能指标进行分析,整理出设计报告。
④设计出各个部分的分部件,包括:时序部件:指令寄存器IR,C寄存器,Z寄存器,指令计数器PC,时钟SM,通用寄存器组,IN部件,OUT部件,存储器RAM组合部件:ALU、指令译码器,控制器,位移逻辑,3-1多路复用器。
三、详细设计3.1设计的整体架构3.1.1整个模型机分为14个模块,由若干个时序部件模块、组合逻辑电路模块以及三态门、逻辑门组成。
其中时序部件模块有SM、指令寄存器IR,存储器RAM、指令计数器PC、通用寄存器G_REGISTER、IN模块、OUT模块、Zf模块、Cf模块,组合逻辑电路模块有8重3-1多路复用器、指令译码器command_decoder、控制信号模块CTL、ALU、移位逻辑。
设计的模型机原理图如下:3.1.2数据格式与指令系统3.1.2.1数据格式数据字采用8位二进制定点补码表示,其中最高位(第7位)为符号位,小数点可视为最左或最右,其数值表示范围分别为:-1≤X<+1或-128≤X<+127。
3.1.2.2寻址方式指令的高4位为操作码,低4位分别用2位表示目的寄存器和源寄存器的编号,或表示寻址方式。
共有2种寻址方式。
⑴寄存器直接寻址当R1和R2均不是“11”时,R1和R2分别表示两个操作数所在寄存器的地址(寄存器编号),其中R1为目标寄存器地址,R2为源寄存器地址。
R1或R2的值指定的寄存器00A寄存器01B寄存器10C寄存器⑵寄存器间接寻址当R1或R2中有一个为“11”时,表示相应操作数的地址在C寄存器中。
计算机组成原理简单模型机实验
实验四简单模型机实验1.1实验目的1)将微程序控制器模块通过总线同运算器模块、存储器模块联机,组成一台模型计算机;2)用微程序控制器控制模型机数据通路;3)通过CPU运行5条机器指令组成的简单程序,掌握机器指令与微指令的关系,牢固建立机器的整机概念。
1.2电路图本次实验用到前几次实验所有电路,将几个模块组成一台简单计算机,由微程序控制器控制数据通路,实现cpu从内存取出一条机器指令到执行指令结束的一个指令周期,由微指令组成的序列来完成,一条机器指令对应一个微程序。
图1 电路图1.3 实验原理(1)PC计数器初始值为“0”,微程序默认从00地址开始执行,产生控制信号,使PC的地址通过ABUS将送到存储器(6116)的地址锁存器AR中, PC=PC+1;(2)读出存储器中存放内容,通过DBUS送到IR指令寄存器中,实现指令译码,指令的操作码送至微程序控制器的程序跳转控制部分,在P(1)的控制下与微程序中储存的下一条指令地址进行逻辑运算,产生真正的下一条微程序地址;(3)在微程序的控制下单步执行微指令序列。
1.4 微指令格式表1 微指令格式1.5 微程序流程图:图2 微程序流程图1.6微程序代码表1.7 数据通路总体图图3 数据通路总体图五条机器指令格式(其中,A为内存地址8bit):RAM中装入的程序和数据(其中,地址为8进制):1.8 实验任务及步骤(1)实验连线:本次实验大部分的连线已由教师完成,请同学们对照微指令格式,完成微程序控制器的剩余部分连线。
(2)实验环境初始化:实验平台通电前请关闭DR1(74ls273),DR2(74ls273),存储器(6116)的地址锁存器(74ls273),微程序控制器的地址锁存器(74ls175)的自动清零功能,将几个芯片的-MR引脚置为“1”。
时钟发生器的功能设定为单步执行,具体信号为:STOP=0,STEP=1。
(3)加电运行初始化:①指令寄存器IR自动清零,程序计数器PC手动清零,将两片74ls163的ENT,ENP引脚置“1”,-CR引脚置“0”,打开三态门开关,给单步时钟脉冲;②程序计数器PC设定为单步技术功能,并交由微程序控制,将-CR引脚置“1”,关闭三态门开关;③关闭指令寄存器IR清零功能,交由微程序控制,将-MR设为“1”。
简单模型机实验报告
简单模型机实验报告篇一:模型机实验报告HUNAN UNIVERSITY课程实习报告题目:模型机学生姓名学生学号 XX0801328专业班级计算机科学与技术(3)班指导老师方恺晴完成日期 XX.5.28思考题:1. 给定一个复合运算式子以及指令码IR[7..5]与八位BUS总线对应情况。
要求写出七条指令新的指令码并写出复合运算执行mif文件。
修改模型机电路调试程序以实现复合运算。
例:已知A=55H,B=8AH,C=F0H;IR[7..5]对应BUS8,BUS1,BUS3;写出(Aplus/B)^(/(/CplusB))的mif文件,并在模拟机上实现。
答:模拟机电路修改如下:存储器预设指令重设:计算结果:(A+/B)^(/(/C+B))=42H2. Microcomputer.vhd代码中进程ct1,ct2,ct3,ct4功能划分依据是什么?ct1:微序列控制器下址跳转。
ct2:实现各种指令,主要集中在实现从存储器或者寄存器释放数据到总线上。
ct3:完成各种指令,从总线上装载数据到相应的存储器或者寄存器中。
ct4:生成下址,判断下址生成方式,根据不太那个的方式生成下址。
3. Microcomputer.vhd代码中如何定义并初始化RAM?type ram is array(0 to 37)of std_logic_vector(7 downto 0); --38*8ramsignal ram8:ram:=(x”20”, x”1e”, x”80”, x”40”, x”20”, x”20”, x”1d”, x”c0”, x”20”, x”40”, x”21”, x”20”, x”1f”, x”80”, x”40”, x”22”, x”20”, x”1e”, x”c0”, x”22”, x”80”, x”e0”, x”21”, x”40”, x”23”, x”60”, x”23”, x”a0”, x”00”, x”55”, x”8a”, x”f0”,others=>x”00”) –initialize ram44. Microcomputer.vhd代码中bus_reg_t2 将ram8存储器中对应于ar中地址单元的数据取出来放到bus_reg_t2寄存器中。
CPU模型机设计课程设计报告
CPU模型机设计CPU与存储器连接课程设计报告索引:1.课程设计的目的及要求 (3)2.处理器的设计思想和设计内容 (3)3.设计处理器的结构和实现方法 (3)4.模型机的指令系统 (4)5.处理器的状态跳转操作过程 (4)6. CPU的VHDL代码 (7)7. 模型机在Quartus II环境下的应用 (14)8. 仿真波形 (15)9. 课程设计的总结 (17)一.课程设计的目的及要求:1.目的:了解Quartus II软件的应用,学习Quartus II环境下设计CPU的基本过程;掌握CPU设计代码的含义以及CPU的工作原理;了解CPU与内存RAM 间的连接数据的传输过程;学习在Quartus II环境下建立模型机的具体过程。
融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。
学习设计和调试计算机的基本步骤和方法,提高使用软件仿真工具和集成电路的基本技能。
培养科学研究的独立工作能力,取得工程设计与组装调试的实践和经验。
2.要求:以《计算机组成与设计》书中123页的简化模型为基础,更改其指令系统,形成设计者的CPU,在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达到设计构想。
二.处理器的设计思想和设计内容:处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括6个五个状态。
关于CPU:操作码4位,一共设计16条指令,主要包括空操作指令、中断指令、加法指令、减法指令、三种逻辑运算指令、循环移位操作指令,数据传输指令,转移类指令,特权指令等等。
关于RAM:地址线设置成16bits,主存空间为64words。
书中原CPU的主要修改:(1)模型机CPU指令集中的逻辑左移与逻辑右移改成逻辑循环右移与逻辑循环左移。
(2)模型机CPU指令集中的or改成not。
(3)模型机CPU指令的执行流程及状态跳转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告实验名称:CPU 与简单模型机设计实验日期:2015.11班级:学号:姓名:一、实验目的:(1) 掌握一个简单CPU 的组成原理。
(2) 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
(3) 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
二、实验内容:本实验要实现一个简单的CPU,并且在此CPU 的基础上,继续构建一个简单的模型计算机。
CPU 由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图2-1-1 所示。
这个CPU 在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU 必须和主存挂接后,才有实际的意义,所以还需要在该CPU 的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。
图1-4-1 基本CPU 构成原理图除了程序计数器(PC),其余部件在前面的实验中都已用到,在此不再讨论。
系统的程序计数器(PC)由两片74LS161 和一片74LS245 构成,其原理如图1-4-2 所示。
PC_B 为三态门的输出使能端,CLR 连接至CON 单元的总清端CLR,按下CLR 按钮,将使PC 清零,LDPC 和T2 相与后作为计数器的计数时钟,当LOAD 为低时,计数时钟到来后将CPU 内总线上的数据打入PC。
图1-4-2 程序计数器(PC)原理图本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码):助记符机器指令码说明IN 0010 0000 IN→R0ADD 0000 0000 R0 + R0→R0OUT 0011 0000 R0→OUTJMP addr 1100 0000 ******** addr→ PCHLT 0101 0000 停机其中JMP 为双字节指令,其余均为单字节指令,********为addr 对应的二进制地址码。
微程序控制器实验的指令是通过手动给出的,现在要求CPU 自动从存储器读取指令并执行。
根据以上要求,设计数据通路图,如图1-4-3 所示。
本实验在前一个实验的基础上增加了三个部件,一是PC(程序计数器),另一个是AR(地址寄存器),还有就是MEM(主存)。
因而在微指令中应增加相应的控制位,其微指令格式如表1-4-1 所示。
图1-4-3 数据通路图系统涉及到的微程序流程见图1-4-4 所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1>测试。
指令译码原理见图1-3-3 所示,由于“取指”微指令是所有微程序都使用的公用微指令,因此P<1> 的测试结果出现多路分支。
本机用指令寄存器的高6 位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定微地址单元,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写,微程序流程图上的单元地址为16 进制。
当全部微程序设计完毕后,应将每条微指令代码化,表1-4-2 即为将图1-4-2 的微程序流程图按微指令格式转化而成的“二进制微代码表”。
图1-4-4 简单模型机微程序流程图表1-4-2 二进制微代码表设计一段机器程序,要求从IN 单元读入一个数据,存于R0,将R0 和自身相加,结果存于R0,再将R0 的值送OUT 单元显示。
根据要求可以得到如下程序,地址和内容均为二进制数。
地址内容助记符说明00000000 00100000 ; START: IN R0 从 IN 单元读入数据送R000000001 00000000 ; ADD R0,R0 R0 和自身相加,结果送R000000010 00110000 ; OUT R0 R0 的值送 OUT 单元显示00000011 11100000 ; JMP START 跳转至 00H 地址00000100 0000000000000101 01010000 ; HLT 停机三.实验步骤:联机写入和校验联机软件提供了微程序和机器程序下载功能,以代替手动读写微程序和机器程序,但是微程序和机器程序得以指定的格式写入到以TXT 为后缀的文件中,微程序和机器程序的格式如下:本次实验程序如下,程序中分号‘;’为注释符,分号后面的内容在下载时将被忽略掉:; //*************************************//; // //; // CPU与简单模型机实验指令文件 //; // //; //*************************************//; //***** Start Of Main Memory Data *****//$P 00 20 ; START: IN R0 从IN单元读入数据送R0$P 01 00 ; ADD R0,R0 R0和自身相加,结果送R0$P 02 30 ; OUT R0 R0的值送OUT单元显示$P 03 E0 ; JMP START 跳转至00H地址$P 04 00 ;$P 05 50 ; HLT 停机; //***** End Of Main Memory Data *****//; //** Start Of MicroController Data **//$M 00 000001 ; NOP$M 01 006D43 ; PC->AR,PC加1$M 03 107070 ; MEM->IR, P<1>$M 04 002405 ; R0->B$M 05 04B201 ; A加B->R0$M 1D 105141 ; MEM->PC$M 30 001404 ; R0->A$M 32 183001 ; IN->R0$M 33 280401 ; R0->OUT$M 35 000035 ; NOP$M 3C 006D5D ; PC->AR,PC加1; //** End Of MicroController Data **/选择联机软件的“【转储】—【装载】”功能,在打开文件对话框中选择上面所保存的文件,软件自动将机器程序和微程序写入指定单元。
选择联机软件的“【转储】—【刷新指令区】”可以读出下位机所有的机器指令和微指令,并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入6 位数据并回车,编辑框消失,并以红色显示写入的数据。
运行程序联机运行将MC 单元的编程开关置为‘运行’档,MEM 单元的编程开关也置为‘运行’档,进入软件界面,选择菜单命令“【实验】—【简单模型机】”,打开简单模型机数据通路图。
按动CON 单元的总清按钮CLR,然后通过软件运行程序,选择相应的功能命令,即可联机运行、监控、调试程序,当模型机执行完JMP 指令后,检查OUT 单元显示的数是否为IN 单元值的2 倍。
在数据通路图和微程序流中观测指令的执行过程,并观测软件中地址总线、数据总线以及微指令显示和下位机是否一致。
四、具体实现:(1)打开IN单元,输入操作数(以03为例),启动程序计数器(PC),然后自动启动加1操作,将指令地址放到地址寄存器(AR)(2)从存储器当中读取指令,并将它存到指令寄存器(IR)当中,然后对指令进行编译处理,形成控制信号,来控制各个部件的工作;(3)启动读操作,将IN单元当中的操作数(03)读到R0寄存器中(4)接着从PC中取出第二条指令的地址,并自动加1,并将它存放到AR当中;(5)从存储器中取出第一条指令,并将它存放到IR中,并进行编译(6)将存储器R0的03值送到A和B中;(7)启动ALU运算器,执行加操作,并将运算结果送往R0当中;(8)同样从PC当中第三条(将运算结果OUT单元显示),取指令流程与上述指令上述类似;五、项目要求及分析:1、试修改现有的指令系统,将加法指令的功能修改为R0的内容和某个存储单元的内容相加;增加存数、取数和减法三条机器指令,指令助记符分别为STA、LAD 和SUB,指令操作码分别为十六进制的60、70和80。
设计流程图如下:(红笔为修改的重点部分)地址十六进制高五位S3-SA字段B字段C 字段MA5-MA0000 00010000000000000000000000010100 6D430000000001101101010000110310 70700001000001110000011100000400 24050000000000100100000001010400 6D450000000001101101010001010504 B2010000010010110010000000010510 2406000100000010010000000110六、所遇问题及解决方法:这次实验含有部分的验证性实验,此部分与以往无较大差别,较为好做,易于完成。
但同时此实验还含有难度较高的设计性部分,因而做起来较为头痛辛苦。
在设计程序流程图时遇到很多困难,在编程时亦遇到汇编语言和高级语言之间的转换、汇编语言和微指令之间的转换,均因无经验产生了许多问题,通过问老师、问学姐、问同学,经由他们的指导与帮助,初步完成了设计性实验,并且进行了初步的验证,基本解决了问题。
从此次实验中不难看出,设计性实验对于目前的我还是存在较多的挑战,虽有了相应的理论知识,但是理论与实际的差距还是较为明显的,将理论知识应用于实际的问题还存在较大的障碍。
在今后的学习中,应该更加重视理论向实际的转换,并且自己多思考多动手,不能总是纸上谈兵,从而提升自己的实践动手能力,具备相应的实际应用能力。