logo资料库

简单CPU设计实践_使用LogiSim设计CPU.pdf

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
神秘是一种我们能够体验到的最美丽的东西。 它是所有真正艺术和科学的源泉。 ——阿尔伯特.爱因斯坦 简单 CPU 设计实践 King-Duan 本文通过一个简单的 CPU 模型设计,阐述 CPU 设计 过程中的一些原理和经验。 左家垅职业技术学院 岳麓山 158157488@qq.com 2014/10/25
简单 CPU 设计实践 目录 开始前的话 ............................................... 3 总体组成 ................................................. 3 运算器 ................................................... 3 补码........................................................................................................................................... 3 算术单元 ................................................................................................................................... 4 逻辑单元 ................................................................................................................................... 5 算术逻辑单元 ........................................................................................................................... 6 移位器....................................................................................................................................... 7 运算器综合 ............................................................................................................................... 8 溢出判断 ................................................................................................................................... 9 运算器设计的总结和补充 ..................................................................................................... 11 寄存器组 ................................................ 11 注意事项 ................................................................................................................................. 11 使能端..................................................................................................................................... 12 构建寄存器组 ......................................................................................................................... 12 控制器 .................................................. 13 程序计数器 ............................................................................................................................. 14 指令寄存器 ............................................................................................................................. 14 数据通路设计 ......................................................................................................................... 14 控制字..................................................................................................................................... 15 指令译码器 ............................................................................................................................. 16 状态寄存器 ............................................................................................................................. 18 控制器综合 ............................................................................................................................. 18 CPU 综合 ................................................ 19 封装......................................................................................................................................... 19 指令周期和机器周期 ............................................................................................................. 21 编译器开发 .............................................. 23 结束语 .................................................. 24 参考资料 ................................................ 24 2
简单 CPU 设计实践 开始前的话 本人大学党一个,计算机科学与技术专业,平时对电子技术、计算机科学和软件技术有 所研究,在此只是分享一些自己平时学习、游戏中的电子和计算机科学方面的经验,希望能 够给同样学习中的人带来启发,另外如果有任何意见、建议、批评,欢迎提出来。 由于对于大部分学电子和信息的同学来说,数电已能熟练掌握,所以在此略过数电的知 识,如果对数电有些不明白的,可以参考其他数电教程。 本教程开始之前要求至少要掌握:基本逻辑门、组合逻辑电路分析设计方法、译码器、 编码器、数据选择器、比较器、加法器、三态门、基本触发器、锁存器、寄存器、移位寄存 器、计数器。 在这里采用的工具是 Logisim,这是一个较为简易的仿真工具,不会涉及具体的芯片, 而是纯粹从原理的角度来分析仿真,对于简单的 CPU 仿真最合适不过了。 此外,本人水平有限,文中难免出现纰漏和错误,欢迎指出! 这里会从零开始,一步一步搭建电路,阐述原理,最终实现一个类似 MIPS 架构的 CPU。 另外我会采用尽可能简洁的语言。 总体组成 CPU 一般包括寄存器组、运算器和控制器。 另外对于现代的 CPU,大都配置了 Cache。 首先,让我们来构造运算器 运算器 一般简单 CPU 实现的运算操作有算术运算、逻辑运算和移位。算术运算主要包括加法、 减法、曾 1、减 1 等,逻辑运算主要包括与、或、非、异或,移位实现左移右移或者不变。 算术运算器实际上就是一个加法器和其他几个运算的结合体,那么减法怎么办呢? 补码 众所周知,A-B=A+(-B),就这样,减法就转换成了加法,那么负数怎么表示?答案是 用补码! 实际上为了方便,我们把参与运算的数都用补码表示,定义正数和零的补码为本身,负 数的补码为其反码加一(反码就是按位取反)。 3
简单 CPU 设计实践 补码表示的时候,正数、零和负数可以很方便区分出来,最高位为 0,则为正数或零, 最高位为 1,则为负数。 不过在这里,我们还需要对运算结果按 2^n 取模(n 为位数),写成通式就是这样: [A-B]补=([A]补+[-B]补)mod 2^n,(A、B>=0) 其实 mod 2^(n+1)的意思就是舍弃最高位的进位。 举个例子,如果要计算八位二进制运算 5-3,可以这样做: [5]补=5=00000101B, [-3]补=[3]反+1=[0000011]反+1=11111100B+1=11111101B 然后做加法运算 如果第一个是负数呢?情况也一样的,因为加法满足交换律,加法器的两个输入端也是 对称的。 如果小数减大数呢?例如 15-35(八位字长): [15-35]补=([15]补+[-35]补)mod 2^8=(00001111B+11011101B)mod 2^8=11101100B=[-20] 补 由此可以看出,当用补码表示整数的时候,加减法可以统一为加法运算。 算术单元 有了以上的理论就可以构造算术单元啦~ 实际上,两数相减时,还需要对第二个数求补码,求补的话,至少需要求反,另外我们 不仅仅需要加法、减法,还需要增 1、减 1。增 1 可以通过低位进位端实现,减一可以通过 加负一的补码实现,也就是加全一, 所以综合以上,还需要在输入端加一个实现取反、全 0、全 1 或保持原样的模块。 取反可以用非门实现,然后用数据选择器选择不同的通路,即可实现上述功能。 4
简单 CPU 设计实践 一个简单的 4 选一数据选择器和一个加法器就构建出了一个算术单元,神奇吧! 其中的 A 和 B 是 8 路数据输入,S1、S0 和 Cin 进行功能选择,右侧输出结果。 实现的功能表很容易写出来: 逻辑单元 那么接下来就是逻辑单元了 逻辑单元最简单了,与或非和异或就够用了吧! 原理还是一样的,由两路信号输入,通过选择功能,输出结果! 原理图 So easy! 功能表 So easy! 5
算术逻辑单元 简单 CPU 设计实践 接下来就是最最最重要的 ALU 即算术逻辑单元了 说白了就是把算术单元和逻辑单元组合起来~ 分析:算术逻辑单元要实现的功能是对 A 和 B 进行特定操作,而进行哪种操作是需要 选择的,所以输入端 A、B 和功能选择端是应该共用的,对于输出端,应该对算术和逻辑两 者进行选择。 ALU 电路~ 功能表~ 6
移位器 简单 CPU 设计实践 除了算术和逻辑运算,我们通常还需要一种移位运算,在这里,因为速度要求很高,且 不需要暂存,所以不采用移位寄存器,而是用组合逻辑电路的移位器。 移位的原理是使用不同的接线,错位 N 位就实现了移动 N 位,所以需要用到数据选择 器。 对于一次一位的移位,只需要用二选一数据选择器。 如果需要双向移动,则需要四选一。 如果要一次移多位的话,需要用到桶形移位器,其复杂度会大大增加。 八位桶形向左移位器 可以一次移动 0~7 位 7
需要注意的是连线 简单 CPU 设计实践 运算器综合 在以上各个部件的基础上,就能组成一个运算器了,当然这样的运算器还很简单,不过 基本的运算能够满足了。 8
分享到:
收藏