======Memory====== //Week 3 notes// ---- ====Sequential Logic==== 该逻辑指的是,在具有多个任务时,计算机是如何安排并处理这些任务的。相较于之前的内容,该处理过程中会带来一些新的问题: * 时间管理 * 不同任务带来不同的输入 * 某个任务可能需要基于之前任务的结果 ===时间管理=== ==重复使用硬件== 使用相同的硬件来处理相同的计算。 ==State== 计算过程中需要存储一些状态,比如之前计算的结果,计数器等等。 ==Clock & Delay== 普通列表项目计算机通过 Clock 的方式来配合序列逻辑。通常的来说,是使用一个周期性的振荡器,将**连续**的物理时间转化为**离散**的时间序列。 计算机以序列单元(周期)为单位进行输入和输出的生成,该单元的数量是整数。这样就方便计算机可以一步一步的来处理自己的任务序列。 \\ \\ 但问题在于,序列单元中的逻辑门运算,在真正的物理世界里,是有延迟(//Delay//)的,也就是信号输入,计算,到信号输出稳定的 这一段时间。如果我们的单元长度不够,那么这个单元中的逻辑门计算就无法完成。因此,我们的目标是,设计合理的 clock 单位长度, 来保证每个长度周期结束前逻辑门能够成功的完成计算,从而实现“忽略”延迟的效果。这也模拟了离散情况下的瞬时逻辑的概念( 如果以 clock 单元为单位,那么逻辑门的计算就是瞬时完成的) 所谓的灰色区域指的是电路中最长路径传播的 delay (//Critical Path//)。clock 的周期需要稍微长于该区域,是因为 delay 在现实电路中 会受到很多因素的影响从而导致变化(比如温度,电压)等等。因此我们需要设计出一定量的冗余来保证逻辑计算有足够的时间来达到稳定状态。 ==Sequential Logic 的优势== * 逻辑门计算中,如果输入与输出发生在同一个 clock 单元,那么我们称这种逻辑为 //Combinatorial//,即 ''out[t] = function(in[t])'' * 如果输出发生在输入周期的**下一个** clock 周期单元,那么我们称这种逻辑为 //Sequential//,即 ''out[t] = function(in[t-1])'' 使用序列逻辑可以实现迭代的效果:也就是上一个 clock 的计算结果可以直接在当前周期使用,比如: \\ \\ {{ :cs:comp_n_arch:courses:fnti_i:seq_logic.jpg?400 |}} ====Filp Flops====