组成原理课程设计
指导教师: 白凯 雷鸣
学生班级: 计科 11200
学生姓名:
学 号: 201200000
班内序号: 00
课设日期: 2015/6/22~2015/7/3
目 录
一、设计目的.......................................3
二、设计要求.......................................3
三、设计方案.......................................3
四、设计过程.......................................4
五、程序与调试....................................11
六、结果及分析....................................13
七、收获、体会及建议..............................15
一、设计目的:
1.主要掌握微程序控制结构计算机的设计方法,通过对机器指令和相对应微程序的设计,加深对微程序控制器的理解,加深对微程序设计特点的了解,加深对计算机各部件的理 解以及对整机结构的理解。
2.掌握几种寻址方式的控制执行过程。
3.了解多累加器计算机的特点。
4.熟悉VHDL语言的编程。
二、设计要求:
1.运算器采用单累加器多寄存器结构
2.指令系统:16条以上指令,有I/O指令,外部设备统一编址。
3.内存寻址范围1K以上字节
寻址方式: 寄存器直接寻址
寄存器间接寻址
直接寻址
立即数寻址
4.可执行从键盘上输入的十进制两位数与两位数加法程序并打印输入的数据及结果或 实现两数相加通过数码管显示结果。
三、设计方案:
1.设计整机逻辑框图
首先设计整机逻辑框图,并分析各主要部件中所使用的关键器件,彻底理解主要芯片的工作原理。
根据设计要求,对实验仪硬件模块进行逻辑剪辑组合,便可设计出该实验计算机的整机逻辑框图。为利于调试,应在逻辑框图上表明各器件的控制信号及必要的输出信号。
2.指令系统和指令执行流程设计
① 指令系统
需确定实验计算机的指令系统具体由哪里指令组成,包括哪几种类型指令,指令操作数有哪几种寻址方式,以及指令编码等。
② 指令执行流程
一条指令从内存取出到执行完,需要若干个机器周期(节拍)。任何指令的第一个机器周期都是“取指令周期”,或称为公操作周期。而一条指令共需几个机器周期取决于指令在机内实现的复杂程度。
3.微操作控制信号和微程序设计
① 微操作控制信号及其实现方法
② 设计微指令格式,微指令由32位组成,设计出每位微操作的定义。
③ 确定微程序控制方式,设计任务包括设计各微程序入口地址的形成方法和控存的顺序控制(即下地址形成)方法。
④ 编写各指令的微程序,根据指令流程和微指令格式仔细地逐条填写微指令各码位。
4.设计接线表
要仔细设计接线表,因为它是组装计算机的依据。
① 为了避免遗漏,应按模块逐个归纳整理,明确各模块中器件各控制信号的处理方法。
② 对于模块中不用的器件,也应有所处理。
四、设计过程:
1、整机逻辑框图
图4-1给出了最简单的8位微程序控制计算机的基本结构框图。
图4—1、8位微程序控制计算机基本结构
结构描述:
总线:该计算机采用单总线,即CPU的内部总线和外部总线均为一条总线。它的结构简单,实现较方便。但它的速度较慢,无法实现流水线和并行操作。
CPU:它的CPU由ALU和寄存器模块、指令部件模块及微程序控制模块组成。
寄存器:ALU和寄存器模块包括通用寄存器(含累加器)、ALU(包括暂存器)、状态寄存器等,它可采用单累加器多寄存器或多累加器结构(见第一章)。
ALU:ALU可完成各种算术、逻辑运算功能,如加、减、与、或、取反、取负、移位等。状态寄存器可包括进位位、全零标志位、负数标志位、溢出标志位等。
指令部件:指令部件模块包括程序计数器(PC)及它的控制电路(加1、接数等)、指令寄存器(它一般包括一至三个8位寄存器,与最长的指令相对应)等。
微程序控制部件:微程序控制摸块包括微程序存贮器(现为1Kx32)、微程序计数器(MPC)及它的控制电路(加1、接数等)、微指令寄存器、时序控制电路、微操作信号发生电路等。
存贮器:存贮器为外接的RAM存贮器(现为32Kx8)
外设:包括打印机输出设备、键盘输入设备。它们均接于总线上,有分别的读、写控制信号。
2、指令系统和指令执行流程设计
2.1 CPU的基本功能部件
下面以单累加器为例,介绍一种简单的8位微程序控制计算机。该CPU的基本功能部件为:
² 该计算机有一个累加器(A)
² 8个寄存器(R0-R7)
² PC为16位,寻址范围为64K
* 其中0-7FFFH为32K RAM存贮器空间
* 8000-FFFFH为I/O空间
* 编址方法: I/O采用与存贮器统一编址的方法,AB15=0为访问存贮器;AB15为访问I/O口。
² 三个8位指令存贮器,其中一个为IR,存放指令码,另二个分别为ADRH和ADRL,存放指令中的16位直接地址。
2.2指令系统和汇编代码
首先应根据要求定义指令系统,并确定相应的汇编代码。
表4-1指令系统定义
注: 对寄存器间接寻址指令,如MOV @Ri,A,由于Ri为8位,而存储器地址为16位,故取Ri为低8位,高8位固定为7EH。
根据这些指令,我们设计出如下的实验计算机的CPU结构框图(不包含微程序
模块),如图4-2。
图4—2、微程序控制计算机CPU框图
关于图4-2 CPU结构的说明:
累加器: A为累加器,CA为它的打入脉冲(后沿有效(下同)),GA为它的打入允许端(‘0’为允许接数(下同)),RRC右移允许端,ACT为暂存寄存器,CC和GC分别为它的打入脉冲和允许端;
通用寄存器:R0~R7为8个通用寄存器,RS为选择端,用于选择某个寄存器,WRC和WRE分别为写入脉冲和允许端。
暂存器: TMP为暂存器,CT为它的打入脉冲,GT为它的打入允许端,用于暂存某些运算指令的第二操作数。多路开关MUXA用于选择把TMP还是通用寄存器的内容加到ALU上。
算术逻辑运算单元:ALU为8位的算术逻辑运算单元,FA、FB为两路输入,FF为输出;S2、S1、S0用于选择 工作方式,如加、减、FA、FB等;COUT为加法的进位输出或减法的借位输出,需要时COUT的值可锁存于CY寄存器中(CCK为写入脉冲,CP为允许端)。如果需执行带进位(或借位)的加法(或减法)时,ALU应该还有进位输入。ALU输出FF通过三态门(OB为控制端)加至数据总线。
指令寄存器:IR为指令寄存器,它存放指令的第一字节(一般包含操作码和寄存器选择),CCI和GI分别为它的打入脉冲和允许端。
直接寻址指令寄存器:ADRH和ADRL为指令第二、三字节寄存器,存放直接寻址指令(如LDA addr,JMP addr)的16位地址值。CA1、CA2和GA1、GA2分别为它们的打入脉冲和允许端。
程序计数器:PC为16位的程序计数器,它的清0端接RESET,使它在复位时为0,从0地址开始执行程序。PCK为脉冲端,PINC为加1控制端,PLD为并行接数控制端,它的输入端来自多路开关,可选择为“1”、CY、“0”等。其中“1”对应于JMP指令,CY对应于JC指令,其他情况接“0”(不转移)。PC的输出和ADR(由ADRH、ADRL组成)的输出通过多路开关加至地址总线AB。
堆栈指针:SP为16位的堆栈指针,它的初态为7FFFH。在把一个字节压入堆栈后,应把SP减一,指向下一个单元。在从堆栈弹出一个字节前,应把SP加一。
3、微操作控制信号和微程序设计
3.1微程序顺序控制方法
微程序计数增量方法:
² 微程序段的大小:它的微程序首地址根据指令操作码编码来形成。对于本实验计算机来说,由于每条指令对应的节拍数即微指令条数小于等于5,则我们可把微程序计数器打入地址的低3位置为“111”,其他几位接指令操作码。采用此方法时,各条指令的微程序段的大小取决于指令的微程序入口的间距。在把微程序计数器打入地址的低3位置“111”,其他位接指令操作码时,每条指令的微程序长度不能大于8。
² 根据指令条数确定操作码位数。由于本计算机有24条指令,只需五位操作码,多余的首地址位(高位部分)可接为0。
² 在第一次启动运行时,应把MPC清0,从而从微程序存储器的0号单元开始执行微指令(第一条微指令应为取指令微指令。)。
² 在取出指令后,按指令操作码转移至相应指令的微程序入口执行(该入口处应为该指令的第二拍操作(第一拍为取指令))。例,指令操作码为00000,则微程序入口地址为0000000111。以后微程序计数器加1,执行下一拍指令操作。
² 每条指令的微程序的最后一条微指令应为取指令微指令。
按照该方法可得出本实验计算机的微程序控制模块的框图(见图4-3),图中:
² MPC 为微程序计数器
² MCLR为它的清0端,用于复位时清0 MPC
² MPCK为它的时钟
² MPLD为打入信号,用于取指令后按指令操作码散转,MPC的输入为它的打入地址。对最多32条指令,每条指令最多8拍的情况,低3位接“1”,其他5位接指令操作码,高2位接0。(对最多16条指令,每条指令最多4拍的情况,低2位接“1”,其他4位接指令操作码,高4位接0。)
² MPC输出加至微程序存储器,作为微指令地址。
² MIR为微指令寄存器,它的输入来自微程序存储器。
² 微程序存储器位于实验芯片外,输出为32位微指令码,MICK为它的时钟。它根据MPC输出的微指令地址返回相应的32位微指令码到CO31~0 à MIR
3.2 定义微操作控制
本实验计算机结构比较简单,微操作信号比较少,因此可以采用全水平的微指令编码方式。这时,每位微指令码可控制一个微操作,如果微操作多于32个,则可采用分段编码方式。
所有的微操作都由微程序来控制,微操作信号用来控制各功能部件的工作方式和工作状态,以及进行各功能部件之间的信号传递。
本实验计算机如只有前述十八条指令,则按图4-2和图4-3,可得出以下微操作信号表。
表4-3微操作信号表
3.3 定义微指令编码功能
所有的微操作都由微程序来控制,由于本CPU的微指令宽度为32位。微操作数少于32个,所以可采用直接控制方式,即上述每一个微操作信号都由微指令相应的某一位来控制。
如下表所示:
表4-4 微指令控制微操作对应表
对应的VHDL硬件描述如下:
五、程序与调试:
1、8位CPU的VHDL描述
begin
DBL <= DB(7 downto 0);
DB(15 downto 8) <= bz when CRD = '0' else "00000000";
process (MCLK,CLKG) begin
if (RUN='0')or (RESET = '0') then MCLK <= '0';
elsif
(CLKG'event and CLKG='0') then MCLK <= not MCLK;
end if;
end process;
MPCK <= not MCLK and CLK;
MICK <= not MPCK;
CCK <= not MCLK;
CC <= not MCLK;
CA <= not MCLK;
CIR <= not MCLK;
CA1 <= not MCLK;
CA2 <= not MCLK;
WRC <= not MCLK;
PCK <= not MCLK;
process (PC,PCK) begin
if (RESET ='0') then PC <= "0000000000000000";
elsif (PCK'event and PCK='1') then
if (PLD = '1')then PC <= AB;
elsif (PINC = '1') then PC <= PC +1;
end if;
end if;
end process;
process (IR,CIR) begin
if (CIR'event and CIR = '1') then
if (GI = '0') then IR <= DBL;
end if;
end if;
end process;
process (R0,WRC) begin
if (WRC'event and WRC = '1') then
if (WRE = '0') then
if (RA = '0') and (RB = '0') and (RC = '0') then R0 <= DBL;
end if;
end if;
end if;
end process;
process (R1,WRC) begin
if (WRC'event and WRC = '1') then
if (WRE = '0') then
if (RA = '1') and (RB = '0') and (RC = '0') then R1 <= DBL;
end if;
end if;
end if;
end process;
process (R2,WRC) begin
if (WRC'event and WRC = '1') then
if (WRE = '0') then
if (RA = '0') and (RB = '1') and (RC = '0') then R2 <= DBL;
end if;
end if;
end if;
end process;
process (R3,WRC) begin
if (WRC'event and WRC = '1') then
if (WRE = '0') then
if (RA = '1') and (RB = '1') and (RC = '0') then R3 <= DBL;
end if;
end if;
end if;
end process;
process (R4,WRC) begin
if (WRC'event and WRC = '1') then
if (WRE = '0') then
if (RA = '0') and (RB = '0') and (RC = '1') then R4 <= DBL;
end if;
end if;
end if;
end process;
2、汇编指令集
-MOV
A,Ri
00000iii
-MOV
Ri,A
00001iii
-ADD
A,#data8
00010000
dddddddd
-ADD
A,addr
00011000
aaaaaaaa
aaaaaaaa
-ADD
A,Ri
00100iii
-SUB
A,Ri
00101iii
-MOV
A,#data8
00110000
dddddddd
-MOV
Ri,#data8
00111iii
dddddddd
-LDA
addr
01000000
aaaaaaaa
aaaaaaaa
-STA
addr
01001000
aaaaaaaa
aaaaaaaa
-enddef
3.调试程序
ORG 0
MOV A,#12H
MOV R0,#34H
ADD A,R0
STA 0020H
L:
JMP L
六、结果及分析:
键盘操作:(1)STOP (2)RET (3)0020 (4)ADR
结果:经过(1)(2)操作后,数码管上显示的是:12345678,如图:
经过(3)(4)操作之后,数码管上显示的为:00200046.如图:
分析:由调试程序知,是做加法12+34,结果为46。
七、收获、体会及建议:
这次课程设计我获益良多,平时上理论课时都是听老师讲计算机组成,而现在是我们自己来设计和实现基本模型机,让我对计算机组成原理有了更深层次的理解,同时这次课程设计还锻炼了我的实验动手能力,也培养了我的认真负责的科学态度。
本次课程设计要设计一台微程序控制的模型机,以对计算机能有一个整机的概念,完成对计算机组成原理这门课程的综合应用,达到学习本书的作用。作为一个计算机系学生这是必需掌握的,使我们对数据选择器,移位器,加法器,运算器,存储器和微程序控制器,有了比较透彻的认识。
课程设计结束了,从中我也学到了不少知识。虽然计算机组成原理的课程设计与学习已经结束,可我们学习之路并没有结束,我会继续努力学习其相关的知识,以适应社会的发展与需要,这样才能真正成为一名合格的大学生。在此感谢老师对我们的帮助和指导。