一个时钟周期执行一条指令的过程理解(单周期CPU)

引言

离2019考研只剩19天不到了,回顾专业课的时候又发现了一些不明白的地方,我觉得有必要把想通的思路整理记录下来。万一·····二战的时候还能用得着呢?
教材的指令系统那一章是这样告诉我的:指令有指令周期,分取指周期(IF)和执行周期(EX),这两个大的周期内部又有很多微操作,比如PC送MAR,PC+1等等这种,一个微操作至少一个时钟周期,图画的明明白白解释的很清楚。
无描述
我一直以来都认为,指令是由一系列微操作实现的,执行一个微操作至少一个时钟周期,那么执行一条指令肯定得好几个时钟周期,时钟周期需要满足执行最久的微操作,那么整个指令的执行时间就是微操作执行时间的加总。学到处理器那章之后才发现不是这样的,一个时钟周期完全可以执行一条指令!也就是单周期处理器

正文

首先要知道单周期处理器只是CPU一种实现方式,并且由于效率太低,现代设计中并不采用这种方式。虽然CPI=1,但它的总体性能不好——因为时钟周期取决于执行时间最久的那条指令(一般就是取数指令),而这个时间实在是···太久了。

下面结合它的数据通路我来捋一捋:
假定所有的状态单元(图中的PC,指令存储器,数据存储器,寄存器)都是上升沿触发的,

数据通路图

假设现在时钟处于低电平阶段。在这段时间内可以进行读数据、地址计算等操作,但就是不能往任何状态单元里写数据。

若当前执行的指令是取数指令,那么在低电平时间段内发生的事情有:

  1. 从指令存储器取指,译码,ALU负责PC的自增(注意,现在还没有迎来上升沿,故新的PC值“”在了PC的写端口进不去)
  2. 从寄存器堆读出基址寄存器的值
  3. ALU将基址寄存器的值与指令中进行符号拓展后的address字段(图中的指令[15-0])相加
  4. ALU的结果作为数据存储器的地址,由数据存储器读出相应数据,送往寄存器堆写数据端口(上升沿还没来,数据“堵”在外面进不去)

好,现在上升沿终于到了!在它到来的那一刻,PC和寄存器的写端口同时打开!堵在外面的数据终于一拥而上!
在时钟处于高电平的期间 ,PC完成了自增,从数据存数其取出来的数据也终于写入了寄存器!
过了不久这一切都稳定了下来,下降沿如期而至,写端口咔嚓一声全部关闭···
轮回又从新时钟周期的低电平开始····

看,这就是一个时钟周期执行一条指令的过程,我就是这样理解的,仅供参考?

这段写的好羞耻

附注:

关于单周期数据通路必须有独立的指令存储器和数据存储器的原因:
书上原话,不过我不能理解这种说法。就算是共用一个存储器又怎么了?真是想不明白

因为处理器在一个周期内只能操作每个部件一次,而在一个周期内不可能对一个单端口存储区进行两次存取

关于不能使用单总线数据通路的原因:
如果是单总线结构,那么就拿本文里的例子来说,lw取数指令需要写2次,一次是PC,一次是寄存器。如果共用一根片内总线必然需要分2次传输!

稍微解释一下:因为传给PC的值与从数据存储器取出的数据是不同的两组数据,而总线上一次只能传输其中一种,所有接到总线上的部件共享这组数据自行取用,所以为了保证数据各得其所必须分2次

这对单周期CPU来说,这就变成不可能完成的指令了。以上
在这里插入图片描述
一个观点:所有的状态单元写端口一直都堵着数据,然而只有上升沿来到,状态单元才开始接纳这些数据
PS:《计算机组成与设计:硬件/软件接口》 这本书很好看,图就是这里面的。

  • 60
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
一、 设计目标 设计目的: 设计一个含有36条指令的MIPS单周期处理器,并能将指令准确的执行并烧写到试验箱上来验证 设计初衷 1、理解MIPS指令结构,理解MIPS指令集中常用指令的功能和编码,学会对这些指令进行归纳分类。 2、了解熟悉MIPS体系中的处理器结构 3、熟悉并掌握单周期处理器CPU的原理和设计 4、进一步加强Verilog语言进行电路设计的能力 二、实验设备 1、装有xilinx ISE的计算机一台 2、LS-CPU-EXB-002教学系统实验箱一台 三、实验任务 1.、学习 MIPS 指令集,深入理解常用指令的功能和编码,并进行归纳确定处理器各部件的控制码,比如使用何种 ALU 运算,是否写寄存器堆等。 2、单周期 CPU 是指一条指令的所有操作一个时钟周期执行完。设计中所有寄存器和存储器都是异步读同步写的,即读出据不需要时钟控制,但写入据需时钟控制。 故单周期 CPU 的运作即:在一个时钟周期内,根据 PC 值从指令 ROM 中读出相应的指令,将指令译码后从寄存器堆中读出需要的操作,送往 ALU 模块,ALU 模块运算得到结果。 如果是 store 指令,则 ALU 运算结果为据存储的地址,就向据 RAM 发出写请求,在下一个时钟上升沿真正写入到据存储器。 如果是 load 指令,则 ALU 运算结果为据存储的地址,根据该值从据存 RAM 中读出据,送往寄存器堆根据目的寄存器发出写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果非 load/store 操作,若有写寄存器堆的操作,则直接将 ALU 运算结果送往寄存器堆根据目的寄存器发出写请求,在下一个时钟上升沿真正写入到寄存器堆中。 如果是分支跳转指令,则是需要将结果写入到 pc 寄存器中的。
单周期 CPU 是一种基础的计算机处理器设计,其执行每条指令所需的时钟周期固定为一个周期。单周期 CPU指令集一般较小,最常见的24条指令包括:取指令、存储据、逻辑运算、算术运算、条件分支等。 单周期 CPU执行周期可以分为若干个阶段,例如取指令、译码、执行等。每个阶段对应一个时钟周期执行每条指令时,CPU 首先从存储器中取指令操作码,并进行译码,确定指令类型和操作。然后,在执行阶段,根据指令类型进行相应的计算操作,例如进行算术运算、逻辑运算或者据传输。最后,将执行结果存储到相应的寄存器或者存储器中。 单周期 CPU 的优点是设计简单、易于实现,并且所有指令都需要相同量的时钟周期。这使得其控制电路的设计相对简单,而且适合于对实时性要求低的应用场景。然而,单周期 CPU 的缺点是性能较低,因为每条指令执行时间固定,如果某些指令需要较长的执行时间,则会浪费一部分时钟周期。 总的来说,单周期 CPU 是一种简单而基础的处理器设计,适用于对性能要求不高的应用。在实际应用中,为了提高性能,更常使用的是多周期 CPU 或者流水线 CPU 设计。多周期 CPU 可以根据指令类型执行不同量的时钟周期,而流水线 CPU 利用流水线技术将多条指令并行执行,提高了指令吞吐率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值