1、 课 程 设 计课程名称: 计算机组成原理 设计题目: 一个非常简单的 CPU 的设计 学 院: 信息工程与自动化 专 业: 计算机科学与技术 年 级: 08 级 1 班 学生姓名: 张桥 指导教师: 李凌宇 日 期: 2010-9-9 教 务 处 制 课 程 设 计 任 务 书信息工程与自动化 学院 计算机 专业 08 1 年级学生姓名: 张桥 课程设计题目: 一个简单的 CPU 的设计 课程设计主要内容:设计一台完整的计算机。首先要确定该计算机的功能和用途。在设计中根据功能和用途确定指令系统,定义数据通路,设计每条指令的执行流程,要求利用微程序进行设计,每人至少要求 4 条 CPU 指令,
2、可以自己选择;在设计中要求画出指令系统的格式并说明各位的意义;要求画出数据通路并定义微操作信号;要求画出微程序流程图。设 计 指 导 教 师 (签字): 教学基层组织负责人(签字): 年 月 日一台模型计算机的设计一、教学目的、任务与实验设备融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,加深计算机工作中“时间空间”概念的理解,从而清晰地建立计算机的整机概念。二、数据格式和指令系统本模型机是一个 8 位定点二进制计算机,具有四个通用寄存器:R 0R 3,能执行 11 条指令,主存容量为 256KB。1 数据格式数据按规定采用定点补码表示法,字长
3、为 8 位,其中最高位(第 7 位)为符号位,小数点位置定在符号位后面,其格式如下:数值相对于十进制数的表示范围为:1X 12 72 指令格式及功能由于本模型机机器字只有 8 位二进制长度,故使用单字长指令和双字长指令。 LDR Ri ,D格式 7 4 3 2 1 00 0 0 0 Ri 不 用D功能:RiM(D)(2) STR Ri,D格式 7 4 3 2 1 00 0 0 1 Ri 不 用D功能:M(D)(Ri)(3) ADD Ri,Rj格式 7 4 3 2 1 00 0 1 0 Ri Rj功能:Ri ( Ri) (Rj)(4) SUB Ri,Rj格式 7 4 3 2 1 00 0 1 1
4、 Ri Rj功能:Ri ( Ri) (Rj)(5) AND Ri,Rj尾 数符 号7 6 5 4 32 1 0尾 数符 号 尾 数尾 数符 号格式 7 4 3 2 1 00 1 0 0 Ri Rj功能:Ri ( Ri) (Rj)(6) OR Ri,Rj格式 7 4 3 2 1 00 1 0 1 Ri Rj功能:Ri ( Ri) (Rj)(7) MUL Ri,Rj格式 7 4 3 2 1 00 1 1 0 Ri Rj功能:Ri ( Ri) (Rj)(8) 转移指令格式 7 4 3 2 1 00 1 1 1 条件 不 用D功能: 条件码 00 无条件转移 PC D01 有进位转移 PC D10 结
5、果为 0 转移 PC D11 结果为负转移 PC D IN Ri,M j格式 7 4 3 2 1 01 0 0 1 Ri Mj其中 M j 为设备地址,可以指定四种外围设备,当 M j=01 时,选中实验箱的二进制代码开关。功能: Ri (M j) OUT Ri,M j格式 7 4 3 2 1 01 0 1 0 Ri Mj当 M j=10 时,选中实验箱的显示灯。功能: (M j) R i HALT(停机指令)格式 7 4 3 2 1 01 0 1 1 不用 不用功能:用于实现停机。 三、总体设计总体设计的主要任务是(1) 选定 CPU 中所使用的产要器件;(2) 根据指令系统、选用的器件和设
6、计指标,设计指令流的数据通路;(3) 根据指令系统、选用的器件和设计指标,设计数据流的数据通路。计算机的工作过程,实质上是不同的数据流在控制信号作用下在限定的数据通路中进行传送。数据通路不同,指令所经过的操作过程也不同,机器的结构也就不样,因此数据通路的设计是至关重要的。所谓数据通路的设计,也就是确定机器各逻辑部件相对位置的总框图。数据远路的设计,目前还没有非常标准的方法。主要是依据设计者的经验,并参考现有机器的三种典型形式(单总线、双总线或三总线结构) ,根据指令系统的要求,可采用试探方法来完成。其主要步骤如下:(1) 对指令系统中的各条指令进行分析,得出所需要的指令周期与操作序列,以便决定
7、各器件的类型和数量。(2) 构成一个总框图草图,进行各逻辑部件之间的互相连接,即初步确定数据通路,使得由指令系统所包涵的数据通路都能实现,并满足技术指标的要求。(3) 检验全部指令周期的操作序列,确定所需要的控制点和控制信号。(4) 检查所设计的数据通路,尽可能降低成本,简化线路。以上过程可以反复进行,以便得到一个较好的方案。图 1 给出了一个没有考虑乘法除法指令操作的总框图参考方案,注意,在此方案确定之后,应该检查所选用的各个器件是否满足数据通路的要求。实际上,数据通路的设计与器件的选择应同时进行而不能分离地工作。其次,接入总线的器件都要有三态输出,以便与总线连接。另外,在信息传送过程中应当
8、注意器件原码和反码输出的配合关系。图 1 所示的方案采用单总线结构,使用的许多器件都是三态输出,这种方案便于总线的连接和扩展,但缺点是指令和数据的传送都要经过总线,因此对总线的使用权就要分配得当。另外,执行算术逻辑指令时,先将第一个操作数由通用寄存器 Ri 送至缓冲寄存器 DR1,然后再由通用寄存器 Rj 取第二个操作数送至缓冲寄存器 DR2,之后送往 ALU 进行运算。显然,执行条算术逻辑指令的时间相应要长一些。IRPCAR微 程 序 控 制 器 时 序产 生 器RAM2568LDLDPLDIRDWELDPC BUSDR2DR1LDR0 I/O R3R2R1 LDLDLDLLALUALU B
9、SBUSS21 M-130微 程 序 控 制 器 时 序产 生 器微 程 序 控 制 器 时 序产 生 器微 程 序 控 制 器 时 序产 生 器微 程 序 控 制 器 时 序产 生 器图 1 模型机数据通路框图四、微程序控制器数据通路框图旦确定,指令流与数据流的通路也就随之最后确定,因而运算器和控制器的大部分结构也就确定下来了。图 1 中各功能器件上还标注了控制点及其控制信号这些控制信号就是微程序控制器进行设计的依据。1微指令格式微指令格式建议采用水平型微指令,微命令编码采用直接表示法和分段直接译码法相结合的混合表示法,以缩短微指令长度。后继地址采用断定方式。微指令格式如下:控制字段 判别字
10、段 下址字段同学们应根据本模型的具体情况来确定各字段的长度。2 微程序控制器根据微指令和微程序的长度,确定控制存储器需选用几片 EPROM(2716)用位扩展方式组成。3微程序设计将机器的全部指令系统采用微指令序列实现的过程,叫做微程序设计。一条机器指令对应一个微程序,11 条机器指令应当对应 11 个微程序。微指令格式确定后,微程序的横向设计在于正确地选择数据通路,纵向设计在于确定后继微指令地址事实上,微程序设计的关键在于纵向设计,即如何确定下一条微指令的地址。通常的做法是先确定微程序分支处的微地址,因为微程序分支处需要进行判别测试。这些微地址确定以后,就可以在一个“微地址表”中把相应的微地
11、址单元填进去,以免后面的设计中重复使用而未发现,以致造成设计错误。五、输入输出输入输出是人机联系的重要手段,输入可采用开关、键盘等方式,输出可采用字符显示或打印输出等方式。考虑到成本与设备因素,本模型机采用最简单的二进制开关输入和发光二极管显示的方法,换句话说,本模型机中只使用两种“外部设备”:一种是二进制代码开关,它作为输入设备;另一种是发光二极管,它作为输出设备。本设计为了节省器件,输入输出时可以不设置专门的数据缓冲寄存器。例如输入时,二进制开关数据直接经过三态门送到总线上,只要开关状态不变,输入的信息也就不变。输出时,将输出数据送到数据总线 BUS 上,驱动发光二极管进行显示。如果采用正
12、规的输入输出方法,可采用相应的器件构成接口电路。实习经验首先因设计出 ALU 计算器模块、 R4R0 零时寄存器选择模块、数据通路模块、存储器模块、计数器模块,最后在根据之前设计所需的信号与结果设计安排 cpu 控制模块,这样的设计思路清晰,省时省力。而我在实验室采取了完全相反的步骤,先设计了 cpu 控制模块,最后根据控制模块设计其他模块,使得其他模块无法正常匹配 cpu 模块,不断地修正 cpu 模块,前后重写代码 4 次之多严重影响了试验进程。此经验教训应当谨记。试验步骤:实验步骤会按照正确的顺序进行,即将 cpu 控制模块的设计放在最后,先说明其他模块的设计。ALU 计算模块:设计思想
13、:预算模块要求 5 种运算,并且运算数据要求补码表示范围在1X12 7先将 AND 运算和 OR 运算的电路图做出来,这个比较简单:运算:OR 运算:接着是加减法器的设计。加减法器:设计思想:符号浮点数的加减法与符号幅值的加减法相似,但两个有重要区别,首先由于有几个需要特别表示,因此浮点数加法算必须明确地检测出操作数的是否为 0,正负无穷,或 NaN(not a number) ,移位,对齐,相加减的方法能处理大部分浮点数的加减法。但它只能对规格化的浮点数进行处理,当操作数为 0,正负无穷,或 NaN 时,浮点数算法必须作特殊处理。所以,我们可以从符号加减法器开始,然后对结果进行修改,使之成为
14、符号浮点加减法器。但是后来发现 maxplusII 中有加减器的运算模块,设置好初值后可以直接拿来使用,原件及具体设置如下:原件:初值设置:只有三处需要设置:打开 cout 输出。LPM_RERERSENTATION=”SIGNED”表示操作数为符号数。LPM_WIDTH=8表示操作数为 8 位。有符号8 位操作数 Cout 有效乘法器设计:同样在 maxplusII 中找到了乘法器原件,设置初值后便可直接使用。具体设置及如下:需要改动的地方有三处:LPM_REPRESENTATION=”SIGNED”设置运算为符号赋值运算。LPM_WIDTHA=8输入操作数 A 为 8 位。LPM_WIDT
15、HB=8输入操作数 B 为 8 位。LPM_WIDTHS=16输出结果为 16 位,此处的值必须与输入值相匹配。由于该 cpu 只显示 8 位值,所以我只取成法器输出结果的高 8 位结果。有符号运算有符号运算位操作数位输出结果必须与操作数相匹配最终 ALU :由于设计的需要,必须在每次预算执行前对运算方式进行存储,这样可以节省 8 个重复的 cpu状态,同时,为了选择正确的结果输出,需要一个选择器进行筛选。在 maxplusII 中发现多路选择器件 LPM_MUX,设置初值后可以直接取用;电路及初值设置如下:LPM,_MUX 初值设置:LPM_SIZE=44 路输入选择LPM_WIDTH=8运
16、算方式存储器结果选择器运算器位结果输出路输入选择8 位结果输出数据通路模块:数据通路模块的作用是控制数据在总线上的传输,包括个寄存器的载入、释放,ALU 运算器操作数输入、结果的输出等部分R4R1 选择模块:选择模块的功能在这个实验中很重要,其可以大量减少 cpu 控制模块的状态设置,选择器最基础的功能有根据指令的要求确定特定的临时寄存器的释放和载入。同时根据设计的需要,还要有存储备选数据的能力,避免被总线的上的数据影响最终的选择结果。设计思路:有四个临时寄存器,可以由两位决定二进制值决定各个寄存起的编号,可由 24 译码器实现此功能。选择器要能起到选择正确顺序是临时寄存器工作的作用,所以要有
17、控制端控制第一顺序操作的临时寄存器和第二时间操作的临时寄存器(该 cpu 对寄存器的操作最多只有两个操作步) 。最后要决定对所选的临时寄存器是载入还是释放,或者既不载入也不释放。根据这一思路设计的选择模块如下:载入选择:释放选择:存储预选值 选择寄存器操作顺序选择 是否进行操作选择 置有效设计思路:根据试验的要求,数据通路需要一个 ALU 运算模块,两个数据寄存器,其功能是保存操作数并将得到的操作数直接送入 ALU 预算模块进行预算。 4 个零时寄存器 R4R1,一个数据选择模块,控制外部数据输入的计数器。设计图下:置有效存储器模块: 存储器模块的作用即存储程序指令和程序需要的各项数据,以及在
18、恰当的时机读出个指令和数据。包括一个 PC 计数器(program counter)一个 AR 寄存器(adress register) ,一个内存芯片(LPM_RAM_IO) 。ALU 模块 数据总线数据总线ALU 模块数据寄存器临时寄存器临时寄存器临时寄存器载入选择 释放选择外部数据输入设计思路:CPU 要依照指令顺序执行相应程序,在内存中,指令按照顺序配列存储在相应内存单元中,每执行完一条指令,PC 自动加一,将地址数据送给 AR, RAM 取得 AR 中的地址数据,放出相应地址的指令或操作数。读取指令按此步骤循环。PC 可以用 74161 计数器完成其功用,由 74244 控制器数据在
19、争取的时间传给 AR,AR 可用 74273 制作,只用于存储 RAM 中的下一指令或操作数的内存地址。内存由 LPM_RAM_IO 设置初值后制作完成。LPM_RAM_IO 设置:LPM_FILE=”内存数据,可以将程序写进.mif 文件,然后在此设置相应.mif 文件的地址则可以在内存中读取该文件LP,M_NUMWORDS=256内存容量大小,实验要求 256KLPM_WIDTH=8数据显示位宽LPM_WIDTHAD=8地址显示位宽电路设计图:地址数据输入内存数据内存大小数据位宽地址数位宽写实能读实能时钟信号 RAMARPC 计数器 各输入管脚 各输出管脚 PPC-ARPC+1RAM-Ri
20、ARARPC+1Ri-MARARPC+1PC+1PCARPC+1RAM-RiARARPC+1RAM-RiARRiARARPC+1PC+1PCOUT;B“00000“ =B“010010000000000010000000001“;-SW-PC 1%B“00001“ =B“100010000000000111000000010“;-PC-AR PC+1 2%B“00010“ =B“110010000000010010011010000“;-RAM-IR% %CHUSHI 3%B“10000“ =B“010010000000000010000000110“;%CLCTB“1000100000000
21、00111000010011“;%ARB“110010000000010110000010110“;%ARB“111010000010010010000000001“;%MB“010010000000000010000000110“;%CLCTB“100010000000000111000011111“;%ARB“110010000000010110000011011“;%ARB“110110000100001010000000001“;%RiB“010010000000000010000000111“;%ALU_SB“110111111101000010000000011“;%DR1B“11
22、0111110100100010000010111“;%DR2B“111001110010000010000000001“;%RiB“110110111101000010000000011“;%DR1B“110110011101000010000000011“;%DR1B“110110101101000010000000011“;%DR1B“110110001101000001000000011“;%DR1B“100010000000000111000100101“;%ARB“110010000000010000000000001“;%PCB“1100100000000000110000000
23、01“;%PC+1% %JUMP 19%B“11001“ =B“010010000000000010000001010“;%CLCTB“011010000000000010000000001“;%RiB“010110000000000010000010001“;%CLCTB“010110000000000010000000001“;%MiB“110010000000000010100000001“;%STOP(SW_BUS,PC_BUS,R_LOAD,R_BUS,ALU_BUS,A_S,S1,S0)=OUT2619;(S_EN,CB,CL,LDDR1,LDDR2,RD,WE,ARLD,PCLO
24、AD,PCINC,STOP,IRLD,P,P1,AD4,AD3,AD2,AD1,AD0)=OUT180;END;跳转条件电路:跳转条件电路要求在符合跳转条件时,更改下址,改变为操作,完成跳转。设计思路:跳转与不调转的下址只有一位不同,只要条件满足,只需更改那一位下址代码即可。首先跳转条件有四种,跟据条件转为信号可以用 24 译码器实现。然后通过逻辑电路实现选择确定跳转。设计电路:控制模块总图:最终总图:时序电路跳转判断寄存器显示模块数据通路模块控制器模块实验总结这次 CPU 设计实验是一台模型机的设计 . 此模型机是个八位定点二进制计算机,具有四个通用寄存器:R0R3,能执行 11 条指令,主
25、存容量为 256B。数据格式是定点补码表示法,字长为八位,其中最高位为符号位,小数点位置定在符号位后面。目的是综合运用前面所学内容,加深对计算机系统各模块的工作原理及相互联系的认识,取得工和设计与组装调试的实践和经验.模型机可划分为如下四个相对独立的功能模块:运算器、存储器和系统总线;时序产生器;微程序控制器;显示模块,然后一一设计完成。这次实验微程序控制部分和数据通路部分有很大改进,设计通路时要用四个寄存器,微程序模块也做了相应的改变.指令码用了 25 位,要实现 11 条指令.这是比较关键的,也比较复杂,需要耐心细致地写好 VHDL 语言.调试的过程再慢慢修改出错的地方.实习教训:试验中出
26、现的错误很多,最严重的错误是先设计了总控制器,然后再设计其他电路,这样的做法让我走了很多弯路,不停的在控制器与数据通路模块之间修改徘徊,控制其模块修改了不止 4 次,数据通路模块不止一次的重写,重新编译。从本次试验中我明白的不仅仅是专业知识,更深刻的体会到,正确的设计步骤与设计理念对一个设计进程的严重影响。不仅仅在设计上,再很多其他的方面也是如此。任何事情都要有一个争取的规划,争取的方向,不可以走任何的捷径,没有不回跑就会飞的奇迹出现。结束语试验已经完成,但在试验中的很多问题仍然在脑中徘徊。试验中得到很多同学的帮助,大家在一起认真讨论,仔细判断各个信号的作用,分析各个模块的逻辑电路组成。这次对比各自模块的优劣,充分体现了共同学习,共同进步的精神。从本次实践我还领悟到只有将所学知识真正应用到实际操作中,才能更好地掌握,才能不断发现自已存在的问题,从而不断进步.