资源描述
.计算机组成原理课程设计报告题目:设计一台嵌入式CISC模型机院系:计算机科学与工程学院专业:网络工程:麦健豪学号:1100380215. v.一、课程设计的题目和内容 采用定长CPU周期、联合控制方式,并运行能完成一定功能的机器语言源程序进展验证,机器语言源程序功能如下:输入5个有符号整数8位二进制补码表示,求最大负数的绝对值并输出显示。说明:5个有符号数从外部输入;一定要使用符号标志位比方说SF,并且要使用为负的时候转移比方JS或不为负的时候转移比方JNS指令;采用单数据总线构造的运算器。二、系统设计2.1系统的总体设计2.2设计控制器的逻辑构造框图说明:在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令存放器,即图中的微命令存放器和微地址存放器。2.3设计机器指令和指令系统指令对象功能机器指令Mov1XX,RDDATADATA-RD0011TESTXX,RDAC锁存FS0100JNSXXXXADDRADDR-PC0101INCXX,RDRD+1-RD0110INXX,RDSW-RD0111CMP RS,RDRS-RD锁存FS1001MOV2RS,RDRS-RD1010JMPXXXXADDRADDR-PC1011NEGXX,RD(0-RD)-RD1100OUTRS,XXRS-LED1101以下是对Rs,Rd的规定:Rs或Rd选定的存放器0 0R00 1R11 0R2模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:76 5 4 3 2 1 0符号位尾数2.4设计时序产生器2.5设计微程序流程图2.6设计操作控制器单元(1)设计微指令格式与微指令代码表CISC模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,P字段为2位,后继微地址为6位,其格式如下:设计的具体指令为:16进制微地址LOADLDPCLDARLDIRLDRiRD_BRB_BS1S0ALU_BLDACLDDRWRCSSW_BLED_BLDFRP1P2后继微地址000000000000001002000010100000000300001100001110040001000000111105000101011000000600011000010010070001110000000009001001000101010A001010000000000B001011000110000C001100000110010D001101000000000E001110000000000F001111000000001201001000000000150101010001011016010110000000001801100000000000190110010000000030110000000000002010000000000000(2) 设计地址转移逻辑电路地址转移逻辑电路是根据微程序流程图的棱形框局部及多个分支微地址,利用微地址存放器的异步置1端,实现微地址的多路转移的。由于是采用逻辑电路来实现的,故称之为地址转移逻辑电路。在微地址流程图中,P1高电平有效测试时,根据指令的操作I7I4强制修改后继地址的低四位;在P2高电平有效时,根据借位标志FS进展2路分支,并且都在T4内形成后继微指令的微地址。SE5=(NOT FS) AND P(2) AND T4SE4=(I7 AND P(2) AND T4SE3=(I6 AND P(2) AND T4SE2=(I5 AND P(2) AND T4SE1=(I4 AND P(2) AND T42.7设计单元顶层电路2.8编写汇编语言源程序算法:R0存入一个整数-4,作为五次输入循环使用;R1用于存储输入的整数;R3用于存入最后的结果,并预存一个最小负数-128.随后如下Mov1 R0,-5将立即数-4-R0MOV1 R2,-128将立即数-128 -R2L1TEST R0测试R0,锁存SFJNS L2非负,即SF=0,跳转L2INC R0R0+1IN R1输入一个整数,并存入R1TEST R1测试R1JNS L1非负那么跳转L1CMP R2,R1比拟R2,R1的大小,锁存SFJNS L1非负那么跳转L1MOV2 R1,R2将R1的内容存入R2JMP L1跳转L1L2NEG R2对R2求补OUT R2输出结果2.9 机器语言源程序指令地址地址16进制机器指令十六进制备注Mov1 R0,-500000000000011000030000000010111111011FBMOV1 R2,-12800000010020011001032000000110310000001FFL1TEST R000000100040100000040JNS L20000010105010100005000000110060001001011INC R000000111070110000060IN R100001000080111000171TEST R100001001090100000141JNS L1000010100A0101000050000010110B0000010004CMP R2,R1000011000C1001100199JNS L1000011010D0101000050000011100E0000010004MOV2 R1,R2000011110F10100110A6JMP L1000100001010110000B000010001110000010004L2NEG R2000100101211000010C2OUT R2000100111311011000D8CISC模型机的单元电路3.1 ALU单元S1S0功能00AC-DR,锁存FS01AC 锁存FS10自加111求补LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALU ISPORT(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 DOWNTO 0);SF:OUT STD_LOGIC);END ALU;ARCHITECTURE A OF ALU ISSIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(S1,S0)BEGINIF(S1=0 AND S0=0)THENTEMP=A-B;SF=TEMP(7);BCDOUT=TEMP(7 DOWNTO 0);ELSIF(S1=0 AND S0=1)THENTEMP=A-0;SF=TEMP(7);BCDOUT=TEMP(7 DOWNTO 0);ELSIF(S1=1 AND S0=0)THENTEMP=A+1;BCDOUT=TEMP(7 DOWNTO 0);ELSIF(S1=1 AND S0=1)THENTEMP=0-A;BCDOUT=TEMP(7 DOWNTO 0);END IF;END PROCESS;END A;3.2存放器单元 LDFR上升沿有效。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS74 ISPORT(LDFR:IN STD_LOGIC;SF:IN STD_LOGIC;FS:OUT STD_LOGIC);END LS74;ARCHITECTURE A OF LS74 ISBEGINPROCESS(LDFR)BEGINIF(LDFREVENT AND LDFR=1)THEN FS=SF; END IF;END PROCESS;END A;而暂存存放器与通用存放器那么是使用LS273通用存放器功能表RO_1R1_BR2_BALU_B功能1110输出ALU0111输出R01011输出R11101输出R2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS273 ISPORT( D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END LS273;ARCHITECTURE A OF LS273 ISBEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN O=D; END IF; END PROCESS;END A;3.3 1:2分配器单元输入输出WRLED_BX7.0W17.0W27.000XX7.0其他值XX7.0LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FEN2 ISPORT( X:IN STD_LOGIC_VECTOR(7 DOWNTO 0); WR,LED_B:IN STD_LOGIC; W1,W2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END FEN2;ARCHITECTURE A OF FEN2 ISBEGIN PROCESS(LED_B,WR) BEGIN IF(LED_B=0 AND WR=0) THEN W2=X; ELSE W1=X; END IF; END PROCESS;END A;3.4 3选1数据选择器单元LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX3 ISPORT(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 DOWNTO 0);END MUX3;ARCHITECTURE A OF MUX3 ISBEGIN PROCESS(SW_B,CS) BEGIN IF(SW_B=0) THEN EW=ID; ELSIF(CS=0)THEN EW=N2; ELSEEW=N1;END IF; END PROCESS;END A;3.5 4选1数据选择器单元LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX4 ISPORT(C,D,E,F: IN STD_LOGIC;X1,X2,X3,X4: IN STD_LOGIC_VECTOR(7 DOWNTO 0);W: out STD_LOGIC_VECTOR(7 DOWNTO 0);END MUX4;ARCHITECTURE A OF MUX4 ISSIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN SEL=F&E&D&C; PROCESS(SEL) BEGIN IF(SEL=1110) THEN -R0_out W=X1; ELSIF(SEL=1101) THEN -R1_out W=X2; ELSIF(SEL=1011) THEN -R2-out W=X3; ELSIF(SEL=0111) THEN -R3_out W=X4; ELSE null; END IF; END PROCESS;END A;3.6 程序计数器单元LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PC ISPORT( load,LDPC,CLR: IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); O: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END PC;ARCHITECTURE A OF PC ISSIGNAL 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 QOUTPC ELSE QOUT=QOUT+1; -PC+1 END IF; END IF; END PROCESS; O=QOUT;END A;3.7 地址存放器单元同存放器单元3.8主存储器单元即为ROM。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM16 IS PORT(DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CS:IN STD_LOGIC);END ROM16;ARCHITECTURE A OF ROM16 ISBEGINDOUT=00110000WHEN ADDR=00000000AND CS=0ELSE 11111011WHEN ADDR=00000001AND CS=0ELSE 00110010WHEN ADDR=00000010AND CS=0ELSE 10000001WHEN ADDR=00000011AND CS=0ELSE 01000000WHEN ADDR=00000100AND CS=0ELSE 01010000WHEN ADDR=00000101AND CS=0ELSE 00010010WHEN ADDR=00000110AND CS=0ELSE 01100000WHEN ADDR=00000111AND CS=0ELSE 01110001WHEN ADDR=00001000AND CS=0ELSE 01000001WHEN ADDR=00001001AND CS=0ELSE 01010000WHEN ADDR=00001010AND CS=0ELSE 00000100WHEN ADDR=00001011AND CS=0ELSE 10011001WHEN ADDR=00001100AND CS=0ELSE 01010000WHEN ADDR=00001101AND CS=0ELSE 00000100WHEN ADDR=00001110AND CS=0ELSE 10100110WHEN ADDR=00001111AND CS=0ELSE 10110000WHEN ADDR=00010000AND CS=0ELSE 00000100WHEN ADDR=00010001AND CS=0ELSE 11000010WHEN ADDR=00010010AND CS=0ELSE 11011000WHEN ADDR=00010011AND CS=0ELSE 00000000;END A;3.9 指令存放器单元3.10 时序产生器单元LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER ISPORT( Q,CLR: IN STD_LOGIC; T2,T3,T4: OUT STD_LOGIC );END COUNTER;ARCHITECTURE A OF COUNTER ISSIGNAL X: STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN PROCESS(Q,CLR) BEGIN IF(CLR=0) THEN T2=0; T3=0; T4=0; X=00; ELSIF(QEVENT AND Q=1) THENX=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;3.11 操作控制器单元地址转移逻辑电路ADDRLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADDR IS PORT( I7,I6,I5,I4:IN STD_LOGIC; FS,T4,P1,P2:IN STD_LOGIC; SE6,SE5,SE4,SE3,SE2,SE1:OUT STD_LOGIC);END ADDR;ARCHITECTURE A OF ADDR ISBEGINSE6=1;SE5=NOT( FS AND P2 AND T4);SE4=NOT(I7 AND P1 AND T4);SE3=NOT(I6 AND P1 AND T4);SE2=NOT(I5 AND P1 AND T4);SE1=NOT(I4 AND P1 AND T4);END A;微地址存放器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MMM IS PORT( SE:IN STD_LOGIC; T2:IN STD_LOGIC; D:IN STD_LOGIC; CLR:IN STD_LOGIC; UA:OUT STD_LOGIC );END MMM;ARCHITECTURE A OF MMM ISBEGIN PROCESS(CLR,SE,T2) BEGIN IF(CLR=0) THEN UA=0; ELSIF(SE=0)THEN UA=1; ELSIF(T2EVENT AND T2=1) THEN UA=D; END IF; END PROCESS;END A;微地址转换器F1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY F1 ISPORT(UA5,UA4,UA3,UA2,UA1,UA0:IN STD_LOGIC;D:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END F1;ARCHITECTURE A OF F1 ISBEGIND(5)=UA5;D(4)=UA4;D(3)=UA3;D(2)=UA2;D(1)=UA1;D(0)DATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUTDATAOUT=00000000;END CASE;UA(5 DOWNTO 0)=DATAOUT(5 DOWNTO 0);D(18 DOWNTO 0)=DATAOUT(24 DOWNTO 6);END PROCESS;END A;微命令存放器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MMAND ISPORT( T2,T3,T4,I3,I2,I1,I0:IN STD_LOGIC; O:IN STD_LOGIC_VECTOR(18 DOWNTO 0); P1,P2,LOAD,LDPC,LDAR,LDIR,LDR0,LDR1,LDR2,R0_B,R1_B,R2_B,S1,S0,ALU_B,LDAC,LDDR,WR,CS,SW_B,LED_B,LDFR:OUT STD_LOGIC );END MMAND;ARCHITECTURE A OF MMAND ISSIGNAL DATAOUT:STD_LOGIC_VECTOR(18 DOWNTO 0);BEGIN PROCESS(T2) BEGIN IF(T2EVENT AND T2=1)THEN DATAOUT(18 DOWNTO 0)=O(18 DOWNTO 0); END IF; P2=DATAOUT(0); P1=DATAOUT(1); LDFR=DATAOUT(2) AND T4; LED_B=DATAOUT(3); SW_B=DATAOUT(4); CS=DATAOUT(5); WR=DATAOUT(6)OR(NOT T3); LDDR=DATAOUT(7) AND T4; LDAC=DATAOUT(8) AND T4; ALU_B=DATAOUT(9); S0=DATAOUT(10); S1=DATAOUT(11); R2_B=(DATAOUT(13)OR(NOT I1)OR I0)AND(DATAOUT(12)OR(NOT I3)OR I2); R1_B=(DATAOUT(13)OR(NOT I0)OR I1)AND(DATAOUT(12)OR(NOT I2)OR I3); R0_B=(DATAOUT(13)OR I1 OR I0)AND(DATAOUT(12)OR I3 OR I2); LDR2=T4 AND DATAOUT(14)AND I1 AND (NOT I0); LDR1=T4 AND DATAOUT(14)AND (NOT I1) AND I0; LDR0=T4 AND DATAOUT(14)AND (NOT I1) AND (NOT I0); LDIR=DATAOUT(15)AND T3; LDAR=DATAOUT(16)AND T3; LDPC=DATAOUT(17)AND T4; LOAD=DATAOUT(18); END PROCESS;END A;微地址转换器F2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY F2 ISPORT(D:IN STD_LOGIC_VECTOR(5 DOWNTO 0);UA5,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC);END F2;ARCHITECTURE A OF F2 ISBEGINUA5=D(5);UA4=D(4);UA3=D(3);UA2=D(2);UA1=D(1);UA0=D(0);END A;微地址转换器F3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY F3 ISPORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);UA7,UA6,UA5,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC);END F3;ARCHITECTURE A OF F3 ISBEGINUA7=D(7);UA6=D(6);UA5=D(5);UA4=D(4);UA3=D(3);UA2=D(2);UA1=D(1);UA0=D(0);END A;3.12 顶层电路单元备注:SF,和LDRF输出是个人用于仿真过失时候参加的,对于机器不影响。3.13 功能仿真与时序仿真如图,输入了五个数:82,01,02,03,FE,最后输出结果02.结果正确。报告总结这个课设,我是从设计汇编程序开场的。和舍友针对程序要求,翻出汇编课本,写出了第一版的程序,然后开场根据课本来写指令系统。随后又根据书上的微指令,抄写了一样的代码,再从网上找到了其他功能的微指令。不过此时对于微指令的数字含义是不知道的。随后,不知道怎么做了,停下了半天。周六晚上通宵,把器件都做好了,并连上了线,周日早上开场研究了一下微指令。接着就是进展波形的模拟仿真。不过发现自己问题很多。随后就是一系列的改动了,从汇编程序开场进展简化,再接着修改微指令,请教了同学微指令的具体意义。最后了解了微指令的具体意义,并一步步调试波形,寻找错误,在周二中午总算完成了课设。其中遇到了一些问题,比方跳转没有实现,MOV没有实现等。通过查看波形图,根据出错的地方,检查机器指令和微指令,最终找到了错误,并完成改正,完成课设。我觉得每次实验或者课程设计的学习,都是对理论课的一次实践,知识的加深。而接下来复习计算机组成原理估计会轻松多了。这次的课设可以说是综合性的,不仅使用了汇编的知识,还有计算机组成原理的知识,更需要个人的设计能力与动手能力。我这次也是花费了非常多的时间来做这个课设,甚至通宵了一晚。感觉是受益匪浅了这次,对以后的学习会有帮助,我深信此点。. v
展开阅读全文