CPU与简单模型机设计实验

合集下载

CPU与简单模型机设计实验

CPU与简单模型机设计实验

CPU与简单模型机设计实验1.实验目的和背景CPU是计算机的核心部件,负责执行各种运算和指令。

在现代计算机系统中,CPU的设计日益复杂和精密,其中包含了大量的逻辑单元、寄存器、控制器等组件。

本实验旨在通过设计一个简单的模型机,使学生们对CPU的基本原理和运作方式有一个直观的理解,并通过实际操作加深对计算机系统的理解。

2.实验内容和步骤本实验将分为以下几个步骤来完成:1)硬件设计:首先,根据CPU的基本原理和结构,设计一个简单的模型机,包括运算单元、寄存器、控制器等组件。

可以参考经典的冯·诺伊曼结构,根据实际需要添加一些功能模块。

2)指令设计:设计若干简单的指令集,包括算术运算、逻辑运算、跳转等指令。

指令集的设计应考虑到CPU的硬件结构,使其能够有效地执行这些指令。

3)程序编写:编写一些简单的程序,包括对指令集的测试、算术运算、逻辑运算等,以验证CPU的正确性和性能。

4)实验报告:总结实验中的设计过程、实现方法、遇到的问题以及解决方案,对设计的CPU进行性能评估和改进。

3.实验材料和工具1)计算机:用于进行程序编写和模拟实验,可以选择使用现有的模拟器或者在线平台。

2)模型机器材料:包括集成电路芯片、面包板、导线、电阻、电容等,用于搭建实验平台。

3)编程工具:用于程序编写和调试,可以选择使用C语言、Python 等高级语言。

4.实验预期结果和意义通过本次实验,学生们将能够深入了解CPU的基本原理和工作原理,掌握计算机系统的设计和实现方法。

同时,通过实际操作,学生们可以锻炼自己的设计能力、解决问题的能力和团队合作能力。

这对于深入理解计算机科学的理论知识、提高实践能力和培养创新思维具有重要意义。

5.实验总结通过本次实验,我对CPU的工作原理和计算机系统的设计有了更深入的理解,掌握了一定的设计和实现方法。

在实验过程中遇到了一些问题,如指令集设计不够合理、硬件连接错误等,通过团队合作和思考,最终得以解决。

实验4 简单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注意:测试的完备性。

(完整word版)CPU与简单模型机设计实验

(完整word版)CPU与简单模型机设计实验

图5-1-1 基本CPU 构成原理图除了程序计数器(PC),其余部件在前面的实验中都已用到,在此不再讨论。

系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD 芯片中 .CLR 连接至CON 单元的总清端CLR,按下CLR 按钮,将使PC 清零,LDPC 和T3 相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU 内总线上的数据打入PC。

如图5-1—2所示。

图5-1—2 程序计数器(PC)原理图本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN (输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码):其中JMP 为双字节指令,其余均为单字节指令,********为addr 对应的二进制地址码。

微程序控制器实验的指令是通过手动给出的,现在要求CPU 自动从存储器读取指令并执行。

根据以上要求,设计数据通路图,如图5—1—3 所示。

本实验在前一个实验的基础上增加了三个部件,一是PC(程序计数器),另一个是AR(地址寄存器),还有就是MEM(主存)。

因而在微指令中应增加相应的控制位,其微指令格式如表5-1—1 所示.图5—1-3 数据通路图表5—1-1 微指令格式系统涉及到的微程序流程见图5-1—4 所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1〉测试。

指令译码原理见图3—2-3 所示,由于“取指"微指令是所有微程序都使用的公用微指令,因此P<1〉的测试结果出现多路分支。

本机用指令寄存器的高6 位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定微地址单元,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写,微程序流程图上的单元地址为16 进制。

图5-1-4 简单模型机微程序流程图当全部微程序设计完毕后,应将每条微指令代码化,表5-1-2 即为将图5-1—4 的微程序流程图按微指令格式转化而成的“二进制微代码表”。

CPU与简单模型机设计实验中的关键问题分析

CPU与简单模型机设计实验中的关键问题分析

CPU与简单模型机设计实验中的关键问题分析摘要:模型机设计实验是计算机组成原理实验中的一个综合性较强的实验,要求学生在掌握各部件单元电路的基础上,构建一台模型计算机。

文章选用TD-CMA实验教学系统,针对采用微程序控制器设计的CPU与简单模型机设计实验,从连线排查、指令设计、微程序设计、指令控制、程序运行等方面分析该实验中的关键问题,并给出每个问题的解决方法。

关键词:计算机组成原理;微程序控制器;简单模型机;TD-CMA0 引言CPU与简单模型机设计实验是计算机组成原理实验中的一个综合性较强的实验,对学生的理论要求、能力要求较高。

在美国的一些主流大学中,计算机组成原理实验强调从顶层(应用和软件)到底层(硬件)的掌握与了解,实验方式一般采用高级语言实现对硬件的模拟;有些大学则要求学生采用VHDL、Verilog 等硬件描述语言进行功能部件和小型系统的设计与实现,并在FPGA等硬件上进行测试验证。

从文献[4]可以看出,国内大学计算机组成原理课程的实验已经由验证性实验逐渐过渡到处理器设计及计算机系统搭建的层次上。

与模型机设计相关的实验仍然是重点实验内容,只是实现方式和难度不同。

例如,有些学校开设的实验会引入MIPS、流水、Cache等功能设计。

根据控制器部件的工作原理,模型机控制器可分为硬布线控制器和微程序控制器两种,还可根据设计的模型机所含指令系统分为简单模型机和具有特定功能的模型机,因此模型机的设计也有不同的类型。

笔者选取微程序控制器的基本模型机设计进行分析。

TD-CMA教学实验系统是西安唐都科教仪器公司推出的新一代计算机组成原理与系统结构教学实验设备。

该系统硬件的电路布局按照计算机组成结构进行模块化设计,配有CMA’监控软件,可以实现从部件到整机实验的数据通路图实时动态图形调试界面演示,且都具有单拍、单周期、连续等调试功能,通路图的调试过程也具有保存和回放功能。

笔者采用TD-CMA实验教学系统,针对以微程序控制器为基础的简单模型机设计实验,从连线排查、指令设计、微程序设计、指令控制、程序运行等多个方面分析微程序控制器模型机实验中的关键问题,给出了每个问题的解决方法。

基本模型机的设计与实现实验报告

基本模型机的设计与实现实验报告

基本模型机的设计与实现实验报告本文将围绕“基本模型机的设计与实现实验报告”进行分析和阐述。

基本模型机的设计与实现是计算机系统课程中的重点内容,是学生理解计算机系统的核心;设计和实现基本模型机需要学生掌握计算机组成原理的基本知识,能够编写汇编语言程序和理解存储器层次结构等相关概念。

一、实验目的本次计算机系统实验的目的是掌握CPU的设计与实现,以及理解汇编语言的底层执行过程。

通过本次实验,学生可以深入了解计算机系统的基本组成部分,从而提高对计算机实现原理的认识和理解。

二、实验中设计与实现模型机的步骤1、确定模型机性能要求根据实验要求,我们需要设计出一个能够运行汇编语言程序的模型机。

此时,我们需要确定模型机的性能需求,如运行速度、存储容量和输入输出设备等方面。

2、设计和实现CPU在模型机中,CPU是核心部件,所以首先需要设计和实现CPU。

CPU需要包括寄存器、算术逻辑单元、控制器和取指令等组成部分。

由于我们使用的是逻辑电路实现,所以需要进行逻辑门设计,采用Verilog语言来实现。

3、设计和实现存储器存储器是CPU所需的重要组成部分之一,我们需要为CPU设计实现一套存储器,包括RAM和ROM两部分,其中RAM用于存储数据,ROM用于存储指令。

4、设计和实现输入输出设备在模型机中,输入输出设备也是必不可少的部分。

我们需要设计并实现一套输入输出设备,用于用户输入指令和数据,以及模型机输出结果。

5、编写汇编程序在完成模型机的设计和实现后,我们需要编写汇编程序来测试模型机的功能是否正常。

我们可以编写一些简单的汇编程序来测试模型机的运行速度和结果准确性。

三、实验结果与分析经过实验,我们成功地设计并实现了一套基本模型机,并编写了一些简单的汇编程序进行测试。

模型机具有较高的运行速度和存储容量,并且可以实现输入输出设备的基本功能。

同时,我们也发现了一些问题,如指令与数据存储的冲突等,需要进一步改进。

在完成实验过程中,我们深刻理解了计算机系统的结构和运作原理,提高了对计算机系统的认识和理解能力。

Cpu与简单模型机

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-与简单模型机设计实验

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。

简单模型机实验报告

简单模型机实验报告

简单模型机实验报告篇一:模型机实验报告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模拟器上观察程序的运行,更加形象直观的了解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 与简单模型机设计实验

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、根据设计方案,选择合适的硬件和软件工具进行开发和调试;3、搭建硬件平台,包括中央处理器、内存、输入输出设备等,并连接电源和信号线;4、编写指令系统,根据设计要求,编写一系列基本指令,包括算术运算指令、逻辑运算指令、控制指令等;5、编写程序,根据设计要求,编写一系列程序,包括数据输入程序、数据处理程序、数据输出程序等;6、调试程序,检查程序的正确性和可靠性,并对硬件进行测试和调试;7、运行程序,输入数据并观察输出结果,分析模型的正确性和可靠性。

四、实验结果与分析通过本次实验,学生可以深入了解计算机的基本组成和工作原理,掌握计算机的基本设计和操作方法。

同时,学生还可以通过分析和解决实验中出现的问题,提高对计算机系统分析、设计和应用的能力。

五、实验总结与展望本次实验通过构建简单模型计算机,帮助学生深入理解计算机的组成结构和工作原理。

在实验过程中,学生需要积极思考和探索,发现问题并解决问题。

通过本次实验,学生可以掌握计算机的基本设计和操作方法,提高对计算机系统分析、设计和应用的能力。

本次实验还可以为学生今后的学习和工作提供有益的参考和启示。

展望未来,随着计算机技术的不断发展,对于计算机系统的理解和应用将越来越重要。

本次实验所学的知识和技能将为学生今后的学习和工作奠定坚实的基础。

CPU与简单模型机设计实验

CPU与简单模型机设计实验

CPU与简单模型机设计实验一、引言CPU(Central Processing Unit,中央处理器)是计算机的重要组件之一,是计算机执行指令和进行数据处理的核心部件。

CPU的设计和优化是计算机科学的重要研究方向之一、在这个实验中,我们将通过设计一个简单的模型机来了解和学习CPU的基本原理和功能。

二、实验目的1.学习和了解CPU的基本构成和原理。

2.掌握基本的CPU设计和优化方法。

3.熟悉并加深对计算机体系结构的理解。

三、实验材料和设备1.实验平台:个人电脑或计算机模拟软件。

2. 设计工具:Verilog HDL(硬件描述语言)。

四、实验内容和步骤1.确定模型机的指令集和寄存器组。

-指令集是指计算机所能执行的所有指令的集合。

可以选择一些常用的指令来构建指令集。

-寄存器组是CPU内部用于存储和操作数据的一组寄存器。

可以选择一些通用寄存器和专用寄存器来构建寄存器组。

2.设计模型机的指令执行流程。

-指令执行流程是指CPU执行每个指令时所经过的步骤和操作。

可以使用流程图或状态转移图来描述指令执行流程。

3.设计并实现CPU的数据通路。

-数据通路是指CPU内部的数据传输路径和控制信号。

可以使用各种逻辑门和触发器来实现数据通路。

4.设计并实现模型机的控制部件。

-控制部件是CPU内部用于控制指令执行流程的部件。

可以使用有限状态机或控制存储器等方法来实现控制部件。

5.编写并调试模型机的控制程序。

-控制程序是指一段能够实现特定功能的指令序列。

可以使用汇编语言来编写和调试控制程序。

6.运行和测试设计的模型机。

-在模型机上执行一些简单的指令,观察和分析其执行结果,进行性能测试和优化。

五、实验结果与分析通过完成以上实验内容,我们将得到一个简单的模型机,并能够执行一些简单的指令。

我们可以通过观察和分析指令的执行结果,了解和学习CPU的基本原理和功能。

此外,我们还可以根据实际情况对模型机进行性能测试和优化,以提升其执行效率和性能。

数电实验丨模型机(CPU)综合设计报告

数电实验丨模型机(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)通过实验分析简单模型机结构,了解计算机的工作原理。

2)掌握计算机微程序控制器的控制方法,掌握计算机指令执行过程二、实验原理基本整机模型数据框图如图所示,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

数据的通路从程序计数器PC的地址送到主存的地址寄存器,根据地址寄存器的内容找到相应的存储单元。

存储器中的数据是指令时,那么数据是从RAM送到总线,再从总线送到IR 中。

存储器中的数据是需要加工的数据时,那么数据是从RAM送到总线,再动总线送到通用寄存器中等待加工。

数据加工过程中,两个数据是从总线上将数据分别分时压入两个暂存器中,等待运算部件的加工,在数据加工完成以后。

运算结果是通过三太门送到总线上。

三态门的控制时由微控制器来控制。

图:模型机的数据通路图三、实验过程1.连线按实验逻辑原理图连接以下控制信号。

1)时钟单元(CLOCK UNIT)的T1-T4接到微程序控制单元(MAIN CONTROL UNIT)的T1-T4.2)手动控制开关单元(MANUAL UNIT)的KA ,KB接到指令单元(INS UNIT)的KA,KB。

3)指令单元(INS UNIT)的J(1)-J(5)、SE6-SE0、B-IR 接到的微程序控制单元(MAIN CONTROL UNIT)的J(1)-J(5)、SE6-SE0、B-IR。

4)输入/输出单元(INPUT/OUTPUT UNIT)IO-W,IO-R接到微程序控制单元(MAINCONTROL UNIT)的IO-W,IO-R,Ai接到地址单元(ADDRESS UNIT)的A0. 5)主存储器单元(MEM UNIT)M-W、M-R接到微程序控制单元(MAIN CONTROL UNIT)的M-W、M-R,A7-A0 接到地址单元(ADDRESS UNIT)的A7-A0.6)地址单元(ADDRESS UNIT)的B-AR、B-PC、PC+1、PC-B接到微程序控制单元(MAIN CONTROLUNIT)的B-AR、B-PC、PC+1、PC-B.7)通用寄存器单元(REG UNIT)的B-R、R0-B 接到微程序控制单元(MAIN CONTROLUNIT)的B-DR、DR-B。

CPU与简单模型机设计实验

CPU与简单模型机设计实验

CPU与简单模型机设计实验CPU(中央处理器)是计算机中的核心部件,负责执行指令和处理数据。

而简单模型机设计实验是指通过设计和实现一个简单的模型机,来体验计算机工作原理和计算机体系结构。

在这样一个实验中,我们可以从以下几个方面来详细讨论CPU与简单模型机设计实验。

1.CPU的基本组成CPU是由控制单元(CU)和算术逻辑单元(ALU)两个主要部分组成。

控制单元负责解析指令、获取数据和控制数据的流动,而算术逻辑单元则负责执行算术和逻辑运算。

在简单模型机设计实验中,我们需要设计和实现这两个组件,同时还需要考虑其他辅助组件,如寄存器和存储器等。

这些组件的设计和实现将直接影响CPU的性能和功能。

2.指令集架构设计CPU的指令集架构是指CPU所支持的指令集合和指令的格式。

指令集架构的设计需要考虑到计算机的功能需求、指令的执行效率以及编程的便利性等因素。

在简单模型机设计实验中,我们可以定义一些基本的指令,如加载数据、执行运算、存储数据等。

指令的编码格式可以采用二进制或者其他适合的方式。

通过设计和实现这些指令,我们可以模拟CPU对指令的解析和执行。

3.流水线设计流水线是指将CPU的指令和数据处理过程划分成若干个阶段,并同时在不同阶段处理多条指令。

流水线设计可以提高CPU的性能和效率。

在简单模型机设计实验中,我们可以考虑将指令执行过程划分为取指、解码、执行、访存和写回等阶段,并同时处理多条指令。

通过设计和实现这样的流水线,可以提高CPU的吞吐量和并行处理能力。

4.性能评估和优化在CPU和简单模型机设计实验中,我们可以进行性能评估和优化。

性能评估可以通过测量CPU的时钟周期、执行指令的速度和吞吐量等指标来进行。

而优化则可以通过改进指令设计、优化算法和增加硬件资源等方式来完成。

在简单模型机设计实验中,我们可以通过调整指令的执行顺序、使用更高效的算法和增加硬件资源来优化设计。

这些优化将直接影响CPU的性能和效率。

简单模型机实验报告

简单模型机实验报告

简单模型机实验报告篇一:模型机实验报告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寄存器中。

计算机组成原理简单模型机实验

计算机组成原理简单模型机实验

计算机组成原理简单模型机实验计算机组成原理是计算机工程专业一个非常重要的课程,它涉及到计算机硬件的各个方面。

其中,模型机实验是计算机组成原理中的一个非常重要的环节,旨在让学生在实践中深入理解计算机各个部件之间的工作原理。

模型机实验一般采用简单的电路元件模拟计算机的各种功能,例如通过用IC门电路模拟ALU、寄存器、时钟等计算机组成部件,来实现一些实际的计算机操作。

通过实验,学生可以更加深入地掌握计算机组成原理中的各个知识点,理解计算机的底层工作原理。

模型机实验一般分为两个阶段。

第一个阶段是构建模型机,学生需要根据实验指导书上的设计图纸,自己组装一个包含CPU、RAM、ROM 等各种计算机组成部件的模型机。

第二个阶段是操作模型机来完成各种计算机操作,例如实现加法、减法、乘法等运算,实现简单的数据存储和读取等。

在模型机实验中,学生需要深入理解电路原理,熟练掌握计算机组成原理中的各个知识点,例如数据传输、ALU运算、寄存器管理等。

同时,学生还需要具备一定的动手能力和实验技巧,例如熟练使用焊接工具和电路测试仪器,能够快速准确地找出电路中的故障点。

通过模型机实验,不仅可以加深学生对计算机组成原理的理解,同时还能提高学生的动手能力和实验技巧,培养学生的创新精神和独
立思考能力。

因此,模型机实验是计算机组成原理课程中一个非常重要的环节,是学生提高自身能力和素质的重要途径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验项目CPU与简单模型机设计实验实验时间2015年11月7日实验目的(1) 掌握一个简单CPU 的组成原理。

(2) 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。

(3) 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。

实验设备PC机一台,TD-CMA实验系统一套实验原理本实验要实现一个简单的CPU,并且在此CPU 的基础上,继续构建一个简单的模型计算机。

CPU 由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图5-1-1 所示。

这个CPU 在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU 必须和主存挂接后,才有实际的意义,所以还需要在该CPU 的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。

图5-1-1 基本CPU 构成原理图除了程序计数器(PC),其余部件在前面的实验中都已用到,在此不再讨论。

系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD 芯片中。

CLR 连接至CON 单元的总清端CLR,按下CLR 按钮,将使PC 清零,LDPC 和T3 相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU 内总线上的数据打入PC。

如图5-1-2所示。

图5-1-2 程序计数器(PC)原理图本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码):其中JMP 为双字节指令,其余均为单字节指令,********为addr 对应的二进制地址码。

微程序控制器实验的指令是通过手动给出的,现在要求CPU 自动从存储器读取指令并执行。

根据以上要求,设计数据通路图,如图5-1-3 所示。

本实验在前一个实验的基础上增加了三个部件,一是PC(程序计数器),另一个是AR(地址寄存器),还有就是MEM(主存)。

因而在微指令中应增加相应的控制位,其微指令格式如表5-1-1 所示。

图5-1-3 数据通路图表5-1-1 微指令格式系统涉及到的微程序流程见图5-1-4 所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1>测试。

指令译码原理见图3-2-3 所示,由于“取指”微指令是所有微程序都使用的公用微指令,因此P<1> 的测试结果出现多路分支。

本机用指令寄存器的高6 位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定微地址单元,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写,微程序流程图上的单元地址为16 进制。

图5-1-4 简单模型机微程序流程图当全部微程序设计完毕后,应将每条微指令代码化,表5-1-2 即为将图5-1-4 的微程序流程图按微指令格式转化而成的“二进制微代码表”。

表5-1-2 二进制微代码表设计一段机器程序,要求从IN 单元读入一个数据,存于R0,将R0 和自身相加,结果存于R0,再将R0 的值送OUT 单元显示。

根据要求可以得到如下程序,地址和内容均为二进制数。

实验步骤1. 按图5-1-5 连接实验线路。

2. 写入实验程序,并进行校验,分两种方式,手动写入和联机写入。

1) 手动写入和校验(1) 手动写入微程序①将时序与操作台单元的开关KK1 置为‘停止’档,KK3 置为‘编程’档,KK4 置为‘控存’档,KK5 置为‘置数’档。

②使用CON 单元的SD05——SD00 给出微地址,IN 单元给出低8 位应写入的数据,连续两次按动时序与操作台的开关ST,将IN 单元的数据写到该单元的低8 位。

③将时序与操作台单元的开关KK5 置为‘加1’档。

④IN 单元给出中8 位应写入的数据,连续两次按动时序与操作台的开关ST,将IN 单元的数据写到该单元的中8 位。

IN 单元给出高8 位应写入的数据,连续两次按动时序与操作台的开关ST,将IN 单元的数据写到该单元的高8 位。

⑤重复①、②、③、④四步,将表5-1-2 的微代码写入2816 芯片中。

(2) 手动校验微程序①将时序与操作台单元的开关KK1 置为‘停止’档,KK3 置为‘校验’档,KK4 置为‘控存’档,KK5 置为‘置数’档。

②使用CON 单元的SD05——SD00 给出微地址,连续两次按动时序与操作台的开关ST,MC 单元的指数据指示灯M7——M0 显示该单元的低8 位。

③将时序与操作台单元的开关KK5 置为‘加1’档。

④连续两次按动时序与操作台的开关ST,MC 单元的指数据指示灯M15——M8 显示该单元的中8 位,MC 单元的指数据指示灯M23——M16 显示该单元的高8 位。

⑤重复①、②、③、④四步,完成对微代码的校验。

如果校验出微代码写入错误,重新写入、校验,直至确认微指令的输入无误为止。

(3) 手动写入机器程序①将时序与操作台单元的开关KK1 置为‘停止’档,KK3 置为‘编程’档,KK4 置为‘主存’档,KK5 置为‘置数’档。

②使用CON 单元的SD07——SD00 给出地址,IN 单元给出该单元应写入的数据,连续两次按动时序与操作台的开关ST,将IN 单元的数据写到该存储器单元。

③将时序与操作台单元的开关KK5 置为‘加1’档。

④IN 单元给出下一地址(地址自动加1)应写入的数据,连续两次按动时序与操作台的开关ST,将IN 单元的数据写到该单元中。

然后地址会又自加1,只需在IN 单元输入后续地址的数据,连续两次按动时序与操作台的开关ST,即可完成对该单元的写入。

⑤亦可重复①、②两步,将所有机器指令写入主存芯片中。

(4) 手动校验机器程序①将时序与操作台单元的开关KK1 置为‘停止’档,KK3 置为‘校验’档,KK4 置为‘主存’档,KK5 置为‘置数’档。

②使用CON 单元的SD07——SD00 给出地址,连续两次按动时序与操作台的开关ST,CPU内总线的指数据指示灯D7——D0 显示该单元的数据。

③将时序与操作台单元的开关KK5 置为‘加1’档。

④连续两次按动时序与操作台的开关ST,地址自动加1,CPU 内总线的指数据指示灯D7 ——D0 显示该单元的数据。

此后每两次按动时序与操作台的开关ST,地址自动加1,CPU 内总线的指数据指示灯D7——D0 显示该单元的数据,继续进行该操作,直至完成校验,如发现错误,则返回写入,然后校验,直至确认输入的所有指令准确无误。

⑤亦可重复①、②两步,完成对指令码的校验。

如果校验出指令码写入错误,重新写入、校验,直至确认指令码的输入无误为止。

2) 联机写入和校验联机软件提供了微程序和机器程序下载功能,以代替手动读写微程序和机器程序,但是微程序和机器程序得以指定的格式写入到以TXT 为后缀的文件中,微程序和机器程序的格式如下:本次实验程序如下,程序中分号‘;’为注释符,分号后面的内容在下载时将被忽略掉:选择联机软件的“【转储】—【装载】”功能,在打开文件对话框中选择上面所保存的文件,软件自动将机器程序和微程序写入指定单元。

选择联机软件的“【转储】—【刷新指令区】”可以读出下位机所有的机器指令和微指令,并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入6 位数据并回车,编辑框消失,并以红色显示写入的数据。

3. 运行程序方法一:本机运行将时序与操作台单元的开关KK1、KK3 置为‘运行’档,按动CON 单元的总清按钮CLR,将使程序计数器PC、地址寄存器AR 和微程序地址为00H,程序可以从头开始运行,暂存器A、B,指令寄存器IR 和OUT 单元也会被清零。

将时序与操作台单元的开关KK2 置为‘单步’档,每按动一次ST 按钮,即可单步运行一条微指令,对照微程序流程图,观察微地址显示灯是否和流程一致。

每运行完一条微指令,观测一次CPU 内总线和地址总线,对照数据通路图,分析总线上的数据是否正确。

当模型机执行完JMP 指令后,检查OUT 单元显示的数是否为IN 单元值的2 倍,按下CON单元的总清按钮CLR,改变IN 单元的值,再次执行机器程序,从OUT 单元显示的数判别程序执行是否正确。

方法二:联机运行将时序与操作台单元的开关KK1 和KK3 置为‘运行’档,进入软件界面,选择菜单命令“【实验】—【简单模型机】”,打开简单模型机数据通路图。

按动CON 单元的总清按钮CLR,然后通过软件运行程序,选择相应的功能命令,即可联机运行、监控、调试程序,当模型机执行完JMP 指令后,检查OUT 单元显示的数是否为IN 单元值的2 倍。

在数据通路图和微程序流中观测指令的执行过程,并观测软件中地址总线、数据总线以及微指令显示和下位机是否一致。

图5-1-5 实验接线图实验结果输入数据助记符机器指令代码结果备注00010001 IN 00100000 R0=11 从IN单元读入数据到R0中ADD 00000000 R0=22 R0和自身相加结果送到R0中OUT 00110000 OUT=22 把R0的数据传送到OUT单元显示JMP 11100000 跳转到00H地址HLT 01010000 停机操作实验结果如图所示:结果分析在IN单元中输入数据00010001,使用CON 单元的SD27——SD20 给出指令IN、ADD、OUT、TMP、HLT的数据00100000、00000000、00110000、11100000、01010000,连续按动时序与操作台的开关ST,观察电脑中的数据通路图记录数据。

(1)当CON单元输入指令代码00100000时,数据通路图中IN中的数据传送到R0中,R0中显示R0=11,实现了从IN单元读入数据传送到R0中过程。

(2)当CON单元输入指令代码00000000时,数据通路图中A=11、B=11通过ALU运算器实现自加后把结果传送给R0,R0中显示R0=22,实现了R0和自身相加结果送到R0中的过程。

相关文档
最新文档