Week 3 notes
该逻辑指的是,在具有多个任务时,计算机是如何安排并处理这些任务的。相较于之前的内容,该处理过程中会带来一些新的问题:
使用相同的硬件来处理相同的计算。
计算过程中需要存储一些状态,比如之前计算的结果,计数器等等。
普通列表项目计算机通过 Clock 的方式来配合序列逻辑。通常的来说,是使用一个周期性的振荡器,将连续的物理时间转化为离散的时间序列。
计算机以序列单元(周期)为单位进行输入和输出的生成,该单元的数量是整数。这样就方便计算机可以一步一步的来处理自己的任务序列。
但问题在于,序列单元中的逻辑门运算,在真正的物理世界里,是有延迟(Delay)的,也就是信号输入,计算,到信号输出稳定的
这一段时间。如果我们的单元长度不够,那么这个单元中的逻辑门计算就无法完成。因此,我们的目标是,设计合理的 clock 单位长度,
来保证每个长度周期结束前逻辑门能够成功的完成计算,从而实现“忽略”延迟的效果。这也模拟了离散情况下的瞬时逻辑的概念(
如果以 clock 单元为单位,那么逻辑门的计算就是瞬时完成的)
所谓的灰色区域指的是电路中最长路径传播的 delay (Critical Path)。clock 的周期需要稍微长于该区域,是因为 delay 在现实电路中 会受到很多因素的影响从而导致变化(比如温度,电压)等等。因此我们需要设计出一定量的冗余来保证逻辑计算有足够的时间来达到稳定状态。
out[t] = function(in[t])
out[t] = function(in[t-1])
t
时刻可以使用 t-1
时刻的信息,在 t-1
结束的那一刻,必须有一个状态位记录 t-1
的状态0
或 1
,因此该状态位需要在 0-1
之间翻转,因此被称为 Filp-Flops。这一章实际就是在讲硬件上计算机是如何保存和更新状态的。
Clock Data Flip Flop 是一种简单的 Flip Flop。它的 out 返回上一个 Clock 中 input 的值:
下方的三角形表示该芯片是基于时间的(也就是结果基于 state 和 in) sequential chip(与之前的 combinatorial chips 不同,之前的芯片的输出只取决于输入)。
寄存器用于长时间记住某一位的状态,直到某刻通过外部请求更新:
load
位为 0
时,Bit 将永久存储之前最近的,load = 1
时记录的 t-1
in
的状态t-1
状态对其更新
# 注意 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 信号源作为 sel
的 MUX 来控制是否保存之前的内容:
当 load 为 1 时,此时输入端为 in
,DFF 存储当前 clock in
的值,并输出给下一个 clock 使用:
当 load 为 0 时,此时输入端为 DFF。由于 DFF 的作用是保存上一个 bit 的内容,此时等于是 DFF 一直在用之前的内容作为输入,因此达到了永久保存状态的效果:
Register(寄存器)实际上是一系列 1-bit register 的组合:
out
的输出就是 read 的结果in
的输入值in
值直接通过 out
输出set address = i
set address = i
set in = v
load
的状态为 1
:set load = 1
下一个 clock 的 out
将会输出 v
。
计算机在执行一系列指令中,通常需要知道当前,以及下一步执行什么指令。Counter(计数器)用于解决该问题。计数器内部通过记录下一步指令的地址来达到该效果。
PC = 0
PC++
n
条指令 PC = n