使用logisim设计简易CPU


前言

       或许我们一直有一种疑惑,计算机是怎样运行起来,他是怎样通过处理不同的任务与命令完成人脑不轻易可为的复杂运算,这貌似是一件很神奇的事情。
       其实很早之前就想进行类似的探究,这次的硬件课设正好是一个契机,从最底层的逻辑单元出发,对CPU的运行原理进行深度探究。

1、CPU精简结构

       我们在学习计算机组成原理的时候了解过CPU是由控制单元运算单元这两个主要的功能模块组成,或许细分还有clk时钟、存储器和寄存器组,这些在后文会详细解释,在这里我们只需要知道CPU的主要功能就是运算,于是我们将CPU的功能精简为只剩下加减运算,这样有助于我们对整个过程的演示与理解。
精简的CPU主要包括以下部分:

  • 控制器(Controller)
    协调指挥计算机各部件工作
    • 1、 指令控制器
      指令控制器是控制器中相当重要的部分,它要完成取指令、分析指令等操作,然后交给执行单元(ALU或FPU)来执行,同时还要形成下一条指令的地址。
    • 2、 时序控制器
      时序控制器的作用是为每条指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就是CPU的主频;而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍。
  • 运算器(算术逻辑单元,ALU)
    完成算术运算和逻辑运算
    ALU主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位操作。在某些CPU中还有专门用于处理移位操作的移位器。
    通常ALU由两个输入端和一个输出端。
  • 寄存器组(Regs)
    通用寄存器组是一组最快的存储器,用来保存参加运算的操作数和中间结果。
  • 存储器 (内存,RAM)
    存储程序和数据,实现记忆的功能,内存储器(Memory)也被称为内存,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
  • 指令寄存器(IR)
    这一部分属于控制器,CPU中程序起点是这儿,所以着重强调以下,有助于以下内容理解
    指令寄存器(IR,Instruction Register),是临时放置从内存里面取得的程序指令的寄存器,用于存放当前从主存储器读出的正在执行的一条指令。

1.1 大体框图

以下框图描述了CPU的基本组成以及之间的关系
在这里插入图片描述
红色的为控制线路,蓝色部分为数据传输的通路

2、CPU工作过程

       以下我们先举一个CPU执行加法操作的例子,了解一下CPU的主要工作过程:

  • 总体过程
    首先,CPU从存储器或高速缓冲存储器中取出预存的操作指令,放入指令寄存器,并对指令译码。
    它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。
    在这里插入图片描述
           以上是大体的操作流程,乍一看似懂非懂,没事,接下来我们逐字解析-
  • 汇编语言
    在介绍指令之前先介绍汇编语言。
    是人类所能直接识别的最低层次的语言,也可以说是计算机所能识别的最高层次的语言,人类可以利用汇编语言和计算机交流,让计算机执行各种命令。
    比如在此例加法操作中的汇编代码是:ADD R2,R0,R1
    • 汇编代码 组成:
      • 进行什么操作?(操作类型,功能选择)
        这里的操作类型为执行加法操作ADD
      • 对什么进行操作?(操作结果,目标寄存器)
        这里是对寄存器R2进行操作,或者说目标寄存器是R2
        加之后的结果存放到目标寄存器R2中
      • 操作什么?(操作数)
        这里进行的操作是将寄存器R0和寄存器R1中的值相加,
        或者说源寄存器为R0和R1

       这条汇编代码的执行结果为:$R2=R1+R1,(相加的是寄存器中的数,而不是寄存器本身)

  • 汇编程序
    接下来在汇编语言的基础上介绍汇编程序
    汇编程序(Assembler)――将汇编语言书写的程序翻译成机器语言程序的软件。
    机器其实不能直接识别汇编语言,还需要汇编程序将汇编语言翻译成对应的机器语言,也就是接下要介绍的机器指令
  • 指令
    指令是计算机规定执行操作的类型和操作数的基本命令。
    一条机器指令实际上就是一串二进制序列,
    比如本例中的汇编代码:ADD R2,R0,R1 对应的机器指令就是:
    0001 0000 1000 0100
    这串指令是16位的,每一位都有其特定的含义或者说都代表对应的操作,
    比如说从左往右的3位000 代表的操作就是选择两个寄存器运算的功能
    后面五位1 0000 代表的意思是选择加法操作,后面的功能会在后文详细介绍。
  • 第一阶段:提取
    这些16位的二进制指令实际是存储在RAM或者Cache中的,执行CPU想要执行这个指令,需要将他从RAM中提取出来。由程序计数器(Program Counter)指定存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了CPU在程序里的踪迹。)
    在这里插入图片描述
  • 第二阶段:解码
    CPU根据存储器提取到的指令来决定其执行行为。
    在解码阶段,指令被拆解为有意义的片段。根据CPU的指令集架构定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。
    如本例中的指令为:
    0001 0000 1000 0100
    可以按照不同字段的作用解析为以下格式:
    在这里插入图片描述
    在这里插入图片描述
  • 第三阶段:执行
    经过解码,一条指令可以被解码成很多不同的微指令,这些微指令片段被控制器输出到不同的寄存器,从而控制不同的寄存器操作,完成加法功能。比如在例子中,控制器选择了R0和R1寄存器,并将他们的值送到ALU算术逻辑单元进行加法运算。
    在这里插入图片描述
  • 第四阶段:写回
    完成加法功能之后,运算结果被写入到R2寄存器中。
    运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(Jumps),并在程式中带来循环行
  • 95
    点赞
  • 570
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值