目录

Memory

Week 3 notes


Sequential Logic

该逻辑指的是,在具有多个任务时,计算机是如何安排并处理这些任务的。相较于之前的内容,该处理过程中会带来一些新的问题:

时间管理

重复使用硬件

使用相同的硬件来处理相同的计算。

State

计算过程中需要存储一些状态,比如之前计算的结果,计数器等等。

Clock & Delay

普通列表项目计算机通过 Clock 的方式来配合序列逻辑。通常的来说,是使用一个周期性的振荡器,将连续的物理时间转化为离散的时间序列。 计算机以序列单元(周期)为单位进行输入和输出的生成,该单元的数量是整数。这样就方便计算机可以一步一步的来处理自己的任务序列。

但问题在于,序列单元中的逻辑门运算,在真正的物理世界里,是有延迟(Delay)的,也就是信号输入,计算,到信号输出稳定的 这一段时间。如果我们的单元长度不够,那么这个单元中的逻辑门计算就无法完成。因此,我们的目标是,设计合理的 clock 单位长度, 来保证每个长度周期结束前逻辑门能够成功的完成计算,从而实现“忽略”延迟的效果。这也模拟了离散情况下的瞬时逻辑的概念( 如果以 clock 单元为单位,那么逻辑门的计算就是瞬时完成的)

所谓的灰色区域指的是电路中最长路径传播的 delay (Critical Path)。clock 的周期需要稍微长于该区域,是因为 delay 在现实电路中 会受到很多因素的影响从而导致变化(比如温度,电压)等等。因此我们需要设计出一定量的冗余来保证逻辑计算有足够的时间来达到稳定状态。

Sequential Logic 的优势

使用序列逻辑可以实现迭代的效果:也就是上一个 clock 的计算结果可以直接在当前周期使用,比如:

Filp Flops

这一章实际就是在讲硬件上计算机是如何保存和更新状态的。

Clock Data Flip Flop

Clock Data Flip Flop 是一种简单的 Flip Flop。它的 out 返回上一个 Clock 中 input 的值:


下方的三角形表示该芯片是基于时间的(也就是结果基于 state 和 in) sequential chip(与之前的 combinatorial chips 不同,之前的芯片的输出只取决于输入)。

D Flip Flop 的应用

  • 尽管实现上,sequential logic 可以由 combinatorial logic 实现,比如 D Flip-Flop 就可以由 Nand 实现。但理论上来讲,这两者应该严格的区分开来。
  • 实现上,我们通过多个 D Flip-Flop 来组成不同的特定状态存储器(比如寄存器,指令计数器等等)

1-bit register

1-bit register:原理

寄存器用于长时间记住某一位的状态,直到某刻通过外部请求更新:


# 注意 bit 保存的永远是上一个 clock 的状态
# load 变为 1 时,意味着下一个 clock Bit 将存储当前 in 的值
load: 1->0->0->1->0
in:   1->0->0->0->0
out:     1->1->1->0->0

1-bit register:load 的具体实现

实际实现中,1-bit register 通过一个以 load 信号源作为 selMUX 来控制是否保存之前的内容:



load 为 1 时,此时输入端为 in,DFF 存储当前 clock in 的值,并输出给下一个 clock 使用:



load 为 0 时,此时输入端为 DFF。由于 DFF 的作用是保存上一个 bit 的内容,此时等于是 DFF 一直在用之前的内容作为输入,因此达到了永久保存状态的效果:

Memory Units

Register

Register(寄存器)实际上是一系列 1-bit register 的组合:

Read Logic
Write Logic

RAM unit

RAM abstraction

address 的带宽

$$k=log_2n$$ 比如 8 个寄存器需要 3 位带宽去表示:

RAM unit 的读取逻辑
  1. 寻址:set address = i
  2. 输出当前地址寄存器的值:probe out
RAM unit 的写入逻辑
  1. 寻址:set address = i
  2. 设定输入值(需要写入的值):set in = v
  3. 修改 load 的状态为 1set load = 1

下一个 clock 的 out 将会输出 v

Counters

计算机在执行一系列指令中,通常需要知道当前,以及下一步执行什么指令。Counter(计数器)用于解决该问题。计数器内部通过记录下一步指令的地址来达到该效果。

常见的计数器操作

Counter Abstraction

针对上述的操作,计数器的控制分为三个 Bits:loadincreset