计算机组成基础原理课程教学设计(桂电)求负数平方和CISC.doc
.-计算机组成原理课程设计报告题 目:求负数平方和CISC模型院 系:计算机科学与工程学院专 业:计算机科学与技术指导教师:陈智勇 2014年3月30号目 录1课程设计的题目与内容12课程设计完成的内容13系统开发环境及VHDL语言介绍14系统总体设计25MAX PLUS II软件编译仿真测试和结果分析96遇到的问题及解决办法117 心得体会118 参考文献129 附录12一:课程设计的题目及内容题目输入包含5个整数(有符号数)的数组M,输出所有负数的平方和。 要求采用定长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实验平台上进行操作演示三:系统开发环境及语言介绍Max plus IIMax+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)生产 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系统设计的基本点 四:系统总体设计嵌入式CISI模型机系统总体设计嵌入式CISC系统控制器的逻辑结构框图 模型机的指令系统和所有指令的指令格式设计输入指令(IN1)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 RdMOV指令格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 Rd立即数im取数指令(LAD)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码RsRd相加指令(ADD)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码RsRd加1指令(INC)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码Rd减1指令(DEC)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码Rd非零条件转移指令(JNZ)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 地址addr传送指令(STO)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码Rs地址addr无条件转移指令(JMP)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 地址addr输出指令(OUT1)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码Rs存数指令(STOI)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码RsRd乘法指令(IMUL)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码Rd判断箱号位转移(TEST)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 地址addr非负条件转移指令(JNS)格式:15 14 13 1211 109 87 6 5 4 3 2 1 0操作码 地址addr模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下: 76 5 4 3 2 1 0符号位尾数对于Rs或Rd的格式我们规定如下:Rs或Rd选定的寄存器00R001R110R211R3其中S2,S1,S0表示的是算术逻辑运算单元ALU,其功能表为:S2S1S0功能000X+Y001X-Y010X+1011X-1100SF101XY110SF=TEMP(7)111YY指令系统表如下指令助记符指令格式功能15-1211 109 87-0IN1 Rd0001Rd输入设备RdMOV Rd,im0010Rdim立即数RdLAD (Rs),Rd0011RsRd(Rs)RdADD Rs,Rd0100RsRd(Rs)+(Rd)Rd,锁存标志位INC Rd0101Rd(Rd)+1Rd,锁存标志位DEC Rd0110Rd(Rd)-1Rd,锁存标志位JNZ addr0111addr若不等,则addrPCSTO Rs,addr1000Rsaddr(Rs)addrJMP addr1001addraddrPCOUT1 Rs1010Rs(Rs)输出设备STOI Rs,(Rd)1011RsRd(Rs)(Rd)IMUL Rd,Rd1100Rd(Rd) (Rd)RdTESTRd1101Rd(RD)TEMP SF标志位JNS addr1110addr若不为正,则addrPC时序产生器时序信号产生器用于产生多级食醋系统中需要的时序信号,本实验采用的是微程序控制器的时序产生器,如下图微程序控制器的设计全过程微程序控制器的设计包括以下几个阶段:(1)机器指令的微程序流程图(2)设计微指令格式和微指令代码表(3)设计地址转移逻辑电路(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器(5)设计微程序控制器的顶层电路(由多个模块组成)。地址转移逻辑电路的设计地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与A5A0对应的异步置“1”控制信号SE6SE1的逻辑表达式为: SE6= ZFP(3)T4SE5=ZFP(2)T4SE4=I15P(1)T4SE3=I14P(1)T4SE2=I13P(1)T4SE1=I12P(1)T4汇编程序代码设计如下:MOV R1,11H ;寄存器R1用于存放RAM的某个连续区域的首地址MOV R2,5H ;寄存器R2用于存放循环次数L0: IN1 R0;寄存器R0用于接收外部输入的数据STOI R0,(R1);将R0中的数存放入R1中RAM的地址处INC R1 ;将地址加1,跳到下一个地址DEC R2 ;将循环次数减1JNZ 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 ;将平方和加入R0L2:DEC R2 ;将循环次数减1JNZ L1 ;循环次数没有完成,则跳回去再取数STO R0,10H ;将R0存放的结果放回到RAM中10H的地址处END:OUT1 R0;输出R0的结果内容JMP END ;不断循环对应的地址秒机器代码表:地址(十六进制)汇编语言源程序机器代码00MOV R1,11H0010000100010001 01MOV R2,5H001000100000010102L0: IN1 R0000100000000000003STOI R0,(R1)101100010000000004INC R1010100010000000005DEC R2011000100000000006JNZ L0011100000000001007MOV R0,0001000000000000008MOV R1,11H001000010001000109MOV R2,5H00100010000001010AL1: LAD (R1),R300110111000000000BINC R101010001000000000CTEST R311010011000000000DJNS L211100000000100000EIMUL R3,R311001111000000000FADD R3,R0010011000000000010L2:DEC R2011000100000000011JNZ L1011100000000101012STO R0,10H100000000001000013END:OUT1 R0101000000000000014JMP END100100000001001110 微程序流程图如下 :11 微指令格式如下:微地址LOADLDPCLDARLDIRLDRiLDPSWRs_BS2S1S0ALU_BSW_BLED_BRD_DCS_DRAM_BCS_IADDR_BP1P2uA5uA000110100100011111101100001100010100010111111000002100010100011111110000003101000000011111111000F0410001110000111111100000510001110100111111100000610001110110111111100000710000010001111111101000810100010001111111000110901000010001111111000000A10000000001101111100000B10100011100111111100110C10001111110111001100000D10000111100110011100000E10000001000110011100000F1000101000111100110000100100001000111111100000111000000000111001110000200100001000111111100000五: MAX PLUS ii软件编译仿真测试和结果分析Top图如下 通过创建二甲双胍仿真时序图 top.scf.,可以实现模型机的功能仿真,从图中可以看出cpu处理数据和数据的具体流向的每一个过程,如下是仿真的输出波形,具体结果和分析如下:六:遇到的问题及解决办法 由于设计的比老师给的稍微要复杂,多加了三条机器码,和一个P测试,难度提升了不少,在设计时从简单原则出发,又积极的寻问老师才确定下来要用的汇编代码和所要用的机器代码,以及微程序流程图,微程序指令等,但问题紧跟着来了,对于从来没有接触过VHDL语言的我来说,在进行编码,调试,编译的时候限入了困景,还有就是crom元器件的生成,是怎么由连接图转化而成的,最后在同学和老师的帮助下,基本熟悉了这些操作。但这么多的二进制对于任何人来说一次性输入能保证不会出错的我相信没有谁敢打保票,我也不例外,在调试的时候发现结果运行的不是预期的,在经过了各种猜想和排查才发现有个微指令输入错误.七:心得体会两周的实验,一晃而过,本来一开始也感觉没什么压力,也是慢慢地做,有时间才去弄一下,但自从有大神们早早就验收时,一种无形的压力催使自己要多花点时间,早点把它搞定,最终也在老师给定的期限内做出来了。 通过本次课程设计,对CPU的执行和操作过程有个基本的了解,掌握了CISC模型机的用途和工作原理,认识了max plus II软件的使用和操作,对自我的设计实践能力有了显著的提高。此外这次课程设计还使我对上学期所学的计算机组成原理的知识得到了提高,加深了对微程序,和微指令章节的知识有了深刻的理解,好些当时不懂的问题现在都已经搞清楚了,对计算机工作原理有了更新的认识。也体会到了作为一个大学生,要想学有所得,就得学习主动,不要什么都希望别人亲自传授,面对问题要自己去努力解决,多问问身边的同学,多动手查查,多上网找找,所以要想成功就得事事做到细心,耐心,恒心。已经大三了,在学校的时间已经不多了,要抓紧剩下的时间,别让自己的大学一事无成,为了自己的人生目标,只要坚持努力,总有一天会实现的,相信自己。八:参考文献1计算机原理课程设计 陈智勇,周向红,陆二庆编 西安电子科技大学出版社 20062 计算机组成原理 陈智勇 陈宏 王鑫编 西安电子科技大学出版社 20093基于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 ISBEGIN 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 ISPORT( 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 ISSIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESSBEGIN 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(XY) THEN SF=1; ZF=0; ELSIF(X=Y) THEN SF=0; ZF=1; ELSE SF=0; ZF=0; END IF; ELSIF(S2=0 AND S1=1 AND S0=0) THEN -INC AA=Y; TEMP=AA+1; 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=1 AND S0=1) THEN -DEC AA=Y; TEMP=AA-1; ALUOUT=TEMP(7 DOWNTO 0); SF=TEMP(7); IF (TEMP=10000000 OR TEMP=00000000) THEN ZF=1; ELSE ZF=0; END IF; ELSIF(S2=1 AND S1=0 AND S0=0) THEN -AND TEMP=Y; SF=TEMP(7); ELSIF(S2=1 AND S1=0 AND S0=1) THEN -OR TEMP=X OR Y; ALUOUT=TEMP; SF=TEMP(7); IF (TEMP=10000000 OR TEMP=00000000) THEN ZF=1; ELSE ZFBUS 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 DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT DATAOUT 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 ISBEGIN 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 ISBEGIN PROCESS BEGIN IF(I9=0 AND I8=0) THEN Y0=1; Y1=0; Y
收藏
- 资源描述:
-
.-
计算机组成原理课程设计报告
题 目: 求负数平方和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
展开阅读全文