计算机组成基础原理课程教学设计(桂电)求负数平方和CISC.doc

收藏

编号:2649969    类型:共享资源    大小:566.96KB    格式:DOC    上传时间:2020-04-26
10
金币
关 键 词:
计算机 组成 基础 原理 课程 教学 设计 负数 平方和 cisc
资源描述:
.- 计算机组成原理课程设计报告 题 目: 求负数平方和CISC模型 院 系: 计算机科学与工程学院 专 业: 计算机科学与技术 指导教师: 陈智勇 2014年3月30号 目 录 1课程设计的题目与内容 1 2 课程设计完成的内容 1 3 系统开发环境及VHDL语言介绍 1 4 系统总体设计 2 5 MAX PLUS II软件编译仿真测试和结果分析 9 6 遇到的问题及解决办法 11 7 心得体会 11 8 参考文献 12 9 附录 12 一:课程设计的题目及内容  1 题目  输入包含5个整数(有符号数)的数组M,输出所有负数的平方和。  2 要求  采用定长CPU周期、联合控制方式,并运行能完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下: 五个有符号数从外部输入,一定要使用符号位(比如说SF),并且要使用负的时候转移(比如说JS)或不为负的时候转移(比如说JNS)指令; 采用三数据总线结构的运算器,采用RAM,先将输入数据依次存放在RAM的某一连续的存储区域内,再依次读出判断是否为负数,若为负数再求其平方和。 二:课程设计的要求  1.完成系统的总体设计,画出模型机数据通路框图; 2.设计微程序控制器(CISC模型计算机)的逻辑结构框图; 3.设计机器指令格式和指令系统; 4.设计时序产生器电路; 5.设计所有机器指令的微程序流程图; 6.设计操作控制器单元;   在CISC模型计算机中,设计的内容包括微指令格式(建议采用全水平型微指令)、微指令代码表(根据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存器和控制存储器等。具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。 7.设计模型机的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件; 8.由给出的题目和设计的指令系统编写相应的汇编语言源程序; 9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去; 10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。) 11.器件编程,并在EDA实验平台上进行操作演示 三:系统开发环境及VHDL语言介绍 1 Max plus II Max+plusⅡ是Altera公司上一代的PLD开发软件,Max+plusⅡ界面友好,使用便捷,主要用于设计新器件和大规模CPLD/FPGA).使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。其设计速度非常快。对于一般几千门的电路设计,使用MAX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。设计处理一般在数分钟内内完成。特别是在原理图输入等方面,Maxplus2被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用. 使用Maxplus2基本上也是以上几个步骤,可简化为: (1设计输入(2)设计编译(3)设计仿真(4)优化(5)布局布线(6)后仿真(7)生产 2 VHDL VHDL全称超高速集成电路硬件描述语言(英语:VHSIC hardware description language),在基于复杂可编程逻辑器件、现场可编程逻辑门阵列和专用集成电路的数字系统设计中有着广泛的应用。VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。自从IEEE发布了VHDL的第一个标准版本IEEE 1076-1987后,各大EDA公司都先后推出了自己支援VHDL的EDA工具。VHDL在电子设计行业得到了广泛的认同.VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点. 四:系统总体设计 1嵌入式CISI模型机系统总体设计 2 嵌入式CISC系统控制器的逻辑结构框图 3 模型机的指令系统和所有指令的指令格式设计 输入指令(IN1)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd MOV指令格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd 立即数im 取数指令(LAD)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rs Rd 相加指令(ADD)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rs Rd 加1指令(INC)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd 减1指令(DEC)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd 非零条件转移指令(JNZ)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 地址addr 传送指令(STO)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rs 地址addr 无条件转移指令(JMP)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 地址addr 输出指令(OUT1)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rs 存数指令(STOI)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rs Rd 乘法指令(IMUL)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd 判断箱号位转移(TEST)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 Rd 地址addr 非负条件转移指令(JNS)格式: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 操作码 地址addr 模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下: 7 6 5 4 3 2 1 0 符号位 尾数 对于Rs或Rd的格式我们规定如下: Rs或Rd 选定的寄存器 00 R0 01 R1 10 R2 11 R3 其中S2,S1,S0表示的是算术逻辑运算单元ALU,其功能表为: S2 S1 S0 功能 0 0 0 X+Y 0 0 1 X-Y 0 1 0 X+1 0 1 1 X-1 1 0 0 SF 1 0 1 X∨Y 1 1 0 SF=TEMP(7) 1 1 1 YY 4 指令系统表如下 指令助记符 指令格式 功能 15--12 11 10 9 8 7-----------0 IN1 Rd 0001 Rd 输入设备→Rd MOV Rd,im 0010 Rd im 立即数→Rd LAD (Rs),Rd 0011 Rs Rd ((Rs))→Rd ADD Rs,Rd 0100 Rs Rd (Rs)+(Rd)→Rd,锁存标志位 INC Rd 0101 Rd (Rd)+1→Rd,锁存标志位 DEC Rd 0110 Rd (Rd)-1→Rd,锁存标志位 JNZ addr 0111 addr 若不等,则addr→PC STO Rs,addr 1000 Rs addr (Rs)→addr JMP addr 1001 addr addr→PC OUT1 Rs 1010 Rs (Rs)→输出设备 STOI Rs,(Rd) 1011 Rs Rd (Rs)→(Rd) IMUL Rd,Rd 1100 Rd (Rd) (Rd)→Rd TEST Rd 1101 Rd (RD)→TEMP SF标志位 JNS addr 1110 addr 若不为正,则addr→PC 5 时序产生器 时序信号产生器用于产生多级食醋系统中需要的时序信号,本实验采用的是微程序控制器的时序产生器,如下图 6 微程序控制器的设计全过程   微程序控制器的设计包括以下几个阶段: (1)机器指令的微程序流程图 (2)设计微指令格式和微指令代码表 (3)设计地址转移逻辑电路 (4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器 (5)设计微程序控制器的顶层电路(由多个模块组成)。 7 地址转移逻辑电路的设计 地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。 由于微地址寄存器中的触发器异步置“1”端低电平有效,与A5~A0对应的异步置“1”控制信号SE6~SE1的逻辑表达式为: SE6= ZFP(3)T4 SE5=ZFP(2)T4 SE4=I15P(1)T4 SE3=I14P(1)T4 SE2=I13P(1)T4 SE1=I12P(1)T4 8 汇编程序代码设计如下: MOV R1,11H  ;寄存器R1用于存放RAM的某个连续区域的首地址 MOV R2,5H   ;寄存器R2用于存放循环次数 L0:  IN1 R0   ;寄存器R0用于接收外部输入的数据 STOI R0,(R1) ;将R0中的数存放入R1中RAM的地址处 INC R1  ;将地址加1,跳到下一个地址 DEC R2   ;将循环次数减1 JNZ L0    ;循环不结束再重新跳回接收外部数据,循环结束则继续下面操作 MOV R0,0   ;寄存器R0用于存放结果 MOV R1,11H  ;寄存器R1用于存放数据已存入RAM的某个连续区域的首地址 MOV R2,5H  ;寄存器R2用于存放循环次数 L1:LAD (R1),R3  ;寄存器R3用于存放刚才存入RAM的数据 INC R1   ;将地址加1,跳到下一个地址 TEST R3   ;测试符号标志位SF,判断其是否为负数 JNS L2   ;若不为负则跳转,取出下一个数 IMUL R3,R3  ;若为负则将该数求平方和 ADD R3,R0  ;将平方和加入R0 L2: DEC R2    ;将循环次数减1 JNZ L1  ;循环次数没有完成,则跳回去再取数 STO R0,10H  ;将R0存放的结果放回到RAM中10H的地址处 END:OUT1 R0 ;输出R0的结果内容 JMP END  ;不断循环 9 对应的地址秒机器代码表: 地址(十六进制) 汇编语言源程序 机器代码 00 MOV R1,11H 0010000100010001 01 MOV R2,5H 0010001000000101 02 L0: IN1 R0 0001000000000000 03 STOI R0,(R1) 1011000100000000 04 INC R1 0101000100000000 05 DEC R2 0110001000000000 06 JNZ L0 0111000000000010 07 MOV R0,0 0010000000000000 08 MOV R1,11H 0010000100010001 09 MOV R2,5H 0010001000000101 0A L1: LAD (R1),R3 0011011100000000 0B INC R1 0101000100000000 0C TEST R3 1101001100000000 0D JNS L2 1110000000010000 0E IMUL R3,R3 1100111100000000 0F ADD R3,R0 0100110000000000 10 L2:DEC R2 0110001000000000 11 JNZ L1 0111000000001010 12 STO R0,10H 1000000000010000 13 END:OUT1 R0 1010000000000000 14 JMP END 1001000000010011 10 微程序流程图如下 : 11 微指令格式如下: 微地址 LOAD LDPC LDAR LDIR LDRi LDPSW Rs_B S2 S1 S0 ALU_B SW_B LED_B RD_D CS_D RAM_B CS_I ADDR_B P1 P2 uA5~uA0 00 1 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 00 01 1 0 0 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 0 0 00 02 1 0 0 0 1 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 00 03 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0F 04 1 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 00 05 1 0 0 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 00 06 1 0 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 0 00 07 1 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 1 00 08 1 0 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 11 09 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 00 0A 1 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 0 0 00 0B 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0 11 0C 1 0 0 0 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 0 00 0D 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 00 0E 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 00 0F 1 0 0 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 0 00 10 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 00 11 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 00 20 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 00 五: MAX PLUS ii软件编译仿真测试和结果分析 Top图如下 通过创建二甲双胍仿真时序图 top.scf.,可以实现模型机的功能仿真,从图中可以看出cpu处理数据和数据的具体流向的每一个过程,如下是仿真的输出波形,具体结果和分析如下: 六:遇到的问题及解决办法 由于设计的比老师给的稍微要复杂,多加了三条机器码,和一个P测试,难度提升了不少,在设计时从简单原则出发,又积极的寻问老师才确定下来要用的汇编代码和所要用的机器代码,以及微程序流程图,微程序指令等,但问题紧跟着来了,对于从来没有接触过VHDL语言的我来说,在进行编码,调试,编译的时候限入了困景,还有就是crom元器件的生成,是怎么由连接图转化而成的,最后在同学和老师的帮助下,基本熟悉了这些操作。但这么多的二进制对于任何人来说一次性输入能保证不会出错的我相信没有谁敢打保票,我也不例外,在调试的时候发现结果运行的不是预期的,在经过了各种猜想和排查才发现有个微指令输入错误. 七:心得体会 两周的实验,一晃而过,本来一开始也感觉没什么压力,也是慢慢地做,有时间才去弄一下,但自从有大神们早早就验收时,一种无形的压力催使自己要多花点时间,早点把它搞定,最终也在老师给定的期限内做出来了。 通过本次课程设计,对CPU的执行和操作过程有个基本的了解,掌握了CISC模型机的用途和工作原理,认识了max plus II软件的使用和操作,对自我的设计实践能力有了显著的提高。 此外这次课程设计还使我对上学期所学的计算机组成原理的知识得到了提高,加深了对微程序,和微指令章节的知识有了深刻的理解,好些当时不懂的问题现在都已经搞清楚了,对计算机工作原理有了更新的认识。也体会到了作为一个大学生,要想学有所得,就得学习主动,不要什么都希望别人亲自传授,面对问题要自己去努力解决,多问问身边的同学,多动手查查,多上网找找,所以要想成功就得事事做到细心,耐心,恒心。已经大三了,在学校的时间已经不多了,要抓紧剩下的时间,别让自己的大学一事无成,为了自己的人生目标,只要坚持努力,总有一天会实现的,相信自己。 八:参考文献 1计算机原理课程设计 陈智勇,周向红,陆二庆编 西安电子科技大学出版社 2006 2 计算机组成原理 陈智勇 陈宏 王鑫编 西安电子科技大学出版社 2009 3基于VHDL语言与Quartus Ⅱ软件的可编程逻辑器件应用与开发 郑燕, 郝建国党建华著 国防工业出版社 出版时间 2007 九:附录 ADDR源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADDR IS PORT( I15,I14,I13,I12:IN STD_LOGIC; FZ,FS,T4,P1,P2,P3:IN STD_LOGIC; SE6,SE5,SE4,SE3,SE2,SE1:OUT STD_LOGIC ); END ADDR; ARCHITECTURE A OF ADDR IS BEGIN SE6<=NOT ((NOT FS) AND P3 AND T4); SE5<=NOT ((NOT FZ) AND P2 AND T4); SE4<=NOT ( I15 AND P1 AND T4); SE3<=NOT (I14 AND P1 AND T4); SE2<=NOT (I13 AND P1 AND T4); SE1<=NOT (I12 AND P1 AND T4); END A; ALU源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_SIGNED.all; ENTITY ALU IS PORT( X: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y: IN STD_LOGIC_VECTOR(7 DOWNTO 0); S2,S1,S0: IN STD_LOGIC; ALUOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; SF,ZF: OUT STD_LOGIC ); END ALU; ARCHITECTURE A OF ALU IS SIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS BEGIN IF(S2=0 AND S1=0 AND S0=0) THEN --ADD AA<=X; BB<=Y; TEMP<=AA+BB; ALUOUT<=TEMP(7 DOWNTO 0); SF<=TEMP(7); IF (TEMP="10000000" OR TEMP="00000000")THEN ZF<=1; ELSE ZF<=0; END IF; ELSIF(S2=0 AND S1=0 AND S0=1) THEN --CMP(SUB) ALUOUT<=X-Y; IF(XBUS ALUOUT<=Y; SF<=Y(7); ELSIF(S2=1 AND S1=1 AND S0=1) THEN --IMUL TEMP<=Y *Y; SF<=TEMP(7); ALUOUT<=TEMP; IF (TEMP="10000000" OR TEMP="00000000") THEN ZF<=1; ELSE ZF<=0; END IF; ELSE ALUOUT<="00000000" ; ZF<=0; END IF; END PROCESS; END A; CONTROM 源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL; ENTITY CONTROM IS PORT(ADDR: IN STD_LOGIC_VECTOR(5 DOWNTO 0); UA:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); O:OUT STD_LOGIC_VECTOR(20 DOWNTO 0) ); END CONTROM; ARCHITECTURE A OF CONTROM IS SIGNAL DATAOUT: STD_LOGIC_VECTOR(26 DOWNTO 0); BEGIN PROCESS BEGIN CASE ADDR IS WHEN "000000" => DATAOUT<="110100100011111101100000000"; WHEN "000001" => DATAOUT<="100010100010111111000000000"; WHEN "000010" => DATAOUT<="100010100011111110000000000"; WHEN "000011" => DATAOUT<="101000000011111111000001111"; WHEN "000100" => DATAOUT<="100011100001111111000000000"; WHEN "000101" => DATAOUT<="100011101001111111000000000"; WHEN "000110" => DATAOUT<="100011101101111111000000000"; WHEN "000111" => DATAOUT<="100000100011111111010000000"; WHEN "001000" => DATAOUT<="101000100011111110000010001"; WHEN "001001" => DATAOUT<="010000100011111110000000000"; WHEN "001010" => DATAOUT<="100000000011011111000000000"; WHEN "001011" => DATAOUT<="101000111001111111000010001"; WHEN "001100" => DATAOUT<="100011111101111111000000000"; WHEN "001101" => DATAOUT<="100011110001111111000000000"; WHEN "001110" => DATAOUT<="100000100011111111001000000"; WHEN "001111" => DATAOUT<="100010100011110011000000000"; WHEN "010000" => DATAOUT<="010000100011111110000000000"; WHEN "010001" => DATAOUT<="100000000011100111000000000"; WHEN "100000" => DATAOUT<="010000100011111110000000000"; WHEN OTHERS => DATAOUT<="100000100011111111000000000"; END CASE; UA(5 DOWNTO 0)<=DATAOUT(5 DOWNTO 0); O(20 DOWNTO 0)<=DATAOUT(26 DOWNTO 6); END PROCESS; END A; CONVENT 源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CONVENT IS PORT( IRCODE:IN STD_LOGIC_VECTOR(15 DOWNTO 0); OP:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); I11,I10,I9,I8:OUT STD_LOGIC; A:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END CONVENT; ARCHITECTURE A OF CONVENT IS BEGIN OP<=IRCODE(15 DOWNTO 12); I11<=IRCODE(11); I10<=IRCODE(10); I9<=IRCODE(9); I8<=IRCODE(8); A<=IRCODE(7 DOWNTO 0); END A; DECODER 源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DECODER IS PORT( I9,I8:IN STD_LOGIC; Y0,Y1,Y2,Y3:OUT STD_LOGIC ); END DECODER; ARCHITECTURE A OF DECODER IS BEGIN PROCESS BEGIN IF(I9=0 AND I8=0) THEN Y0<=1; Y1<=0; Y
展开阅读全文
提示  淘文阁 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:计算机组成基础原理课程教学设计(桂电)求负数平方和CISC.doc
链接地址:https://www.taowenge.com/p-2649969.html
关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

收起
展开