第1页第1页计算机组成原理课程设计说明书题目:设计一台嵌入式CISC模型计算机院(系):计算机科学与工程学院专业:网络工程学生姓名:唐波学号:1100380219指导教师:陈智勇第2页第2页一、课设题目:设计一台嵌入式CISC模型计算机(采用定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,实现方法可从以下4类中任选一个:●连续输入5个有符号整数(8位二进制补码表示,用十六进制数输入),求最小的负数的绝对值并输出显示。说明:①5个有符号数从外部输入;②一定要使用符号标志位(比如说SF),并且要使用为负的时候转移(比如JS)或不为负的时候转移(比如JNS)指令。二.CISC模型机系统总体设计三.操作控制器的逻辑框图……指令寄存器IR操作码微地址寄存器地址译码控制存储器地址转移逻辑状态条件微命令寄存器P字段操作控制字段微命令信号第3页第3页说明:在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。四.模型机的指令系统和所有指令的指令格式由此可见,本模型机中的指令系统中共有8条基本指令,下表9列出了每条指令的格式、汇编符号和指令功能。指令助记符指令格式功能15--121110987-----------0IN1Rd0101××Rd××××××××(Rd)+1→Rd,锁存标志位MOVRd,im0001××Rdim立即数→RdCMPRs,Rd0011RsRd××××××××Rs,Rd比较,INCRd0010××Rd××××××××输入设备→RdJNSaddr0100××××addr若大于,则addr→PCJMPaddr0110××××addraddr→PCOUT1Rs1001Rs××××××××××(Rs)→输出设备MOV1Rs,Rd1000RsRd××××××××(Rs)→RdNOTRd0111××Rd××××××××Data取反指令格式:第4页第4页(1)I/O指令(单字节)I说明:对Rs和Rd的规定:Rs或Rd选定的寄存器00R001R110R211R3五.所有机器指令的微程序流程图设计操作控制器单元(即微程序控制器)(1)设计微指令格式和微指令代码表CISC模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,P字段为2位,后继微地址为6位,其格式如下:252423222120191817161514131211109876543210LOADLDPCLDARLDIRLDRiRD_BRS_BS2S1S0ALU_BSW_BLED_BRD_DCS_DRAM_BCS_IADDR_BP1P2后继微地址PC→ABUS(I)RDROMIBUS→IRPC+1Rd→YY+1→Rd锁存CF,ZFRs→XRd→Y锁存CF,ZFSW→RdROM→BUSBUS→PCRs→X-X→Rs锁存CF,ZFRs→LEDIR(A)→PCIR(I)→RdP(1)P(2)000002030405O6070900012010CF=0ZF=0CF=1ZF=1INCCMPJNSIN1JMPNOTOUT1000000000000MOV00MOV1Rs→XX→Rd08000000第5页第5页由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:LOADLDPCLDARLDIRLDRiRD_BRS_BS2S1S0ALU_BSW_BLED_BRD_DCS_DRAM_BCS_IADDR_B微地址微命令字段P1P2后继微地址00110100100011111101100000100110001010001111111000000000021000111010011111110000000103100001100111111111000000000410000010001101111101000011051000101000101111110000010006010000100011111110001000000710001111000111111100000000081000101101011111110001001009100000000011011111000101001001000010001111111000000000(2)设计地址转移逻辑电路地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:(µA5的异步置“1”端SE6实际未使用)SE5=FS·P(2)·T4SE4=I7·P(1)·T4SE3=I6·P(1)·T4SE2=I5·P(1)·T4SE1=I4·P(1)·T4六.嵌入式CISC模型计算机的顶层电路图第6页第6页CROM:AA;第7页第7页七.汇编代码:MOVR0,00H功能:将0赋给R0MOVR1,FFH将FF赋给R1MOVR2,05H将05赋给R2L0:INCR0计数加1CMPR0,R2R0与R2比较,是否输入五个数JNSL3是跳转L2输出IN1R3输入一个数到R3CMPR3,R1R3和R1比较,锁存CF,ZFJNSL2跳转L2输出JMPL1跳转L1L1:MOV1R1,R3(R3)→(R1)JMPL0跳转L0L2:NOTR1R1取反INCR1R1加1OUT1R1输出R1第8页第8页八.机器语言源程序地址(十六进制)汇编语言源程序机器语言源程序代码00MOVR0,00H0001000000000000100001MOVR1,FFH000100011111111111FF02MOVR2,05H0001001000000101102503L0:INCR00010000000000000200004CMPR0,R20011100000000000380005JNSL30100000000001100400C06IN1R30101001100000000530007CMPR3,R100111101000000003D0008JNSL20100000000001010400A09JMPL1011000000000001160030AL1:MOV1R1,R310001101000000008D000BJMPL0011000000000001160030CL2:NOTR1011100010000000071000DINCR1001000010000000021000EOUT1R110010100000000009400第9页第9页九.机器语言源程序的功能仿真波形图及结果分析1.MOVR0,00H2.MOVR1,FFH3.MOVR2,05H4.CMPR2,R05.IN1R3(F4存到R3)6.MOV1R3,R1(F4存入R1)7.IN1R3(02存到R3)8.02是大于F4的正数,不跳到L1存R1,直接跳回L0。9.IN1R3(F1存到R3)。10.F1是小于于F4的负数,跳到L1,MOV1R3,R1(F1存入R1)第10页第10页11.FNOTR1,INCR1(F1取反加1存入R1)。12。OUT1R1(输出R1,最终结果是0F)十.故障现象和故障分析故障一:在进行仿真的时候,当输入一个正数存进R3之后,执行CMPR3,R1之后,没有执行JNSL0,而是错将正数也存入R1。查看之后发现是ALU里“CMP”运算代码有问题。故障二:计数(R0)一直加,到5时不会跳转输出,检查机器指令发现JNSL2的地址写成了06第11页第11页故障三:,输出结果时,取反都变成FB,检查很久之后发现原本应该对AC里的数取反的,结果弄成了DR的.故障N:汇编程序出错、连线错误、微指令错误、修改器件没有重新编译等。十一.心得体会刚开始去上老师的课时,听得一头雾水,因为发现好多地方自己同不懂。然后我就去看课本,同时问老师一些问题,当看到其他同学也问老师问题时,自己也跑过去凑热闹,因为这样可以了解更多的知识。直到后来才发现,原来除了设计自己的指令外,我们需要写MCOMMAND,写CONTROM来解析我们写的指令,这或许可以算得上一个极简单的CPU模型了吧。就是有了微程序控制器,计算机才认识我们自己设计的指令,才知道当读取到什么指令时该执行什么操作。听得多了,看得多了,就渐渐的明白了一些课设的相关知识,然后画指令流程图,设计指令,写程序完成任务,这些几乎都是水到渠成的工作了,很多都可以依葫芦画瓢来完成。本次课设,由于汇编学的很差,期汇编代码是和班级同学的相同,但是自己重新设计了指令周期流程图,经过调试得出的结果其实只要把最基本的原理搞明白了,后续工作开展是非常快的。但在没明白原理前,千万不要畏惧困难,慢慢的一点一点学习,特别是仿真软件的学习和使用,需要花费相当的时间。只要认真了,就有可能实现。十二.软件清单AA里的MMM:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;第12页第12页ENTITYMMMISPORT(SE:INSTD_LOGIC;CLK:INSTD_LOGIC;D:INSTD_LOGIC;CLR:INSTD_LOGIC;UA:OUTSTD_LOGIC);ENDMMM;ARCHITECTUREAOFMMMISBEGINPROCESS(CLR,SE,CLK)BEGINIF(CLR='0')THENUA='0';ELSIF(SE='0')THENUA='1';ELSIF(CLK'EVENTANDCLK='1')THENUA=D;ENDIF;ENDPROCESS;ENDA;CROM的:ADDRLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADDRISPORT(I15,I14,I13,I12:INSTD_LOGIC;ZF,CF,T4,P1,P2:INSTD_LOGIC;SE5,SE4,SE3,SE2,SE1,SE0:OUTSTD_LOGIC);第13页第13页ENDADDR;ARCHITECTUREAOFADDRISBEGINSE5='1';--预留给JB或JAE指令使用SE4=NOT((NOTZFANDCF)ANDP2ANDT4);SE3=NOT(I15ANDP1ANDT4);SE2=NOT(I14ANDP1ANDT4);SE1=NOT(I13ANDP1ANDT4);SE0=NOT(I12ANDP1ANDT4);ENDA;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYF1ISPORT(UA5,UA4,UA3,UA2,UA1,UA0:INSTD_LOGIC;D:OUTSTD_LOGIC_VECTOR(5DOWNTO0));ENDF1;ARCHITECTUREAOFF1ISBEGIND(5)=UA5;D(4)=UA4;D(3)=UA3;D(2)=UA2;D(1)=UA1;D(0)=UA0;ENDA;第14页第14页LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYF2ISPORT(D:INSTD_LOGIC_VECTOR(5DOWNTO0);UA5,UA4,UA3,UA2,UA1,UA0:OUTSTD_LOGIC);ENDF2;ARCHITECTUREAOFF2ISBEGINUA5=D(5);UA4=D(4);UA3=D(3);UA2=D(2);UA1=D(1);UA0=D(0);ENDA;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCONTROMISPORT(ADDR:INSTD_LOGIC_VECTOR(5DOWNTO0);UA:OU