计组课设-微指令的设计实验
计算机组成原理课程设计 微指令

计算机组成原理课程设计微指令微指令是计算机中的一种重要组成部分,是指对硬件操作的控制命令序列。
简单来说,微指令是对硬件进行操作的一种指示信号,它由控制单元内部产生,并由控制总线传送到各个部件执行。
微指令在计算机中的作用非常重要,可控制计算机的运行状态,包括指令的执行步骤、数据的处理流程、状态的转移等。
因此,微指令的设计质量对计算机的性能和各项指标都有很大影响。
微指令的设计需要考虑五个方面:
第一、控制流程设计。
微指令要能够正确地控制计算机执行指定的操作流程,并具有良好的延迟和时序特性。
第二、功能和格式设计。
微指令的功能必须与指令集相匹配,同时规定微指令的格式,以较低的硬件成本实现指令的执行。
第三、指令编码设计。
微指令的编码应该尽可能地高效,以减少控制总线的传输时间和控制逻辑的延迟,并且要保证指令的唯一性。
第四、性能和可扩展性设计。
微指令的设计需要尽量提高计算机的性能,从而在实现计算功能的同时,具备灵活可扩展的特性,使计算机系统可以随着技术进步不断地更新升级。
第五、微指令的测试和验证设计。
微指令的设计完成后,需要进行测试和验证,以保证其正确性和稳定性。
总之,微指令的设计是计算机系统中不可或缺的一部分,对计算机性能和稳定性具有极大的影响。
因此,在进行微指令的设计时,需要充分考虑各个方面的需求,并进行合理的设计,以保证计算机系统的稳定运行。
计算机组成原理微指令实验报告

计算机组成原理实验报告时间:2012.11.26 地点:实验大楼4楼北成绩:班级:xxxxxx 学号:xxxxxx 姓名:xx班级:xxxxxx 学号:xxxxxxx 姓名:xx题目:微程序控制器实验一、实验目的:1.掌握微程序控制器的组成原理;2.掌握微程序的编制、写入,观察微程序的运行过程。
二、实验内容及要求:3.熟悉微指令的编写方式,编码格式,了解机器指令与微指令之间的关联。
4.设计微指令,以实现从存储器中读出8位二进制数并进行加法计算的功能。
三、实验步骤、观察与思考:实验步骤:1.连线,将实验电路板上的所需单元用排线连接起来,以实现数据通路。
2.对微控制器的读写操作(1)手动读写:(默认为已实现线路连接)进行手动读或写,都需要手动给出地址,系统专门安排了一个ADDR单元,作为地址输入。
ADDR单元实为一个加减计数器。
当开关为“加1”挡时,在T2的下沿计数器进行加1计数;当开关为“减1”挡时,在T2的下沿计数器进行减1计数;当开关置为“置数”挡时,计数器置初值,其作用相当于直通,SA7…SA0的输出值就是二进制开关组的值。
在实验中选择什么挡位,取决于写入数据的地址是否连续,如果是连续地址,选择“加1”或是“减1”挡会方便一些。
如果是离散地址,选择“置数”挡会方便一些。
1)手动对微控制器进行编程(写)。
a.修改连线,以方便实现手动控制(完成读写操作后恢复);b.将MC单元编程开关置为“编程”挡,时序单元状态开关置为“单步”挡,ADDR单元状态开关置为“置数”挡。
c.使用ADDR单元的低六位SA5…SA0给出微地址MA5…MA0,微地址可以通过MC单元的MA5…MA0微地址灯显示。
d.CON单元SD27…SD20,SD17…SD10,SD07…SD00开关上置24位微代码,待写入值由MC单元的M23…M0 24位LED灯显示。
e.启动时序电路(按动一次TS按钮),即将微代码写入到EEPROM2816的相应地址对应的单元中。
《计算机组成原理》微程序设计实验报告

《计算机组成原理》实验报告学院:计算机学院专业:交通工程班级学号:AP0804114学生姓名:黄佳佳实验日期:2010.12.14指导老师:李鹤喜成绩评定:五邑大学信息学院计算机组成原理实验室实验五微程序设计实验一、实验目的:深入掌握微程序控制器的工作原理,学会设计简单的微程序。
二、预习要求:1.复习微程序控制器工作原理;2.复习计算机微程序的有关知识。
三、实验设备:EL-JY-II型计算机组成原理实验系统一台,连接线若干。
四、微程序的设计:1.微指令格式设计微指令编码格式的主要原则是使微指令字短、能表示可并行操作的微命令多、微程序编写方便。
微指令的最基本成份是控制场,其次是下地址场。
控制场反映了可以同时执行的微操作,下地址场指明下一条要执行的微指令在控存的地址。
微指令的编码格式通常指控制场的编码格式,以下几种编码格式较普遍。
1)最短编码格式这是最简单的垂直编码格式,其特点是每条微指令只定义一个微操作命令。
采用此格式的微指令字短、容易编写、规整直观,但微程序长度长,访问控存取微指令次数增多从而使指令执行速度慢。
2)全水平编码格式这种格式又称直接编码法,其特点是控制场每一位直接表示一种微操作命令。
若控制场长n位,则至多可表示n个不同的微操作命令。
采用此格式的微指令字长,但可实现多个允许的微操作并行执行,微程序长度短,指令执行速度快。
3)分段编码格式是将控制场分成几段。
若某段长i位,则经译码,该段可表示2i个互斥的即不能同时有效的微操作命令。
采用这种格式的微指令长度较短,而可表示的微操作命令较多,但需译码器。
2.微程序顺序控制方式的设计微程序顺序控制方式指在一条指令对应的微程序执行过程中,下一条微指令地址的确定方法,又叫后继地址生成方式。
下面是常见的两种。
1)计数增量方式这种方式的特点是微程序控制部件中的微地址中的微地址产生线路主要是微地址计数器MPC。
MPC 的初值由微程序首址形成线路根据指令操作码编码形成。
计组课设-微指令的设计实验

计算机组成原理课程设计报告班级:计算机/物联网 ________ 班姓名:_______ 学号:___________完成时间:2016.1.14 _____________________一、课程设计目的1 •在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2 •通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3 •培养综合实践及独立分析、解决问题的能力。
二、课程设计的任务针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000 的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、课程设计使用的设备(环境)1 .硬件COP2000实验仪PC机2 .软件COP2000仿真软件四、课程设计的具体内容(步骤)1•详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现该模型机指令系统的特点:从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADD A, R?和ADD A, @R?都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。
因此,指令系统的指令格式是定长操作码的,操作码为6位。
1)双字长的指令格式如下:举例2)单字长的指令格式如下:举例:助记符 机器码1机器码2ADD A, R? 000100xxORA, R? 011000xxMOV R?, A100000xx该模型机微指令系统的特点(包括其微指令格式的说明等) :该模型机微指令系统的微指令格式是水平型微指令, 微指令的字长为24位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。
计算机组成原理微程序控制单元实验

计算机组成原理微程序控制单元实验## 微程序控制单元实验### 简介微程序控制单元(Microprogram Control Unit)是计算机组成原理中的一个重要概念。
它是一种基于微指令的控制方式,有效地解决了指令复杂度高、设计难度大的问题。
本篇文档将介绍微程序控制单元的实验原理和方法。
### 实验目的通过本次实验,我们将能够深入了解微程序控制单元的工作原理,理解微程序控制单元在计算机系统中的重要性,并通过实践掌握微程序的设计与编写。
### 实验内容1. 将微指令存储器的内容读入到微程序存储器中;2. 设计微指令的控制信号;3. 实现微程序控制单元的功能;4. 编写测试程序,验证微程序控制单元的正确性。
### 实验步骤#### 第一步:读取微指令存储器内容将微指令存储器中已经设计好的微指令读入到微程序存储器中。
这一步骤可以使用硬件开关、编程方式或者仿真软件进行。
#### 第二步:设计微指令的控制信号根据实验需求,设计微指令的控制信号。
微指令的控制信号包括指令码、操作码、地址码等等,根据具体的实验需求而定。
#### 第三步:实现微程序控制单元的功能将设计好的微指令的控制信号与微程序控制单元进行连接。
确保微程序控制单元能够正确地根据微指令的控制信号来执行相应的操作。
#### 第四步:编写测试程序编写测试程序,验证微程序控制单元的正确性。
测试程序需要覆盖到微程序控制单元的各个功能模块,包含不同类型的指令和操作,以确保微程序控制单元的完整性和鲁棒性。
#### 第五步:测试与调试将编写好的测试程序加载到微程序控制单元中,进行测试和调试。
通过观察微程序控制单元的输出结果,排查可能存在的问题并进行修正,以保证其正确性和稳定性。
### 实验总结通过本次实验,我们深入了解了微程序控制单元的工作原理,并通过实践掌握了微程序的设计与编写。
微程序控制单元的应用可以提高计算机系统的灵活性和可扩展性,同时也降低了整个系统的复杂度和设计难度。
指令、微指令设计

实验设计指令/微指令系统一、实验目的CP226计算机组成原理实验仪,可以由用户自己设计指令/微指令系统。
自己可以在现有的指令系统上进行扩充,加上一些较常用的指令,也可重新设计一套完全不同的指令/微指令系统。
1.在设计指令的过程中理解和掌握各个单元、总线信号的功能,以及与数据的流向的关系。
2.根据掌握情况设计每条指令,明确每条指令需要几个机器周期,每个机器周期需要完成的任务,对相容性的微操作采用并行执行的方式以使指令简化,提高执行效率。
二、实验仪器CP226计算机组成原理实验仪、CP226计算机组成原理软件三、实验内容2.创建新指令系统文件名为:new.dat打开CP226 组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的指令系统文件insfile1.dat,参考原来文格式,输入如下文件后,清除原来的指令系统,选择[文件]\另存为new.dat。
助记符号指令码字节数MOV R0,#* 04 2MOV R1,#* 05 2MOV R2,#* 06 2MOV R3,#* 07 2STO R0,* 08 2STO R1,* 09 2STO R2,* 0A 2STO R3,* 0B 2ADDC R0,#* 0C 2ADDC R1,#* 0D 2ADDC R2,#* 0E 2ADDC R3,#* 0F 2注:助记符中,#表示立即数,*表示十六进制数,@表示间址寻址04-0F表示相应指令的入口地址,最后一列为该指令所占的字节数。
3. 创建新微指令系统文件名为:new.mic打开CP226 组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的微指令系统文件insfile1.mic,参考原来文件格式,待下面微程序代码确定后相应输入下表,然后清除原来的微指令系统,选择[文件]\另存为new.mic._FATCH_ T0 00 CBFFFF 指令寄存器IR PC输出 A输出写入 +101 FFFFFF A输出 +102 FFFFFF A输出 +103 FFFFFF A输出 +1MOV R?, #II T1 04 C7FBFF 存贮器值EM 寄存器R? PC输出 A输出 +1 +1T0 05 CBFFFF 指令寄存器IR PC输出 A输出写入 +106 FFFFFF A输出 +107 FFFFFF A输出 +1STO R?, MM T2 08 C77FFF 存贮器值EM 地址寄存器MAR PC输出 A输出 +1 +1T1 09 D7BBFF 存贮器值EM 寄存器R? MAR输出 A输出 +1T0 0A CBFFFF 指令寄存器IR PC输出 A输出写入 +10B FFFFFF A输出 +1ADDC R?, #IIT3 0C C7FFEF 存贮器值EM 寄存器W PC输出 A输出 +1 +1T2 0D FFF7F7 寄存器R? 寄存器A A输出 +1T1 0E FFFA9C ALU直通寄存器R? 标志位C,Z 加运算 +1T0 0F CBFFFF 指令寄存器IR PC输出 A输出写入 +1下面根据指令的功能来设计相应的微程序。
计算机组成原理微程序控制单元实验
计算机组成原理微程序控制单元实验
微程序控制单元是计算机组成原理中的一个重要组成部分,其工作原理是将指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。
以下是一个微程序控制单元的实验流程:
1. 提取指令:从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。
提取指令之后,程序计数器根据指令长度增加存储器单元。
2. 解码:根据 CPU 的指令集架构 (ISA) 定义将数值解译为指令。
解码阶段将指令分解成一系列的微操作。
3. 控制命令发出:根据指令中的微操作,发出各种控制命令,例如读写控制、存储器选择、微操作执行等。
这些控制命令用于执行微操作系列。
4. 执行微操作:根据控制命令,执行微操作系列。
微操作通常是一些小规模的运算,例如存储器读写、算术运算等。
这些微操作被分解成一系列的微操作,然后由微程序控制单元执行。
5. 写回结果:完成微操作系列后,将结果写回到存储器或高速缓冲存储器中。
6. 跳转:如果需要,可以通过跳转指令来跳转到其他指令执行。
7. 重复:如果指令需要多次执行,可以通过重复指令来实现。
通过以上步骤,微程序控制单元可以实现对计算机指令的控制,从而实现计算机的功能。
值得注意的是,微程序控制单元是计算机组
成原理中的一个抽象概念,实际上并不存在具体的硬件实现。
微程序控制器组与微程序设计实验报告
微程序控制器组与微程序设计实验报告实验目的:1.了解微程序控制器组的组成和工作原理;2.掌握微程序设计的基本方法;3.学习使用微程序设计语言进行微程序编写;4.验证微程序的功能和正确性。
实验仪器:1.微程序控制器组;2.计算机。
实验原理:实验步骤:1.设计微指令集:根据实验要求,设计微指令的功能,并确定每个微指令的格式和编码方式。
2.设计微程序地址译码器:根据微指令的编码方式,设计地址译码器,将微指令的编码转化为实际的地址。
3.设计微程序存储器:根据微指令的格式和编码方式,设计存储器,存储微指令。
可以选择使用只读存储器或者随机存储器。
4.设计微指令执行器:根据微指令的格式和编码方式,设计执行器,执行微指令的功能操作。
可以使用组合逻辑电路或者微控制器实现。
5.进行微程序编写:使用微程序设计语言,根据微指令集的功能要求,编写微程序,并存储到微程序存储器中。
6.连接实验仪器:将微程序控制器组和计算机连接起来,确保数据传输的正确性。
7.运行实验程序:根据实验要求,执行微程序,并通过计算机输出结果。
实验结果:经过实验,微程序控制器组成功控制了计算机的各个部件的操作和数据流。
微程序设计也能够正确的控制计算机的运行,并输出了预期的结果。
实验总结:通过本次实验,我对微程序控制器组的组成和工作原理有了更深入的了解。
微程序设计是一种灵活、可扩展的指令级程序设计方法,可以根据需求设计出各种功能强大的微程序。
通过实验,我学会了使用微程序设计语言进行微程序编写,并验证了微程序的功能和正确性。
微程序控制器组的应用范围广泛,不仅可以用于计算机中,还可以应用于其他各种控制系统中。
本次实验让我对计算机控制系统的理论和实践有了更深入的了解,提高了我在计算机控制领域的专业技能。
计组-微程序控制器设计报告
实验10 微程序控制器设计实验报告姓名:X XX 学号:X XX 专业:计算机科学与技术课程名称:计算机组成同组学生姓名:无实验时间:实验地点:指导老师:XXX一、实验目的和要求1.掌握微程序控制原理2.掌握微程序控制器的设计方法二、实验内容和原理实验内容:1.设计一个微程序控制单元并进行仿真实验原理:1.微程序的原理:●在多时钟CPU设计的实验中,所有的控制信号均根据操作码以及所处的时钟周期,由组合逻辑的方式产生各个状态下的控制信号。
●微程序是将CPU每条指令和所有时钟的控制信号,预先以二进制形式写在控制存储器中。
●多时钟周期的每个状态都对应一组控制信号。
●每条指令都有若干个状态对应若干组控制信号。
●微指令按一定顺序存放在控制存储器中。
2.工作原理图3.微程序控制逻辑图4.微指令及其控制码5.控制存储器内容三、主要仪器设备1.Spartan-III开发板1套2.装有ISE的PC机1台四、操作方法与实验步骤实验步骤:1.创建新的工程和新的源文件2.编写verilog代码(包括以下模块top,MicroCtrl,pbdebounce,time_1ms)3.对程序进行波形仿真4.编写UCF引脚文件,通过编译。
5.. 生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能实验代码:Top.vmodule top(input system_clk,input clk_i,input rst_i,output [3:0] anode4,output [7:0] segment4,output reg [7:0] led);wire clk;wire rst;reg [2:0] pc;reg [5:0] opcode;wire [17:0] rom_out;pbdebounce p0(system_clk, clk_i, clk);pbdebounce p1(system_clk, rst_i, rst);initial beginpc=0;endalways @ (posedge clk or posedge rst) beginif (rst==1)pc=0;else if (rom_out[1:0]==0)pc=pc+1;endalways @ * begincase (pc)0: opcode = 6'b000000; //R-type1: opcode = 6'b100011; //LW2: opcode = 6'b101011; //SW3: opcode = 6'b000100; //BEQ4: opcode = 6'b000010; //Jdefault: opcode = 6'b000000;endcaseendMicroCtrl MicroCtrl(clk, rst, opcode, rom_out);display display(system_clk, rom_out[17:2], anode4, segment4); always @ * beginled[1:0] = rom_out[1:0];led[2]=0;case (pc)0: led[7:3] = 5'b10000; //R-type1: led[7:3] = 5'b01000; //LW2: led[7:3] = 5'b00100; //SW3: led[7:3] = 5'b00010; //BEQ4: led[7:3] = 5'b00001; //Jdefault: led[7:3] = 5'b11111;endcaseendendmodulempc=0;endalways @ * begincase (mpc)0: rom_out={16'h0851,2'b11};1: rom_out={16'h1800,2'b01};2: rom_out={16'h3000,2'b10};3: rom_out={16'h00C0,2'b11};4: rom_out={16'h0300,2'b00};5: rom_out={16'h00A0,2'b00};6: rom_out={16'hA000,2'b11};7: rom_out={16'h0500,2'b00};8: rom_out={16'h6006,2'b00};9: rom_out={16'h0009,2'b00};default: rom_out=0;endcaseendalways @ (posedge clk or posedge rst) begin if (rst==1)mpc=0;else begincase (rom_out[1:0])0: mpc=0;3: mpc=mpc+1;1: case (opcode)6'b000000: mpc=6; //R-type6'b100011: mpc=2; //LW6'b101011: mpc=2; //SW6'b000100: mpc=8; //BEQ6'b000010: mpc=9; //Jdefault: mpc=0;endcase2: case (opcode)6'b100011: mpc=3; //LW6'b101011: mpc=5; //SWdefault: mpc=0;endcaseendcaseendendendmoduleDisplay.vmodule display(input wire clk,input wire [15:0] digit,//显示的数据output reg [ 3:0] node, //4个数码管的位选output reg [ 7:0] segment);//七段+小数点reg [3:0] code = 4'b0;reg [15:0] count = 15'b0;always @(posedge clk) begincase (count[15:14])//与(count[1:0])的不同?起到分频的作用2'b00 : beginnode <= 4'b1110;code <= digit[3:0];end2'b01 : beginnode <= 4'b1101;code <= digit[7:4];end2'b10 : beginnode <= 4'b1011;code <= digit[11:8];end2'b11 : beginnode <= 4'b0111;code <= digit[15:12];endendcasecase (code)4'b0000: segment <= 8'b11000000;4'b0001: segment <= 8'b11111001;4'b0010: segment <= 8'b10100100;4'b0011: segment <= 8'b10110000;4'b0100: segment <= 8'b10011001;4'b0101: segment <= 8'b10010010;4'b0110: segment <= 8'b10000010;4'b0111: segment <= 8'b11111000;4'b1000: segment <= 8'b10000000;4'b1001: segment <= 8'b10010000;4'b1010: segment <= 8'b10001000;4'b1011: segment <= 8'b10000011;4'b1100: segment <= 8'b11000110;Timer_1ms.vmodule timer_1ms(input wire clk,output reg clk_1ms);reg [15:0] cnt;initial begincnt [15:0] <=0;clk_1ms <= 0;endalways@(posedge clk)if(cnt>=25000) begincnt<=0;clk_1ms <= ~clk_1ms;endelse begincnt<=cnt+1;endendmodule五、实验结果与分析1. 仿真结果如下(仿真时间较长,分2张图展示):Ox00c00 0x0300 2’b003.程序运行成功后,将代码下载到实验板spartan3上验证按动按钮,发现数码管上显示的数值即仿真输出码的[17:2]位,且出现顺序一致,说明程序成功。
实验四 指令、微指令设计
实验四:设计指令/微指令系统计科0903童燕翔2009310200333一、实验要求:1、掌握CPP266软件的各部件的原理和使用方法。
2、了解指令/微指令系统,以及每条微指令的构成。
3、学会在原有指令/微指令的基础上设计简单易懂的指令/微指令系统。
二、实验目的:1、学会进一步运用CPP226软件和机箱。
2、设计简单的指令/微指令系统,并编程加以实现。
三、实验器材以及用品DICE-CP226 型计算机组成原理实验机箱,CPP226软件,教材书和实验指导。
四、实验方案:1、设想一个新的指令,并标明它的名称和目的,以及所要完成的功能。
2、根据现有的指令/微指令,利用cpp226软件设计新指令的助记符,周期,微程序等。
3、然后编写程序验证新指令的正确性。
五、实验步骤:1因为硬件系统需要指令机器码的最低两位做为R0-R3 寄存器寻址用,所以指令机器码要忽略掉这两位。
我们暂定这六条指令的机器码分别为04H,08H,0CH,10H,14H,18H。
2、打开CP226 组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的指令系统文件insfile1.dat,参考原来文格式,输入如下文件后,清除原来的指令系统,选择[文件]\另存为mean.dat。
注:助记符中,#表示立即数,*表示十六进制数,表注框内20 表示该栏占20 个字母位置,不足20 个用空格键填充,其余类同。
3、打开CP226 组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的微指令系统文件insfile1.mic,参考原来文件格式,待下面微程序代码确定后相应输入下表,然后清除原来的微指令系统,选择[文件]\另存为mean.mic.4、打开CP226 组成原理实验软件,选择[文件|打开指令系统/微程序],调入一个已有的指令集文件insfile1.mac,参考原来文件格式,输入如下文件后,清除原来的指令系统,选择[文件]\另存为mean.mac.5、在源程序窗口输入下面程序将程序另存为mean.asm,选择[文件|调入指令系统/微程序],调入mean.mic,将程序汇编成机器码,观察反汇编窗口,会显示出程序地址、机器码、反汇编指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机组成原理课程设计报告班级:计算机/物联网班姓名:学号:完成时间:2016.1.14一、课程设计目的1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3.培养综合实践及独立分析、解决问题的能力。
二、课程设计的任务针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、课程设计使用的设备(环境)1.硬件●COP2000实验仪●PC机2.软件●COP2000仿真软件四、课程设计的具体内容(步骤)1.详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现该模型机指令系统的特点:从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADD A, R?和ADD A, @R?都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。
因此,指令系统的指令格式是定长操作码的,操作码为6位。
1)双字长的指令格式如下:2)单字长的指令格式如下:举例:该模型机微指令系统的特点(包括其微指令格式的说明等):该模型机微指令系统的微指令格式是水平型微指令,微指令的字长为24位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。
操作控制字段的每一位对应一个微操作,采用字段直接译码的方式对系统进行控举例:微指令CBFFFF:取指令COP2000中有7个寄存器可以向数据总线输出数据, 但在某一特定时刻只能有一个寄存器输出数据. 由X2,X1,X0决定那一个寄存器输出数据。
COP2000中的运算器由一片EPLD实现. 有8种运算, 通过S2,S1,S0来选择。
运算数据由寄存器A及寄存器W给出, 运算结果输出到直通门D。
2. 计算机中实现乘法和除法的原理(1)无符号乘法①算法流程图:开始初始化(被)乘数=0NO(被)乘数>0FHNO乘数带进位右移CF=1YES积加乘数被乘数不带进位左移计数器减1ZF=1YES保存结果YES YESNONO结束②硬件原理框图:AWSTR0R1R2ALU被乘数乘数计数值4CY左移右移(2)无符号除法①算法流程图:开始商清0除数左移4位除数为0NO被除数减除数CF=0NO除数右移1位商左移1位被除数减除数CF=0YES商加1移位次数为4YES保存结果结束YESYESNONO②硬件原理框图:A ALUWR0R1STR2CY右移左移除数被除数商3.对应于以上算法如何分配使用COP2000实验仪中的硬件 (初步分配,设计完成后再将准确的使用情况填写在此处)4.在COP2000集成开发环境下设计全新的指令/微指令系统设计结果如表所示(可按需要增删表项)(1)新的指令集(如果针对乘除法设计了两个不同指令集要分别列表)5.用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序(1)乘法4位乘法的算法流程图与汇编语言程序清单:1)流程图如下:开始被乘数送入R0乘数送入R1(被)乘数=0NO(被)乘数>0FHNO将4送入R3做计数寄存器清0R1带进位右移CF=1YESADD A,R0R0不带进位左移暂存AR3减1恢复AZF=1YESMOV R0,A存结果结束YESYESNONO 2)汇编语言程序清单如下:MOV R3#0FH 将A赋值,用于比较MOV A,R3MOV R0,#0FH ---被乘数在R0中TEST R0,#0FH 判断被乘数是否为0,是则结束JZ T3 判断被乘数是否溢出,是则结束CMP A,R0JC T3MOV R1,#0FH ---乘数在R1中TEST R1,#0FH 判断乘数是否为0,是则结束JZ T3CMP A,R1 判断乘数是否溢出,是则结束MOV R3,#04HAND A,#00HLOOP1:SHR R1JC T1JMP LOOP2T1:ADD A,R0LOOP2:SHLN R0PUSH ASUB R3,#01HPOP AJZ T2JMP LOOP1T2:MOV R0,A --乘积结果在R0中JMP ENT3:MOV R0,#00HEN:ENDJMP END(2)除法4位除法的算法流程图与汇编语言程序清单:1)算法流程图如下1)算法流程图如下开始R2(商)左移被除数送入R0中除数送入R1中R1=0NO计数值4送入R3中R2清0用来保存商R1左移4位MOV A,R0CMP A,R1CF=1YESR1右移CMP A,R1CF=1NOSUB A,R1暂存AR2(商)加1恢复A暂存AR3减1恢复AZF=1YESMOV R3,A结束YESNONOYES2)汇编语言程序清单如下:MOV R0,#87H ---被除数在R0中MOV R1,#0DH ---除数在R1中MOV R3,#04HAND R2,#00H ---商在R2中TEST R1,#0FHJZ FLSHLN R1SHLN R1SHLN R1SHLN R1MOV A,R0CMP A,R1JC T1JMP FLT1:SHRN R1SHLN R2CMP A,R1JC T2SUB A,R1PUSH AADD R2,#01HPOP AT2:PUSH ASUB R3,#01HPOP AJZ QTJMP T1QT:MOV R3,A ---余数保存在R3中JMP ENFL:MOV R2,#0FFH 报错处理R2为0FFHEN:ENDJMP EN6.上述程序的运行情况(跟踪结果)按下表填写描述以上各程序运行情况的内容。
按每个程序一张表进行。
程序运行的过程1)乘法程序运行的过程2)除法程序运行的过程7.设计结果说明调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?请在此做具体说明。
答:出现了问题。
之前没考虑到除数为0的异常操作,故操作中少了TEST R?,#II;之后补齐操作TEST R?,#II微程序:C7FFEF——FFF7F7——FFFE93——CBFFFF在设计MOV R?,#II指令时,EMRD没置低位,使程序在仿真上能运行,但在机器上运行时会置数FFH,之后EMRD置0后,在机器上正常运行。
五、本次课程设计的总结体会(不少于200字)主要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。
1)加深了对指令系统、微指令系统的理解,自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序。
2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念通过微程序控制器的设计,进一步了解了控制器如何控制各个部件的协同工作,通过有时序的读取一系列的微指令,产生对应于各个部件的控制信号,使各个部件产生微操作,解释执行指令和程序。
虽然这次微程序控制器的设计与计算机组成原理课本中关于控制器的设计不太相同,在这次微指令设计中微指令格式并没有顺序控制字段,完全采用指令的操作码来获得下一条微指令的地址,原因在于每条指令的指令周期固定为四个机器周期,操作码与微地址之间有简单的对应关系,因此设计起来比较简单。
但也在很大的程度上帮助我们加深了对控制器工作原理的理解,建立起整机系统的概念。
3)我向来都非常重视实验课,因为这是对书本知识的验证和动手能力的锻炼。
对于前四次实验,我都做了较为充分的准备。
因此,我能在实验室较快地掌握相应的知识,并与书本上的知识融会贯通。
这对于书本知识地切身体验,以及对于这次课程设计顺利地完成都奠定了相当大的基础。
因此,我要在以后的学习中,更加注重实验课的重要性。
4)还有一点让我知道了,做实验要细心,要努力需要不断的尝试。
在这次实验我在设计跳转指令的时候,但是没有注意,然后再设计完以后发现对应的指令根本不能发挥相应的功能。
我也不知道错在哪,对应的微指令集也没有错。
让我百思不得其解。
后来我调整了指令的顺序,发现有一部分能实现相应的功能,但是还是有一些实现不了功能。
我查阅了对应的实验指导书,发现JMP的指令的第3、2位要10或者11才能实现功能,而JC需要00,JZ需要01,我调整了指令的位置,实现了功能。
我突然感觉到只是一些小的细节,却会对我们造成一个很严重的后果。
所以我们要心细,不要忽略每个细节,这样我们才会用更大的进步会取得更大的成功。
5)还有一点就是通过实验验收,实验老师指出了报告的一系列错误,让我意识到了实验报告想要写好也需要尽心,流程图之前一直画的很随意,但是老师的批评让我意识到了,作为一个计算机专业的人要有专业素养,基本的东西要必须做好。
总的来说还是收获挺大的。
(以上红色字内容为由设计者完成并填写)。