收藏 分销(赏)

计算机组成原理课设文档.docx

上传人:仙人****88 文档编号:12012337 上传时间:2025-08-27 格式:DOCX 页数:28 大小:396.16KB 下载积分:10 金币
下载 相关 举报
计算机组成原理课设文档.docx_第1页
第1页 / 共28页
计算机组成原理课设文档.docx_第2页
第2页 / 共28页


点击查看更多>>
资源描述
第28页 一. 课设题目: 设计一台嵌入式CISC模型计算机(采用定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,实现方法可从以下4类中任选一个: ●连续输入5个有符号整数(8位二进制补码表示,用十六进制数输入),求最大的负数并输出显示。 说明:①5个有符号数从外部输入; ②一定要使用符号标志位(比如说SF),并且要使用为负的时候转移(比如JS)或不为负的时候转移(比如JNS)指令。 二.CISC模型机数据通路框图 操作控制器和 时序产生器 状态条件 寄存器 FC FZ ALU AC DR R0 R1 R2 PC AR ROM IR 具有时间标志的 操作控制信号 输入设备 输出设备 嵌入式CISC模型机 外部时钟 复位信号 三.操作控制器的逻辑框图 … … 指令寄存器IR 操作码 微地址寄存器 地址译码 控制存储器 地址转移 逻辑 状态条件 微命令寄存器 P字段 操作控制字段 微命令信号 说明: 在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。 四.模型机的指令系统和所有指令的指令格式 由此可见,本模型机中的指令系统中共有8条基本指令,下表列出了每条指令的格式、汇编符号和指令功能。 助记符号 指令格式 功 能 IN1 Rd 1 0 0 0 ×× Rd 将数据存到Rd寄存器 OUT1 Rs 1 1 1 1 Rs ×× (Rs)→LED MOV1 Rs,Rd 1 1 0 0 Rs Rd (Rs)→(Rd) CMP Rs,Rd 1 0 1 0 Rs Rd (Rs)-(Rd),锁存FS INC Rd 1 1 0 1 ×× Rd (Rd)+1→Rd MOV Rd,data 1 0 0 1 ×× Rd data data→Rd JMP addr 1 1 1 0 ×××× addr addr→PC JNC addr 1 0 1 1 ×××× addr 若小于,则addr→PC TEST Rd 0 1 1 1 ×× Rd 测试是否 >0,锁存FS 说明:①对Rs和Rd的规定: Rs或Rd 选定的寄存器 0 0 R0 0 1 R1 1 0 R2 ②模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下: 7 6 5 4 3 2 1 0 符号位 尾数 五.所有机器指令的微程序流程图 00 PC→AR PC+1 02 RD M BUS→IR 00 P(1) TEST OUT1 JMP INC MOV1 JNS CMP MOV IN1 07 0F 0E 0D OC 0B 0A 09 08 Rd→BUS BUS→AC Rs→BUS BUS→AC Rs→LED Rd→BUS BUS→AC Rs→BUS BUS→AC PC→AR PC+1 PC→AR PC+1 PC→AR PC+1 SW→BUS BUS→Rd 20 06 00 13 12 04 03 锁存FS 00 00 P(2) ROM→BUS BUS→PC Rd→BUS BUS→DR ROM→BUS BUS→Rd AC+1→BUS BUS→Rd 00 00 00 05 00 AC-DR 锁存FS FS=1 FS=0 00 30 20 ROM→BUS BUS→PC 00 00 设计操作控制器单元(即微程序控制器) (1)设计微指令格式和微指令代码表 CISC模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,P字段为2位,后继微地址为6位,其格式如下: 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 LOAD LDPC LDAR LDIR LDRi RD_B RS_B S1 S0 ALU_B LDAC LDDR WR CS SW_B LED_B LDFR P1 P2 后继微地址 由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:LOAD、LDPC、LDAR、LDIR、LDRi、RD_B、RS_B、S1、S0、ALU_B、LDAC、LDDR、WR、CS、SW_B、LED_B、LDFR。 微地址 微命令字段 P1 P2 后继微地址 000000 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 000010 000010 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 0 1 0 001000 000011 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 0 0 000000 000100 1 0 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 0 0 000101 000101 1 0 0 0 0 1 1 0 1 1 0 0 1 1 1 1 1 0 0 000000 000110 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 1 1 0 0 000000 000111 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 000110 001000 1 0 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 000000 001001 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 000011 001010 1 0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0 0 0 000100 001011 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 1 100000 001100 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 000000 001101 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 010010 001110 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 010011 001111 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 000000 010010 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 000000 010011 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 000000 100000 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 000000 110000 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 000000 (2)设计地址转移逻辑电路 地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。 由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:(µA5的异步置“1”端SE6实际未使用) SE5= FS·P(2)·T4 SE4=I7·P(1)·T4 SE3=I6·P(1)·T4 SE2=I5·P(1)·T4 SE1=I4·P(1)·T4 六.嵌入式CISC模型计算机的顶层电路图 七. 汇编语言源程序 MOV R1,00H 功能:将0赋给R1 MOV R2,80H 将80赋给R2 L1:IN1 R0 输入一个数放入R0 INC R1 将R1加1 TEST R0 测试R0的符号位,锁存FS JNS L1 为正跳转到L1处 CMP R2,R0 (R2)-(R0),锁存FS JNS L1 大于跳转到L1处 MOV1 R0,R2 ( R0)->(R2),锁存FS MOV R0,04H 将04存入R0 CMP R1,R0 累加器(R1)-(R0),锁存FS JNS L2 大于0跳转到L2出输出 JMP L1 否则跳转到L1处 L2:OUT1 R2 输出R2的内容 八.机器语言源程序 助记符 地址(十六进制) 机器代码 机器代码十六进制 MOV R1,00H 00 10010001 91 01 00000000 00 MOV R2,80H 02 10010010 92 03 10000000 80 L1:IN1 R0 04 10000000 80 INC R1 05 11010001 D1 TEST R0 06 01110000 70 JNS L1 07 10110000 B0 08 00000100 04 CMP R2,R0 09 10101000 A8 JNS L1 0A 10110000 B0 0B 00000100 04 MOV1 R0,R2 0C 11000010 C2 MOV R0,04H 0D 10010000 90 0E 00000100 04 CMP R1,R0 0F 10100100 A4 JNS L2 10 10110000 B0 11 00010100 14 JMP L1 12 11100000 E0 13 00000100 04 L2:OUT1 R2 14 11111000 F8 九.机器语言源程序的功能仿真波形图及结果分析 执行MOV R1,0 执行MOV R2,8O 执行IN1 RO 累加器R1+1 TEST RO,锁存FS 执行JNS L1 将88输入到R0 执行CMP R2,R0,比较大小 执行JNS L1 R2<R0,将R0的值赋给R2 执行MOV R0,04 执行CMP R1,R0,看是否输入够了五个数 执行JNS L2,够5个数跳转 执行JMP L1,跳转到L1处继续输入 执行IN1 R0,输入数据 INC R1,R1累加1 当R1累加到5后 够五个数跳转到L2 执行OUT1,R2,输出R2 执行CMP R1,R0 输出为99 十.故障现象和故障分析 故障1: 在进行仿真的时候,输入完一个数后程序执行到最后应该跳转到前面执行第二次输入,但我的仿真结果确实直接就跳到最后输出的那一步啦,刚开始以为是自己的跳转微指令写错啦,但经过检查没有发现错误,然后我又检查了ROM里面的代码,也没有发现错误,就在自己非常郁闷的时候,我的同学告诉我,应该把读取指令周期中P1测试前的08改成00,这样在P1测试后才能进行正常的跳转,后来我一该,果然好了。 故障2: 仿真完了之后没有输出,后来经过老师的帮助才知道自己把微命令写错啦,真是太大意啦。 故障3: 自己修改了 ALU单元里面的内容,然后进行了覆盖,结果仿真完之后还是错啦,然后自己仔细检查自己修改的代码,也没有错误,后来问同学才知道,在修改完之后还要进行整体的编译,没有错误之后才能进行仿真。 十一.心得体会 刚开始接触到这个课设的时候,自己完全傻了眼,看着老师在PPT上演示那些复杂的电路图,自己顿时感到前所未有的压力,刚开始做的时候自己都不知道从哪里学起,真的是老虎吃天—无处下爪啊!后来我自己想了想,我知道自己的基础不行,所以决定先从最基础的看起,我先把计算机组成原理课本上的跟课设有关的内容全都看了一边,看完之后觉得自己对课设有了基本的认识,终于知道要从哪里做起,然后自己又反复的看课设书上的例子,从刚开始的看不懂,到后来的了解,再到后来的深入理解,中间有不懂的地方就和同学一起讨论,然后在问老师,看看自己的理解是否正确,这样就更加深了自己印象,通过几天下来的学习,自己终于知道课设的具体步骤,以及如何实现,先从汇编语言开始,根据老师给的题目来写汇编代码,然后再设计自己的指令格式,设计完之后就要开始写流程图啦,再根据自己的流程图写微指令,然后在制做各个单元,再到最后的连线仿真,在经过一个礼拜的努力之后,自己终于完成了这次的课设,内心真的蛮激动的!这次课设让我学到了很多,任何一件事情看着很难,但当自己付诸实际行动的时候,你就回发现原来它只是一张纸老虎,只要肯努力,你就回成功! 十二.软件清单 1. 运算器和状态条件寄存器单元 a. ALU单元 S1 S0 功能 0 0 TEST测试,锁存FS 0 1 (AC)-(DR),锁存FS 1 0 (AC)+1 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 DOWNTO 0) ; SF: 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 IF(S1='0' AND S0='0') THEN--TEST SF<=A(7); ELSIF(S1='0' AND S0='1') THEN --CMP(SUB) BCDOUT<=A-B; IF(A>B) THEN SF<='0'; ELSE SF<='1'; END IF; ELSIF(S1='1' AND S0='0') THEN --ADD+1 AA<='0'&A; TEMP<=AA+1; BCDOUT<=TEMP(7 DOWNTO 0); SF<=TEMP(8); END IF; END PROCESS; END A; b. 状态条件寄存器单元 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LS74 IS PORT( LDFR: IN STD_LOGIC; SF: IN STD_LOGIC; FS: OUT STD_LOGIC ); END LS74; ARCHITECTURE A OF LS74 IS BEGIN PROCESS(LDFR) BEGIN IF(LDFR'EVENT AND LDFR='1') THEN FS<=SF; END IF; END PROCESS; END A; c.暂存器存储单元 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_LOGIC_VECTOR(7 DOWNTO 0) ); END LS273; ARCHITECTURE A OF LS273 IS BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN O<=D; END IF; END PROCESS; END A; 2. 通用寄存器单元 3个通用寄存器(R0、R1、R2、)以及ALU输出的外部控制信号如下表中所示: R0_B R1_B R2_B ALU_B 功能 1 1 1 0 输出ALU的结果 0 1 1 1 输出(R0) 1 0 1 1 输出(R1) 1 1 0 1 输出(R2) 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_LOGIC_VECTOR(7 DOWNTO 0) ); END LS273; ARCHITECTURE A OF LS273 IS BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN O<=D; END IF; END PROCESS; END A; 3.1:2分配器单元 1:2分配器用来将ALU的运算结果或通用寄存器的内容经3选1多路选择器送到数据总线,或者将ALU的运算结果或通用寄存器的内容送往输出设备显示。功能如下表所示。 输入 输出 WR LED_B X[7..0] W1[7..0] W2[7..0] 0 0 X X[7..0] 其它取值 X X[7..0] X LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FEN2 IS PORT( WR,LED_B:IN STD_LOGIC; X:IN STD_LOGIC_VECTOR(7 DOWNTO 0); W1,W2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END FEN2; ARCHITECTURE A OF FEN2 IS BEGIN PROCESS(LED_B,WR) BEGIN IF(LED_B='0' AND WR='0') THEN W2<=X; ELSE W1<=X; END IF; END PROCESS; END A; 4. 3选1数据选择器单元 输入 输出 SW_B CS ID[7..0] N1[7..0] N2[7..0] EW[7..0] 0 x x x x ID[7..0] 1 0 x x x N2[7..0] 1 1 x x x N1[7..0] 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 DOWNTO 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<=N1; END IF; END PROCESS; END A; 5. 4选1数据选择器单元 输入 输出 C D E F W[7..0] 0 1 1 1 X1[7..0] 1 0 1 1 X2[7..0] 1 1 0 1 X3[7..0] 1 1 1 0 X4[7..0] LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX4 IS PORT( 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 IS SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN SEL<=F&E&D&C; PROCESS(SEL) BEGIN -- CASE SEL IS -- WHEN "1110"=> -- W<=X1; -- WHEN "1101"=> -- W<=X2; -- WHEN "1011"=> -- W<=X3; -- WHEN "0111"=> -- W<=X4; -- WHEN OTHERS => -- NULL; --END CASE; 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 --ALU_out W<=X4; ELSE null; END IF; END PROCESS; END A; 6.程序计数器单元 CLR LOAD LDPC 功能 0 x x 将PC清零 1 0 BUS->PC 1 1 0 不装入,也不计数 1 1 PC+1 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: 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 IS SIGNAL QOUT: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(LDPC,CLR,load) BEGIN IF(CLR='0') THEN QOUT<="00000000"; ELSIF(LDPC'EVENT AND LDPC='1') THEN IF(load='0') THEN QOUT<=D; --BUS->PC ELSE QOUT<=QOUT+1; --PC+1 END IF; END IF; END PROCESS; O<=QOUT; END A; 7. 地址寄存器单元 8. 主存储器单元 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 IS BEGIN DOUT<="10010001" WHEN ADDR="00000000" AND CS='0' ELSE "00000000" WHEN ADDR="00000001" AND CS='0' ELSE "10010010" WHEN ADDR="00000010" AND CS='0' ELSE "10000000" WHEN ADDR="00000011" AND CS='0' ELSE "10000000" WHEN ADDR="00000100" AND CS='0' ELSE "11010001" WHEN ADDR="00000101" AND CS='0' ELSE "01110000" WHEN ADDR="00000110" AND CS='0' ELSE "10110000" WHEN ADDR="00000111" AND CS='0' ELSE "00000100" WHEN ADDR="00001000" AND CS='0' ELSE "10101000" WHEN ADDR="00001001" AND CS='0' ELSE "10110000" WHEN ADDR="00001010" AND CS='0' ELSE "00000100" WHEN ADDR="00001011" AND CS='0' ELSE "11000010" WHEN ADDR="00001100" AND CS='0' ELSE "10010000" WHEN ADDR="00001101" AND CS='0' ELSE "00000100" WHEN ADDR="00001110" AND CS='0' ELSE "10100100" WHEN ADDR="00001111" AND CS='0' ELSE "10110000" WHEN ADDR="00010000" AND CS='0' ELSE "00010100" WHEN ADDR="00010001" AND CS='0' ELSE "11100000" WHEN ADDR="00010010" AND CS='0' ELSE "00000100" WHEN ADDR="00010011" AND CS='0' ELSE "11111000" WHEN ADDR="00010100" AND CS='0' ELSE "00000000"; END A; 9. 指令寄存器单元 10. 时序产生器单元 输入 输出 备注 Q CLR T1 T2 T3 T4 当CLR变为1且Q的上升沿到来时,T1为1,T2—T4为0 x 0 0 0 0 0 1 循环右移1次 在当前值的基础上 LIBRARY IEEE; USE 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';
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服