计算机系统要素-从零开始构建现代计算机--第三章,01-D触发器与1比特存储器实现

    技术2026-06-07  2

    第三章,01-D触发器与1比特存储器实现

    简介实现的逻辑电路D触发器介绍D触发器功能D触发器原理1.由Nand实现状态保持与翻转(基本RS触发器)2.从基本RS触发器到同步RS触发器3.从同步RS触发器到D触发器 1bit存储器电路

    简介

    这是《计算机系统要素:从零开始构建现代计算机》的学习笔记,刚刚启程学习,记录博客好提醒自己不要半途而废。 书籍获取,代码实现与书籍介绍,可关注这位大佬,视频课程:coursera/B站 偷一张大佬github截图作为介绍:

    实现的逻辑电路

    1比特位存储器

    1bit存储器的记忆能力来源于D触发器(Data Flip Flop, DFF),下面先介绍DFF

    D触发器介绍

    在前面两章实现的电路都没有时序相关逻辑,对输入即时计算并输出计算结果,对上一时刻的状态没有记忆,而对状态的记忆是存储器实现的核心。存储器的记忆能力来源于D触发器。

    D触发器功能

    DFF功能为输出上一时刻的输入: o u t ( t ) = i n ( t − 1 ) out(t)=in(t-1) out(t)=in(t1) 即输出永远是延迟一个时钟周期的,完成一个时钟周期的记忆

    D触发器原理

    1.由Nand实现状态保持与翻转(基本RS触发器)

    将两个Nand门按如下方式连接,成为RS触发器,为叙述方便,分别将两个Nand门记为A,B 假设某个时刻输入为1,1 此时不必关心输出是什么值,我们将上面A的输入改为0,此时A的输出为1,导致B的输出为0,B的输出转接到A的输入,可以看到两个Nand都保持了稳定: 此时将A的输入改为1,仍然保持稳定: 若此时将B的输入改为0再改为1,由于A,B是等效的,因此A将稳定输出0,B稳定输出1 总结: 输入为1,1时保持输出不变(存储的1bit内容不变) 任何时候,要保证某个Nand输出1,而另一个为0,只需要进行两个操作: 先将这个Nand的输入置为0,再置为1

    2.从基本RS触发器到同步RS触发器

    这里不分析,仅作中间变化的参考

    3.从同步RS触发器到D触发器

    上面这张图对应下图的in out 应该是D和Q端, 至于最后 o u t ( t ) = i n ( t − 1 ) out(t)=in(t-1) out(t)=in(t1)是怎么实现的,请看下面真值表的解析 真值表

    D(in)CPS’R’Q(out) Q ˉ \bar{Q} Qˉ0011不变不变0110011011不变不变110110

    可见: 1.一个完整的时钟周期分成2部分:CP=0(tic),CP=1(toc) 2.tic时DFF输出不变(因为基本RS触发器的输入为1 1) 3.toc时DFF输出更新为D 注:可能0叫toc,1叫tic,在这里不细究,只为了方便演示记忆的电路实现

    把真值表拉长一点,从第一行开始,让它按时间演化,看看 o u t ( t ) = i n ( t − 1 ) out(t)=in(t-1) out(t)=in(t1)是怎么实现的:

    timeD(in)CPS’R’Q(out) Q ˉ \bar{Q} Qˉtic0011不变不变toc011001tic101101toc110110tic001110toc011001tic001101toc011001tic101101toc110110tic101110toc110110

    从真值表看来tic toc的职责是: 1.tic,不更新,D值被忽略,输出上一toc时的输入值 2.toc,更新,将Q更新为D,不输出

    第2点,toc若输出,输出的就是toc当前的输入值,而不是上一周期的输入值,失去了时间性,变成了无记忆电路。 根据以上两点,去掉干扰再看一下真值表(空格表示忽略), o u t ( t ) = i n ( t − 1 ) out(t)=in(t-1) out(t)=in(t1)就很清晰了: 真值表

    timeD(in)Q(out)tic不变toc0tic0toc1tic1toc0tic0toc0tic0toc1tic1toc1

    可以看到,DFF延迟输出的实现,来自于两个方面: 1.RS触发器的状态保持 2.计算机时钟的控制 DFF电路是在tic toc都会进行输出的,所以外部应该还要有控制的电路,实现tic时对DFF取值, toc不取值,这应该是计算机时钟设计考虑的范围

    1bit存储器

    有了上面的DFF,1bit存储器的实现是相当简单的 从上面看DFF功能为 if tic Q=D(t-1), out Q if toc Q=D, no out

    1bit存储器每一时刻都有两个输出候选:一,上一时刻的输入,二,上一时刻的输出 既然有两个输出候选,就把它们与load一起输入一个Mux,然后输入DFF的D端:

    电路

    因为DFF在toc时才读取 D,更新值,所以load操作只在toc时生效 真值表,空格表示忽略:

    timeinloadDQ(out)tic不变toc111tic1toc101tic1toc001tic1toc010tic0toc111tic1toc111

    hdl:

    CHIP Bit { IN in, load; OUT out; PARTS: Mux(a=preOut, b=in, sel=load, out=o1); DFF(in=o1, out=preOut, out=out); }
    Processed: 0.011, SQL: 9