概述

1、2章的芯片都是组合逻辑电路(Combinational logic circuit),输出只取决于输入,不能保持状态。

时序逻辑电路(Sequential logic circuit)不仅能计算值,而且能够存储值(存在反馈回路)。

组合逻辑和时序逻辑
组合逻辑和时序逻辑

存储器的实现涉及到同步、计时、反馈回路,最基础的时序电路芯片是触发器(Flip-flop),通过它可以构建出计算机系统的存储设备。当然现代计算机的存储器不总是用FF造的,现代存储芯片总是利用存储技术的基础物理特性实现最优化,用哪种技术取决于性价比。

时钟(Clock)

在大多数计算机中,时间的流逝是通过一个主时钟(Master clock)传递一个连续的交流信号来表示的。

硬件实现是基于一个有源晶振 或 振荡器(英文Oscillator,内部有时钟电路,供电即可产生振荡信号。还有一种无源晶振或谐振器,英文为Crystal,需要借助时钟电路产生振荡信号。硬件模拟器中需要用户或脚本实现),它会交替产生高低电平,一个0-1(或者 low-high/tick-tock)为一个周期(Cycle),每一个时钟周期是一个单位时间。

这个信号被同时广播到计算机的每一个时序芯片上。

触发器(Flip-flop)

它是最基础的时序电路芯片,有多种变种,这里使用的是DFF(Data flip-flop,这里用到的似乎是下降沿触发的。。)。一位数据输入,一个时钟输入(信号来自主时钟),一位数据输出,实现$out(t)=in(t-1)$。

寄存器(Register)

1位的寄存器

用DFF造一个1位的寄存器,也叫做Bit。

1 bit
1 bit

w位的寄存器

w bit
w bit

存储器

随机存取存储器(RAM)

读写操作要访问任意一个单元,访问的顺序没有限制,任意位置,访问速度一样。

输入包括,一个数据输入、一个地址输入、一个load位。

参数:

  • 字长(data-width):一个word多少位
  • 字数(size):多少个words
RAMn
RAMn
RAMn
RAMn

存储器的递归构建

存储器的递归构建
存储器的递归构建

计数器(Counter)

每个时间单位输出都有一个增量,$out(t)=out(t-1)+c$,c一般是1。通常计数器有一些额外的功能,可以从0或者某一个数(counting base)开始,可以是减少一个量。

比如,CPU的程序计数器(Program counter,简称PC)

PC
PC

消除组合逻辑中的冒险

DFF使时序芯片保持一个状态或者改变一个状态,避免了组合电路的不可控的数据竞争(Data race)的影响。

在改变输入值时,由于一些物理限制(距离、阻碍、干扰、噪声等),几个输入值传输到芯片的时间不一样(数电上称为竞争。。),会使输出在一段时间内产生不正确的结果(数电上称为冒险。。)。

组合电路中输出只由输入控制,和时间无关,所以中间可能会出现不正确输出。

时序电路中的DFF保证输出只在进入一个新的时钟周期的一刻改变(其他时间是锁存的),也就是我们允许在一个周期内出现不稳定的状态,在下一个周期开始时是合法的状态。

所以消除冒险的方法是,时钟周期的时间比传输数据的时间稍长,保证时序芯片更新状态时的输入是合法的。由此实现系统硬件各个部分的同步来达到良好协调。

项目

project依然是用之前造好的芯片来实现这一章的芯片(除了DFF)。(我的代码见github

这一章的DFF不用了解具体实现(详细内容见数电课程),相当于之前的Nand,这里直接拿来构造其它时序电路就行。

需要查看硬件模拟器使用说明的4-5部分,以及附录A6-7。

需要建造的芯片列表:

  • Bit
  • Register
  • PC
  • RAM8
  • RAM64
  • RAM512
  • RAM4K
  • RAM16K