找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2583|回复: 0
收起左侧

计算机组成原理课程设计报告

[复制链接]
ID:108615 发表于 2016-3-14 17:24 | 显示全部楼层 |阅读模式
一.实验目的
1.深入理解基本模型计算机的功能、组成知识
2.深入学习计算机各类典型指令的执行流程
3.学习微程序控制器的设计过程和相关技术,掌握LPM_ROM的配置方法
4.在掌握部件单元电路实验的基础上,进一步将单元电路组成系统,构造一台基本模型计算机。
5.定义六条机器指令,并编写相应的微程序,上机调试,掌握计算机整机概念。掌握微程序的设计方法,学会编写二进制微指令代码表。
6.通过熟悉较完整的计算机设计,全面了解并掌握微程序控制方式计算机的设计方法。
二.实验原理
1.在部件实验过程中,各不见单元的控制信号是认为模拟产生的,而本实验将能在微过程控制下自动产生各部件单元控制信号,实现特定的功能。实验中,计算机数据通路的控制将由微过程控制器来完成,CPU从内存中取出一条及其指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
2.指令格式
(1)机器指令格式
采用寄存器直接寻址方式,其格式如下:
  
  
  
7   6   5   4
  
  
3   2
  
  
1   0
  
  
功能
  
  
操作码(OP-CODE)
  
  
源寄存器(Rs)
  
  
目的寄存器(Rd)
  

其中寄存器地址规定如下
  
Rs或Rd地址
  
  
选定的寄存器
  
  
00
  
01
  
10
  
  
R0
  
R1
  
R2
  

模型计算机支持的指令如下
  
指令助记符
  
  
机器指令码
  
  
Addr地址码
  
  
功能说明
  
  IN
  OUT addr
  SUB addr
  AND addr
  OR   addr
  XOR addr
  MOV #num
  LDR addr
  
    00H
    10H             xxH
     20H             xxH
     30H             xxH
     40H             xxH
     50H             xxH
     60H             xxH
     70H             xxH
  
  “INPUT”中的数据 → R0
   [addr]  → OUT
   R0  - [addr] → R0
   R0  & [addr] → R0
   R0  | [addr] → R0
   R0  ^ [addr] → R0
   num → R0
   [addr] → R0
  
其中IN为单字节指令,其余为双字节指令,xxH为addr对应的十六进制地址码。为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还需要设计三个控制台微程序用于对控制器的控制。
1.存储器读操作(KRD):下载实验程序后按总清除按键(CLR)后,控制台SWA、SWB为“00”时,可对RAM连续手动读入操作。
2.存储器写操作(KWE):下载实验程序后按总清除按键(CLR)后,控制台SWA、SWB为“01”时,可对RAM连续手动写入操作。
3.启动程序(RP):下载实验程序后按总清除按键(CLR)后,控制台SWA、SWB为“11”时,即可转入到微地址“01”号“取指令”微指令,启动程序运行。


控制台微程序操作如下
  
SWB
  
  
SWA
  
  
控制台指令
  
  
0
  
0
  
1
  
  
0
  
1
  
1
  
  
读内存(KRD)
  
写内存(KWE)
  
启动程序(RP)
  

(2)微指令格式
24位微指令格式如下
  
24
  
  
23
  
  
22
  
  
21
  
  
20
  
  
19
  
  
18
  
  
17
  
  
16
  
  
15
  
  
14
  
  
13
  
  
12
  
  
11
  
  
10
  
  
9
  
  
8
  
  
7
  
  
6
  
  
5
  
  
4
  
  
3
  
  
2
  
  
1
  
  
S3
  
  
S2
  
  
S1
  
  
S0
  
  
M
  
  
Cn
  
  
WE
  
  
A9
  
  
A8
  
  
A[2]
  
  
A[1]
  
  
A[0]
  
  
B[2]
  
  
B[1]
  
  
B[0]
  
  
C[2]
  
  
C[1]
  
  
C[0]
  
  
uA5
  
  
uA4
  
  
uA3
  
  
uA2
  
  
uA1
  
  
uA0
  
其中A、B、C各个字段功能说明
(1)uA5-uA0:微程序控制器的微地址输出信号,下一条要执行的微指令的微地址。
(2)S3、S2、S1、S0:由微程序控制器输出地ALU操作选择信号,以控制指令16种算术操作中的某一种操作。
(3)M:微程序控制输出地ALU操作方式选择信号。M=0时执行算术操作;M=1时执行逻辑操作。
(4)Cn:微程序控制器输出的进位标志信号,Cn=0时表示ALU运算时最低位有进位,Cn=1时表示无进位。
(5)WE:微程序控制器输出地RAM控制信号。当/CE=0时,WE=0为存储器读;WE=1为存储器写。
(6)A9、A8——译码后产生CS0、CS1、CS2信号,分别作为SW_B、RAM、LED的选通信号。
(7)A字段(15、14、13)——译码后产生与总线相连接的各单元的输入选通信号。
(8)B字段(12、11、10)——译码后产生与总线相连接的各单元的输出选通信号。
(9)C字段(9、8、7)——译码后产生分支判断测试信号P(1)~P(4)和LDPC信号。
系统涉及到的微程序流程见图xx。当执行“取指令”微指令时,该微指令的判断测试字段微P(1)测试。由于“取指令”微指令是所有微程序都使用的公共微指令,因此P(1)的测试结果出现多路分支。 用指令寄存器的高4位(IR7-IR4)作为测试条件,出现5路分支,占用5各固定地址单元。
控制台操作为P(4)测试,它以控制台信号SWB、SWA作为测试条件,出现了3路分支,占用3个固定位地址单元。当分支位地址单元固定后,剩下的其他地方就可以一条微指令占用控制存储器的一个微地址单元,随意填写。
简而言之:
M:运算模式选择,0:算术运算;1:逻辑运算
Cn:进位标志位,0:最低位有进位;1:无进位
WE:RAM写使能信号,0:RAM读使能;1:RAM写使能

A9 A8:
(00)b:IN→BUS;
(01)b:RAM→BUS;
(10)b:BUS→OUT;

A:
(001)b:BUS→Rx(汇编指令中I1 I0指明寄存器地址)
(010)b:BUS→DR1
(011)b:BUS→DR2
(100)b:BUS→IR(指令寄存器)
(101)b:BUS→PC
(110)b:BUS→AR(地址寄存器)

B:
(001)b:Rx→BUS(汇编指令中I3 I2指明寄存器地址)
(010)b:Rx→BUS(汇编指令中I1 I0指明寄存器地址)
(011)b:
(100)b:
(101)b:ALU→BUS
(110)b:PC→BUS

C:
(001)b:测试汇编指令,跳转到相应微程序首地址
(010)b:
(011)b:
(100)b:测试控制台输入状态,跳转到控制用的微程序首地址
(101)b:
(110)b:PC+1→PC

当全部微程序设计完毕后,应将每条微指令代码化:
  
微地址
  
  
微指令
  
  S3  S2 S1 S0 M CN WE A9 A8
  
  
A
  
  
B
  
  
C
  
  
uA5——uA0
  
  
00
  
  
018110
  
  0   0  0  0   0  0  0   1  1
  
  
000
  
  
000
  
  
100
  
  
010000
  
  
01
  
  
01ED82
  
  0   0  0  0   0  0  0  1  1
  
  
110
  
  
110
  
  
110
  
  
000010
  
  
02
  
  
00C048
  
  0   0  0  0   0  0  0   0  1
  
  
100
  
  
000
  
  
001
  
  
001000
  
  
03
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
04
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
05
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
06
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
07
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
10
  
  
001001
  
  0   0  0  0   0  0  0   0  0
  
  
001
  
  
000
  
  
000
  
  
000001
  
  
11
  
  
01ED98
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
011000
  
  
12
  
  
01ED9B
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
011011
  
  
13
  
  
01ED9F
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
011111
  
  
14
  
  
01EDA3
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
100011
  
  
15
  
  
01EDA7
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
100111
  
  
16
  
  
01EDAB
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
101011
  
  
17
  
  
01EDAD
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
101101
  
  
20
  
  
01EDAF
  
  0   0  0  0   0  0  0   1  1
  
  
110
  
  
110
  
  
110
  
  
101111
  
  
21
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
22
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
23
  
  
018001
  
  0   0  0  0   0  0  0   1  1
  
  
000
  
  
000
  
  
000
  
  
000001
  
  
24
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
25
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
26
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
27
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
30
  
  
00E019
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
011001
  
  
31
  
  
00A01A
  
  0   0  0  0   0  0  0   0  1
  
  
010
  
  
000
  
  
000
  
  
011010
  
  
32
  
  
010A01
  
  0   0  0  0   0  0  0   1  0
  
  
000
  
  
101
  
  
000
  
  
000001
  
  
33
  
  
00E01C
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
011100
  
  
34
  
  
00B01D
  
  0   0  0  0   0  0  0   0  1
  
  
011
  
  
000
  
  
000
  
  
011101
  
  
35
  
  
01A21E
  
  0   0  0  0   0  0  0   1  1
  
  
010
  
  
001
  
  
000
  
  
011110
  
  
36
  
  
619A01
  
  0   1  1  0   0  0  0   1  1
  
  
011
  
  
101
  
  
000
  
  
000001
  
  
37
  
  
00E020
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
100000
  
  
40
  
  
00B021
  
  0   0  0  0   0  0  0   0  1
  
  
011
  
  
000
  
  
000
  
  
100001
  
  
41
  
  
01A222
  
  0   0  0  0   0  0  0   1  1
  
  
010
  
  
001
  
  
000
  
  
100010
  
  
42
  
  
B99A01
  
  1   0  1  1   1  0  0   1  1
  
  
001
  
  
101
  
  
000
  
  
000001
  
  
43
  
  
00E024
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
100100
  
  
44
  
  
00B025
  
  0   0  0  0   0  0  0   0  1
  
  
011
  
  
000
  
  
000
  
  
100101
  
  
45
  
  
01A226
  
  0   0  0  0   0  0  0   1  1
  
  
010
  
  
001
  
  
000
  
  
100110
  
  
46
  
  
E99A01
  
  1   1  1  0   1  0  0   1  1
  
  
001
  
  
101
  
  
000
  
  
000001
  
  
47
  
  
00E028
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
101000
  
  
50
  
  
00B029
  
  0   0  0  0   0  0  0   0  1
  
  
011
  
  
000
  
  
000
  
  
101001
  
  
51
  
  
01A22A
  
  0   0  0  0  0  0   0  1  1
  
  
010
  
  
001
  
  
000
  
  
101010
  
  
52
  
  
699A01
  
  0   1  1  0   1  0  0   1  1
  
  
001
  
  
101
  
  
000
  
  
000001
  
  
53
  
  
009001
  
  0   0  0  0   0  0  0   0  1
  
  
001
  
  
000
  
  
000
  
  
000001
  
  
54
  
  
000000
  
   
  
  
  
  
  
  
  
  
  
  
55
  
  
00E02E
  
  0   0  0  0   0  0  0   0  1
  
  
110
  
  
000
  
  
000
  
  
101110
  
  
56
  
  
009001
  
  0   0  0  0   0  0  0   0  1
  
  
001
  
  
000
  
  
000
  
  
000001
  
  
57
  
  
009001
  
  0   0  0  0   0  0  0   0  1
  
  
001
  
  
000
  
  
000
  
  
000001
  
指令寄存器(IR):指令寄存器用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到缓冲寄存器中,然后再传送至指令寄存器。指令划分为操作码和地址码段,由二进制数构成,为了执行任何给定的指令,必须对操作码进行测试“P(1)”,通过节拍脉冲T4的控制,以便识别所要求的操作。
指令译码器:根据指令中的操作码强置微控制器单元的微地址,使下一条微指令指向相应的微程序首地址。
实验中LCD显示屏可以用来显示模型机CPU中各组成单元的内容。将FPGA 配置文件下载到实验台后,按系统复位键,LCD液晶显示屏即显示CPU中各组成单元的内容。其功能说明如下:
  
指令名称
  
  
作用
  
  
指令名称
  
  
作用
  
  
IN
  
  
输入单元INPUT
  
  
DR1
  
  
暂存器DR1
  
  
OUT
  
  
输出单元OUPUT
  
  
DR2
  
  
暂存器DR2
  
  
ALU
  
  
算术逻辑单元
  
  
PC
  
  
程序计数器
  
  
BUS
  
  
内部数据总线
  
  
AR
  
  
地址寄存器
  
  
R0
  
  
寄存器R0
  
  
RAM
  
  
程序/数据存储器
  
  
R1
  
  
寄存器R1
  
  
IR
  
  
指令寄存器
  
  
R2
  
  
寄存器R2
  
  
MC
  
  
微程序控制器
  

测试微程序的机器指令如下:
  
地址(16进制)
  
  
内容(16进制)
  
  
助记符
  
  
说明
  
  
00
  
  
00
  
  
IN
  
  
“INPUT”中的数据66H → R0
  
  
01
  
  
10
  
  
OUT  60H
  
  
[60H] → OUT
  
间接寻址,其中60H中数据为44H
  
  
02
  
  
60
  
  
03
  
  
20
  
  
SUB  61H
  
  
R0  - [61H] → R0
  
其中61H中数据为55H
  
  
04
  
  
61
  
  
05
  
  
30
  
  
AND  62H
  
  
R0  & [62H] → R0
  
其中62H中数据为01H
  
  
06
  
  
62
  
  
07
  
  
40
  
  
OR  63H
  
  
R0  | [63H] → R0
  
其中63H中数据为F0H
  
  
08
  
  
63
  
  
09
  
  
50
  
  
XOR  64H
  
  
R0  ^ [64H] → R0
  
其中64H中数据为00H
  
  
0A
  
  
64
  
  
0B
  
  
60
  
  
MOV  #33H
  
  
33H  → R0
  
立即数寻址方式,将33H送到R0
  
  
0C
  
  
33
  
  
0D
  
  
70
  
  
LDR  65H
  
  
[65H]  → R0
  
间接寻址方式,其中65H中数据为77H
  
  
0E
  
  
65
  

三.实验步骤
1.微程序的输入
根据二进制微指令表,编辑LPM_ROM配置文件,与实验电路一同编译后,得到FPGA的配置文件,将该文件下载到实验系统。实验板上的时钟clock0选择输入频率为1.5MHz。
2.输入模型机的程序,这里采用自动写入
(1)在QuartusII环境下,选择LPM_RAM_DQ的存储器初始文件(mif文件)为MyRam.mif文件
(2)将工程文件重新编译后,下载到FPGA中,即完成LPM_RAM的配置。
(3)根据以上方法,复位信号RST(键8)=1;将控制开关SWB、SWA(键4、键3)设置为0、0,按键7,每两个
     2次单步运行(产生2个正脉冲)。
3.执行程序
(1)按1次系统复位键8,并置键8为高电平,使CPU允许正常工作;
(2)控制开关(键4、键3)设置为SWB、SWA=1,1,处于程序执行方式,观察图6-1控制台:PR(11);
(3)通过键2、键1输入运算数据66H,按4次单步键7,产生2个脉冲,执行2条微指令,进入到图6-1控制台的RP(11),此时的微指令地址是“23”,微指令码MC=008001;IN=66H
(4)再用键7产生1个脉冲,执行1条微指令,微程序流程进入图6-2左的“运行微程序”的最上块:此时PC=00,送地址寄存器AR=00,PC自动加1,PC=01,MC=00ED82,IN=66。
(5)键7产生1个脉冲,执行微指令MC=00C048(图6-2),RAM中的第一条指令码00进入BUS,再由BUS进入指令寄存器IR=00。键7再进1个脉冲,进入MC=001001,执行指令IN,送数IN→R0=66;
(6)键7产生1个脉冲,执行完IN指令后,返回到初始端,执行微指令MC=00ED82;
(7)仿照步骤4~6的操作方法,依次按按键7,观察液晶显示屏上检测的CPU内部寄存器和总线上的数据变化。

四.实验结果
针对设计的共8条指令,编写测试机器码来测试指令执行的正确性。将测试的机器码连同模型机的电路下载到FPGA中,按照三中所叙述的步骤,观察到液晶显示屏上的主要数据变化如下
执行第一条指令IN后,R0=66H
执行第二条指令OUT 60H后,OUT=44H
执行第三条指令SUB 61H后,R0=11H
执行第四条指令AND 62H后,R0=01H
执行第五条指令OR 63H后,R0=F1H
执行第六条指令XOR 64H后,R0=F1H
执行第七条指令MOV #33H后,R0=33H
执行第八条指令LDR 65H后,R0=65H
从以上测试代码执行的情况来看,微程序的设计没有问题。
五.实验中遇到的主要问题和分析解决问题的思路
实验中首先遇到的一个问题是软件的问题,在使用QuartusII将康芯的示意配置文件修改后下载到FPGA中,FPGA中的微程序运行一直不变,刚开始以为是自己的微程序问题,后来在检查的时候发现FPGA的配置文件的生成时间跟电脑的时间不吻合,初步确定是配置文件没有更新,后来在检查编译报告时发现提示该版本的Quartus不能生成编程文件。后来在装有License的机器上将文件重新编译一次,生成了真正的编程文件后,下载到FPGA中,执行微指令,正常。中间经常遇到的问题是试验箱上的按键7按得太快的话,微程序的执行顺序会变得不正常,这个问题还没有解决。目前按键按得慢点的话不会出现这种问题。还有个问题,当指令条数超过8条后,微控制器给出的微程序入口地址就不是按照原先的规律递增了,通过请教老师得知微控制器译码的指令不能超过8条,所以本设计连同原先的IN和OUT两条指令,剩下只设计6条。
六.学习经验和切身体会
通过本次课程设计,初步了解了CPU内部的各部分,能够使用微程序的方式来完成简单的CPU内部控制序列的设计,对微指令的理解更进了一步。提高了自己分析问题解决问题的能力,在遇到的QuartusII软件License导致无法生成编程配置文件这个问题上通过一步步的分析,把原因定位到软件的问题上,从而解决了问题。对教学实验的有一个建议,就是每台电脑上装上杀毒软件后再装上还原卡。实验中遇到不少问题都是机器的问题,例如软件的License问题,用U盘把编辑好的工程文件拷贝到别的装有License的机子上打开后发现文件夹被病毒莫名地隐藏了等等。

计算机组成原理课程设计报告.rar

15.72 KB, 下载次数: 8, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表