《计算机组成原理课程设计报告 完整实现及完整报告.doc》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告 完整实现及完整报告.doc(30页珍藏版)》请在三一办公上搜索。
1、计算机组成原理课程设计报告专 业: 网络工程 学 号: 学生姓名: 指导教师: 2012年 月 日1 课程设计的题目和内容31.1 课程设计的题目31.2 课程设计完成的内容32 课程设计的基本要求33 课程设计的具体步骤43.1 完成系统的总体设计43.2 设计控制器的逻辑结构框图43.3 设计机器指令格式和指令系统53.4 设计时序产生器电路53.5 设计微程序流程图63.6 设计操作控制器单元(即微程序控制器)63.7 设计单元电路73.8 编写汇编语言源程序83.9 机器语言源程序83.10 编译和功能仿真93.11 主要器件电路图93.12机器语言源程序的功能仿真波形图及结果分析10
2、4 故障现象和故障分析125 心得体会136 软件清单137 附录表(微程序流程图)311 课程设计的题目和内容1.1 课程设计的题目设计一台嵌入式CISC模型计算机(采用定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,实现方法如下:连续输入5个有符号整数(8位二进制补码表示,用十六进制数输入),求最大的负数并输出显示。 说明:5个有符号数从外部输入; 一定要使用符号标志位(比如说SF),并且要使用为负的时候转移(比如JS)或不为负的时候转移(比如JNS)指令。第二类(最高成绩为“良”):采用单数据总线结构的运算器,不采用RAM;1.2 课程设计完成的内容 1.完成
3、系统的总体设计,画出模型机数据通路框图; 2.设计微程序控制器(CISC模型计算机)的逻辑结构框图; 3.设计机器指令格式和指令系统; 4.设计时序产生器电路; 5.设计所有机器指令的微程序流程图; 6.设计操作控制器单元;在CISC模型计算机中,设计的内容包括微指令格式(建议采用全水平型微指令)、微指令代码表(根据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存器和控制存储器等。具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。 7.设计模型机的所有单元电路,并用VHDL语言(也可使用GDF文件-图形描述文件)对模型
4、机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件; 8.由给出的题目和设计的指令系统编写相应的汇编语言源程序; 9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去; 10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。)2 课程设计的基本要求该课程设计作为一门独立的课程,要求学生掌握CISC模型机的组成和工作原理,学会Altera MAX+plus EDA软件的使用,能用VHDL语言设计一个能完成一定功能的模型计算机,并通过仿真一
5、个程序的执行来验证模型机设计的正确性。3 课程设计的具体步骤3.1 完成系统的总体设计嵌入式CISC模型机FSFC状态条件寄存器IRROMALUFZ外部时钟DRAC操作控制器和时序产生器复位信号AR具有时间标志的操作控制信号PCR2R1R0输出设备输入设备(说明:设计时,外部时钟信号上边沿有效。)3.2 设计控制器的逻辑结构框图指令寄存器IR操作码微地址寄存器地址译码控制存储器地址转移逻辑状态条件微命令寄存器P字段操作控制字段微命令信号说明: 在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。3.3 设计机器
6、指令格式和指令系统 本模型机中的指令系统中共有11条基本指令,下表列出了每条指令的格式、汇编符号和指令功能。助记符号机器格式指令代码TEST Rd0101Rd判断正负,锁存SFJNS0110addr若不为负,则addrPCMOV1 Rs Rd0111RsRdRsRdIN1 Rd1000Rd将数据存到Rd寄存器MOV Rd,data1001RddatadataRdCMP Rs,Rd1010RsRdRs-Rd,锁存CY和ZIJB addr1011addr若小于,则addrPCCMP1 Rd data1100dataRs-data,锁存CY和ZIINC Rd1101RdRd+1RdJMP addr1
7、110addraddrPCOUT1 Rs1 0 1 1addrRsLED说明:对Rs和Rd的规定:Rs或Rd选定的寄存器0 0R00 1R11 0R2模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:76 5 4 3 2 1 0符号位尾数3.4 设计时序产生器电路 T1、T2、T3、T4与CLR、Q之间的关系图QCLRT1T2T3T4一个CPU周期3.5 设计微程序流程图微程序控制器的设计过程为:(1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;(2)设计微指令格式和微指令代码表;(3)设计地址转移逻辑电路;(4)设
8、计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;(5)设计微程序控制器的顶层电路(由多个模块组成)。(详细微程序流程图参见最后一页附录表)3.6 设计操作控制器单元(即微程序控制器) (1)设计微指令格式和微指令代码表CISC模型机系统使用的微指令采用全水平型微指令,字长为26位,其中微命令字段为17位,P字段为3位,后继微地址为6位,其格式如下: 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0LOAD LDPC LDAR LDIR LDRi RD_B RS_B S1 S0
9、ALU_B LDAC LDDR WR CS SW_B LED_B LDFR P1 P2 P3 后继微地址由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:LOAD、LDPC、LDAR、LDIR、LDRi、RD_B、RS_B、S1、S0、ALU_B、LDAC、LDDR、WR、CS、SW_B、LED_B、LDFR。微地址微命令字段P1P2P3后继微地址00000011100110010011110000000010000010100101100100101101000000000001001000001001011111000001
10、100000010110000010011011110000010111000110111001100100111100010100010001111000110001001111000000000000100010001110010011010000000000001001111001100100111100000101000010101000010001101111000000010000101111100110010011110010100000001100100000100110111100000110010011011000001001101111000001001000111011
11、100110010011110000010011001111100001000100011000000000000100011000011001001111000000000001001010001111000011110000000000010011010001100100101100000000000101001000111001001011000000000001010110000110010110110000010110010110100001101100111110000000000101111000011111001111100000000001100010000110110011
12、11100000000001100111100110010011110000010101100000010001100100101100000000001100001000011001001111000000000011000101000110010010110000000000(2)设计地址转移逻辑电路地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与A4A0对应的异步置“1”控制信号SE5SE1的逻辑表达式为:SE6=(FS)P(3)T4SE5=(FC+FZ)
13、P(2)T4SE4=I7P(1)T4SE3=I6P(1)T4SE2=I5P(1)T4SE1=I4P(1)T4(3)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;(4)设计微程序控制器的顶层电路(由多个模块组成)。3.7 设计单元电路 设计模型机中的所有单元电路,并用VHDL语言(也可使用GDF文件-图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件。嵌入式CISC模型机的顶层电路图如下图所示:3.8 编写汇编语言源程序 由给出的题目和设计的指令系统编写相应的汇编语言源程序。算法思想为:采用R0寄存器存放从开关输入的
14、任意一个整数,R1存放要输出的最大负数,R2存放循环次数,用一个循环程序实现如下:MOV R1,80H; 将立即数80HR1(R1用于存放最终输出结果)MOV R2,0; 将立即数0R2(R2用于存放循环次数)L1: IN1 R0; 从开关输入任意一个整数nR0 INC R2; R2内容自增1存入R2中 TEST R0; 测试输入的数是否为负数 JNS L2; 若不为负,则跳转L2 CMP R0,R1; 将R0数与R1的数进行比较,锁存CY/FC和ZI/FZ JB L2; 小于,则转到L2处执行 MOV1 R0,R1 将R0的内容存放到R1中 JMP L2; 跳转到L2处执行L2:CMP1 R
15、2,5 比较循环次数 JB L1; 小于,则转到L1继续执行 OUT1 R1; 否则输出显示R13.9 机器语言源程序根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去。与3.3.8中汇编语言源程序对应的机器语言源程序如下:助记符 地址(十六进制) 机器代码 功能MOV R1,80H; 00 10010001 80HR1 01 10000000MOV R2,0; 02 10010010 0R2 03 00000001L1: IN1 R0; 04 10000000 SW R0 INC R2; 05 11010010 R2+1R2 TEST R0; 06
16、 01010000 80H=R3 JNS L2; 07 01100000 L2PC 08 00001111CMP R0,R1; 09 10100001 R0-R1 JB L2; 0A 10110000 L2PC 0B 00001111MOV1 R0,R1 0C 01110001 R0R1 JMP L2; 0D 11100000 L2PC 0E 00001111L2:CMP1 R2,5 0F 11000010 R2-5 10 00000101JB L1; 11 10110000 L1PC 12 00000100OUT1 R1; 13 11110100 R1LED3.10 编译和功能仿真 在完成3
17、.1至3.9的所有设计后,使用EDA软件对模型计算机(顶层电路或顶层文件)进行编译,编译通过后再进行功能仿真,其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试,要保证仿真的结果满足题目的要求。3.11 主要器件电路图(1)aa(微地址寄存器)器件的电路图(2)crom(微程序控制器)器件的电路图3.12机器语言源程序的功能仿真波形图及结果分析(1)一开始程序计数器PC的值为0,往后实现加1计数或实现程序转移。第一、第二两条M0V指令执行后,R1、R2的值分别为80H和00H。第三条指令IN1 R0执行后,输入的数被保存在R0中。(2)执行INC R2,循环次数加1
18、。执行TEST R0,判断输入的数是否为负数,这里输入79,不为负数,执行JNS 跳转L2。进行CMP指令判断循环次数,共需要执行5次,此时次数未达到5次,执行JB 跳转L1继续输入。(3)此时输入的数是83,TEST测试为负数不执行JNS跳转,继续往下执行CMP比较R0,R1中数的大小,此时R0大于R1,不执行JB跳转,继续往下执行MOV1,将R0的数存入R1然后执行CMP1判断循环次数是否达到上限,此时未达到5次,执行JB跳转至L1继续输入。(4)按照这样一个状态反复循环,当到达最后一次时,输入的数为DF,存入RO后又往下执行,执行到与R1进行比较时,DF比之前存放在R1里面的98要大,可
19、以看到波形图上R1的值由98变成了DF。(5)然后执行CMP1判断循环次数,此时已经是最后一次,执行后跳出循环,不进行JB跳转,往下执行OUT1指令,将存放在R1中的数输出。前面在仿真开始时,输入的5个数为:79、83、98、CD、DF。要求的是输出最大负数,即要输出DF,因此由波形图可看到DF已被输出。4 故障现象和故障分析在编译和仿真的过程中,虽然没有提示出错误,但是就是输出不了结果,于是先是慢慢检查之前的器件之间有没有连错线,各器件的VHD代码有没有写错。在确定好这些准确无误之后,就开始查找汇编代码和机器代码看是否有误,以及流程图否写错。第一次发现是P(2)测试与P(3)的伪指令代码写反
20、了,改正后继续方针,发现能够正常执行,但是始终无法输出结果。又仔细核对了一遍伪指令,在确定微指令无误后,发现问题出在了微程序流程图上。无法输出结果的原因是进入了一个无限循环。经过一步步检查,是CPM1指令流程图少了一个步骤,随后将此步骤添加上去,再改动一下一些需要修改的微指令,然后编译仿真,终于可以得出了正确结果。 5 心得体会这次课程设计,老师在第一次上机课的时候用,让我们按着书本自学了MAX+plus软件的安装步骤以及使用方法。从这次课开始,我才开始接触到VHD语言,在自学摸索的过程中,照着书上的步骤把书上给的例子正确编译仿真了一遍,也算是对原理以及步骤有了更进一步的了解,为之后自己做课程
21、设计打下了基础。在接下来的一个星期里,不断的对着书本,不断的自行设计汇编代码啊、指令系统和格式、以及画流程图,刚开始不是很了解,进展得比较慢,有不懂的地方往往会想很久,花了大量的时间和精力。然而觉得最难的就是去调试找错误。因为编译仿真时,软件并没有给出错误提示,但是却又输不出结果,要自己去根据波形图找结果,这一点是最困难的,因为刚开始对波形图还不是看得很明白,随着一次次的反复调试观察,以及向老师和周围的同学询问,慢慢的自己也学会了通过看波形图来准确的找出错误所在。按照这样的步骤,基本上遇到错误都能自行发现解决。经过两周的坚持与不懈,终于将此次课程设计成功完成,实现了B类要求的全部功能。通过这次
22、课程设计,我对计算机组成原理有了更进一步的了解,同时也发现了自己的一些不足之处,这次课设让我受益匪浅,使我对计算机的工作原理和流程有了更加深刻的认识,增强了自己的动手设计能力,发散了思维。6 软件清单=VHDL源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX3 IS PORT( ID:IN STD_LOGIC_VECTOR(7 DOWNTO 0); SW_B,CS:IN STD_LOGIC; N1,N2:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EW:OUT STD_LOGIC_VECTOR(7 DO
23、WNTO 0) ); END MUX3; ARCHITECTURE A OF MUX3 IS BEGIN PROCESS(SW_B,CS) BEGIN IF(SW_B=0)THEN EW=ID; ELSIF(CS=0)THEN EW=N2; ELSE EW DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT NULL; END CASE; END IF; END PROCESS; END A;VHDL源程序如下:LIBRARY IEEE; USE
24、IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER IS PORT( Q,CLR:IN STD_LOGIC; T2,T3,T4:OUT STD_LOGIC ); END COUNTER; ARCHITECTURE A OF COUNTER IS SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN PROCESS(Q,CLR) BEGIN IF(CLR=0)THEN T2=0; T3=0; T4=0; X=
25、00; ELSIF(QEVENT AND Q=1)THEN X=X+1; T2=(NOT X(1) AND X(0); T3=X(1) AND (NOT X(0); T4=X(1) AND X(0); END IF; END PROCESS; END A; 设计中IR、AR、AC、DR、R0、R1、R2用的都是LS273。VHDL源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LS273 IS PORT( D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; O:OUT STD_
26、LOGIC_VECTOR(7 DOWNTO 0) ); END LS273; ARCHITECTURE A OF LS273 IS BEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1)THEN O=D; END IF; END PROCESS; END A;VHDL源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PC IS PORT( LOAD,LDPC,CLR:I
27、N STD_LOGIC; D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END PC; ARCHITECTURE A OF PC IS SIGNAL QOUT:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(LDPC,CLR,LOAD) BEGIN IF(CLR=0)THEN QOUT=00000000; ELSIF(LDPCEVENT AND LDPC=1)THEN IF(LOAD=0)THEN QOUT=D; ELSE QOUT=QOUT+1; END
28、 IF; END IF; END PROCESS; O=QOUT; END A;VHDL源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ALU IS PORT( A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S1,S0:IN STD_LOGIC; BCDOUT:OUT STD_LOGIC_VECTOR(7 DOWN
29、TO 0); SF,CY,ZI:OUT STD_LOGIC ); END ALU; ARCHITECTURE A OF ALU IS SIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(8 DOWNTO 0); BEGIN PROCESS(S1,S0) BEGIN -VARIABLE TEMP1:STD_LOGIC_VECTOR(7 DOWNTO 0); IF(S1=0 AND S0=0)THEN AA=0&A; BB=0&B; TEMP=AA+BB; BCDOUT=TEMP(7 DOWNTO 0); CY=TEMP(8); IF(TEMP=100000000)THEN ZI=1; ELSE ZI=0; E