第 162 篇

考研数电·零基础讲义 第15讲|寄存器与移位寄存器

约 17 分钟 5785 字 华南师范大学数字电子技术考研数电零基础讲义

考研数电·零基础讲义 · 第 15 讲|寄存器与移位寄存器 学完本讲,你能说清数码寄存器和移位寄存器的结构与工作过程,会逐拍列出移位寄存器里代码的移动情况,看懂并会用双向移位寄存器 74HC194 的功能表,知道它怎样做串并转换、乘除 2 和级联扩展,并对环形、扭环形计数器有初步认识。预计用时 90 分钟。

本讲地图

  • 数码寄存器:一排共用时钟的触发器,一拍存进一组二值代码(并行输入、并行输出)。
  • 移位寄存器:触发器首尾串接,每来一个时钟,代码整体右移(或左移)一位;能做串行↔并行转换、乘除 2、数据延迟。
  • 74HC194 双向移位寄存器:置零、保持、右移、左移、并行输入五种工作状态,由RD‾\overline{R_D}⁠、S1S_1⁠、S0S_0控制;两片级联成 8 位。
  • 预告:把移位寄存器首尾相接就是环形计数器、扭环形计数器(与第 14 讲的自启动问题直接相关)。
  • 华师怎么考:考纲明确列出"时序逻辑电路:触发器、计数器、寄存器等"。常见考法:逐拍写出移位寄存器状态、按 74HC194 功能表填状态、用移位寄存器构成计数器并判断自启动。
  • 教材对应:阎石第六版 5.4 节(寄存器)、6.3.1 节(移位寄存器)、6.3.2 节第四部分(移位寄存器型计数器)。

前置知识

  • 边沿触发 D 触发器Q∗=DQ^{*}=D及其"只在时钟沿按沿前输入动作"的特点,见第 13 讲(中)、(下)。
  • 同步时序电路的状态方程、状态转换表、自启动判断,见第 14 讲。
  • 4 选 1 数据选择器的表达式,见第 10 讲。

一、数码寄存器:一排储物柜

1.1 大白话

寄存器(Register)就是"能存一组二值代码的电路"。想象超市门口的一排储物柜:每个柜子放一位(0 或 1),4 个柜子就能存一个 4 位二进制数。管理员一声令下(时钟来了),4 个柜子同时换上新东西。

一个触发器存 1 位,nn个触发器存nn位。寄存器里的触发器只要能置 1、置 0 就够了,所以电平触发、脉冲触发、边沿触发的触发器都能用。

1.2 结构与工作方式

把 4 个 D 触发器的时钟端接在一起,4 个DD端分别接数据D0∼D3D_0\sim D_3⁠,4 个输出Q0∼Q3Q_0\sim Q_3就是存下的数据:

Q0∗=D0,Q1∗=D1,Q2∗=D2,Q3∗=D3Q_0^{*}=D_0,\quad Q_1^{*}=D_1,\quad Q_2^{*}=D_2,\quad Q_3^{*}=D_3

数据各位同时输入,同时出现在输出端,这种方式叫并行输入、并行输出。

1.3 用不同触发器,动作特点不同

教材举了两个 4 位寄存器的例子:

芯片 内部触发器 动作特点
74LS75 电平触发 D 触发器(D 锁存器) CLK 高电平期间QQ跟随DD变化;CLK 变低后保持变低时刻的DD
74HC175 CMOS 边沿触发 D 触发器 QQ只在 CLK 上升沿按当时的DD更新

同样是"4 位寄存器",用的触发器结构不同,动作特点就不同——这正是第 13 讲(中)"触发方式由电路结构决定"的体现。

为了使用灵活,有些寄存器还附加了异步置零、输出三态控制、保持等功能。这里的"保持"指:时钟到了,触发器也不按DD改变,维持原状态。

1.4 例题 1

题:一个由上升沿 D 触发器组成的 4 位数码寄存器,初态Q3Q2Q1Q0=0000Q_3Q_2Q_1Q_0=0000⁠。第 1 个上升沿时D3D2D1D0=1010D_3D_2D_1D_0=1010⁠,第 1、2 个上升沿之间输入变成01110111⁠,第 2 个上升沿到来前又变成11001100⁠。求两个上升沿后的状态。

解:边沿触发只看沿到达前一瞬间的输入。第 1 个上升沿后Q3Q2Q1Q0=1010Q_3Q_2Q_1Q_0=1010⁠;两沿之间输入变成 0111 不起作用;第 2 个上升沿前一瞬间输入是 1100,所以第 2 个上升沿后Q3Q2Q1Q0=1100Q_3Q_2Q_1Q_0=1100⁠。

1.5 易错点 ⚠️

  • ⚠️ 用 D 锁存器做的寄存器(如 74LS75)在 CLK 有效期间是"透明"的,输出会跟着输入变;别和边沿触发的寄存器混为一谈。
  • ⚠️ 数码寄存器各位之间没有连接,不会移位。

二、移位寄存器:传纸条

2.1 大白话

移位寄存器(Shift Register)除了能存代码,还能让代码在时钟作用下一位一位地挪。就像教室里一排同学传纸条:老师拍一下手,每个人都把手里的纸条交给右边的同学,同时最左边的同学从窗外接过一张新纸条,最右边那张传出去了。

2.2 电路结构

用 4 个边沿触发的 D 触发器FF0∼FF3FF_0\sim FF_3串起来:

  • 第一个触发器FF0FF_0的DD端接串行输入 DID_I⁠;
  • 后面每一个触发器的DD端接前一个触发器的QQ⁠:D1=Q0D_1=Q_0⁠,D2=Q1D_2=Q_1⁠,D3=Q2D_3=Q_2⁠;
  • 4 个触发器共用一个时钟 CLK(叫移位脉冲);
  • 最后一个Q3Q_3可以作为串行输出。

用第 14 讲的语言写,它的状态方程是:

Q0∗=DI,Q1∗=Q0,Q2∗=Q1,Q3∗=Q2Q_0^{*}=D_I,\qquad Q_1^{*}=Q_0,\qquad Q_2^{*}=Q_1,\qquad Q_3^{*}=Q_2

2.3 为什么能"只挪一位"

疑问:上升沿到来时,FF0FF_0收进新数据,Q0Q_0变了;FF1FF_1会不会接着收到这个新的 Q0Q_0⁠,一口气连挪好几位?

不会。原因有两层:

  1. 触发器从时钟沿到达到输出变化,要经过一段传输延迟时间 tpdt_{pd}⁠。时钟沿同时打到 4 个触发器时,它们的DD端都还是旧值:FF1FF_1按Q0Q_0的旧值翻转,FF2FF_2按Q1Q_1的旧值翻转……
  2. 边沿触发器只在沿那一瞬间采样,等前一级输出变了,沿已经过去了,后一级不再接收。

总效果:原有代码整体右移一位,同时DID_I的新代码移入FF0FF_0⁠。这又是"同一拍所有触发器同时用现态计算次态"的规矩(第 14 讲)。

如果换成电平触发的 D 锁存器就不行:CLK=1 期间所有锁存器都是透明的,数据会从DID_I一路"冲"过好几级。脉冲触发(主从)的触发器则可以,因为它的输出要等主触发器接收完毕、CLK 回到低电平时才变。

2.4 例题 2:串行输入 1011,逐拍列表

题:上述 4 位右移寄存器初态Q0Q1Q2Q3=0000Q_0Q_1Q_2Q_3=0000⁠,4 个时钟周期内串行输入依次为 1、0、1、1(先送 1),列出每个上升沿后的状态。

解:每一拍:Q0Q_0取当时的DID_I⁠,其余各位取左边一位的旧值。

CLK 顺序 输入DID_I Q0Q_0 Q1Q_1 Q2Q_2 Q3Q_3
0(初态) — 0 0 0 0
1 1 1 0 0 0
2 0 0 1 0 0
3 1 1 0 1 0
4 1 1 1 0 1

(这张表与教材表 6.3.1 一致,并用 Python 逐拍模拟核对。)

串行输入 1011 时代码在移位寄存器中逐位右移 FF0 → Q0 FF1 → Q1 FF2 → Q2 FF3 → Q3 串行输入 D_I(先进 1,再 0、1、1) 移出→ 1 0 1 1 0 0 0 0 初始:Q0Q1Q2Q3 = 0000 第 1 个 CLK 上升沿后:Q0Q1Q2Q3 = 1000 第 2 个 CLK 上升沿后:Q0Q1Q2Q3 = 0100 第 3 个 CLK 上升沿后:Q0Q1Q2Q3 = 1010 第 4 个 CLK 上升沿后:Q0Q1Q2Q3 = 1101 4 个时钟后,串行送进来的 4 位同时出现在 Q0~Q3 上(串→并)

图 1:串行输入 1011 时,代码在 4 位右移寄存器里逐位右移(橙色为输入的代码,灰色为原来的 0,动画循环播放)

4位右移寄存器的电压波形 1 2 3 4 5 6 CLK D_I Q0 Q1 Q2 Q3 同一个"1"每过一个上升沿往下挪一行:Q0→Q1→Q2→Q3

图 2:同一过程的电压波形,第 4 个上升沿后Q0∼Q3Q_0\sim Q_3并行读出 1101,之后输入为 0,代码继续右移(扫描线动画循环播放)

读图要点:最先送进去的那个 1,每过一个上升沿就往下挪一行(⁠Q0→Q1→Q2→Q3Q_0\to Q_1\to Q_2\to Q_3⁠),4 个上升沿后到达Q3Q_3⁠。此时 4 位串行代码全部进入寄存器,同时出现在 4 个输出端——串行输入、并行输出,这就是串-并转换。

注意顺序:最先送入的位到了最右边Q3Q_3⁠,最后送入的位在最左边Q0Q_0⁠。

2.5 并-串转换

反过来,先把 4 位数据并行置入 4 个触发器,再连续加 4 个移位脉冲,代码就从Q3Q_3一位一位地串行送出。例如置入Q0Q1Q2Q3=1101Q_0Q_1Q_2Q_3=1101⁠、右移时DI=0D_I=0⁠:

第几次移位前 Q0Q1Q2Q3Q_0Q_1Q_2Q_3 串行输出Q3Q_3
1 1101 1
2 0110 0
3 0011 1
4 0001 1

Q3Q_3依次送出 1、0、1、1,即先送Q3Q_3位、最后送Q0Q_0位(Python 核对)。串-并、并-串转换在数据通信中很常用:线路上一位一位传,电路内部一组一组处理。

2.6 左移寄存器

把连接方向反过来:D3D_3接串行输入,D2=Q3D_2=Q_3⁠,D1=Q2D_1=Q_2⁠,D0=Q1D_0=Q_1⁠,代码就从Q3Q_3向Q0Q_0方向移动,叫左移。"左""右"只是相对于画图方向的叫法,关键看数据从哪一端进、往哪一端走。

用 JK 触发器也能组成移位寄存器:把每一级接成 D 触发器的形式(⁠J=DJ=D⁠、K=D‾K=\overline{D}⁠,即Ji=Qi−1J_i=Q_{i-1}⁠、Ki=Qi−1‾K_i=\overline{Q_{i-1}}⁠),功能完全一样。

2.7 易错点 ⚠️

  • ⚠️ 逐拍列表时,每一位都取前一位的旧值。最常见的错误是用刚更新的Q0Q_0去算Q1Q_1⁠,导致"一拍挪好几位"。
  • ⚠️ 串行输入nn位数据需要nn个移位脉冲才能全部进入;并-串输出也需要nn个脉冲才能全部送出。
  • ⚠️ 写状态时先说明位的顺序(本讲统一写成Q0Q1Q2Q3Q_0Q_1Q_2Q_3⁠,与教材一致)。

三、双向移位寄存器 74HC194

3.1 大白话:一个多功能储物柜

实际芯片往往把"清零、保持、右移、左移、并行置数"几种功能做在一起,用几个控制端来选择。74HC194(教材写作 74HC194A)就是典型的 4 位双向移位寄存器。

3.2 引脚

引脚 读法 / 作用
Q0∼Q3Q_0\sim Q_3 4 位并行输出
D0∼D3D_0\sim D_3 4 位并行数据输入
DIRD_{IR} 右移串行输入端(R = Right),右移时送进Q0Q_0
DILD_{IL} 左移串行输入端(L = Left),左移时送进Q3Q_3
S1S_1⁠、S0S_0 工作方式控制端
RD‾\overline{R_D} 置零端,低电平有效,正常工作时接高电平
CLK 时钟,上升沿触发
74HC194 引脚示意与环形计数器接法 74HC194 D_IR D0 D1 D2 D3 D_IL Q0 Q1 Q2 Q3 S1 S0 CLK R_D' Q3→D_IR环形计数器 右移:D_IR→Q0→Q1→Q2→Q3;左移:D_IL→Q3→Q2→Q1→Q0

图 3:74HC194 引脚示意。橙色虚线把Q3Q_3接回DIRD_{IR}⁠,配合右移就构成环形计数器(虚线流动为动画效果)

3.3 功能表(以教材表 6.3.2 为准)

RD‾\overline{R_D} S1S_1 S0S_0 工作状态
0 × × 置零
1 0 0 保持
1 0 1 右移
1 1 0 左移
1 1 1 并行输入

每种状态下时钟上升沿到来后的结果:

工作状态 Q0∗Q_0^{*} Q1∗Q_1^{*} Q2∗Q_2^{*} Q3∗Q_3^{*}
置零(⁠RD‾=0\overline{R_D}=0⁠,不等时钟) 0 0 0 0
保持S1S0=00S_1S_0=00 Q0Q_0 Q1Q_1 Q2Q_2 Q3Q_3
右移S1S0=01S_1S_0=01 DIRD_{IR} Q0Q_0 Q1Q_1 Q2Q_2
左移S1S0=10S_1S_0=10 Q1Q_1 Q2Q_2 Q3Q_3 DILD_{IL}
并行输入S1S0=11S_1S_0=11 D0D_0 D1D_1 D2D_2 D3D_3

记忆法:S1S0S_1S_0看成一个两位二进制数——0 保持,1 右移,2 左移,3 置数。

3.4 内部原理:每一位前面有个 4 选 1

以第二位FF1FF_1为例,它的输入端前面是一个由与或非门和反相器组成的、具有互补输出的 4 选 1 数据选择器,S1S0S_1S_0就是地址:

  • S1S0=00S_1S_0=00选中Q1Q_1(自己)→ 保持;
  • S1S0=01S_1S_0=01选中Q0Q_0(左边一位)→ 右移;
  • S1S0=10S_1S_0=10选中Q2Q_2(右边一位)→ 左移;
  • S1S0=11S_1S_0=11选中D1D_1(并行数据)→ 置数。

写成状态方程(就是第 10 讲 4 选 1 的表达式):

Q1∗=S1‾ S0‾ Q1+S1‾S0 Q0+S1S0‾ Q2+S1S0 D1Q_1^{*}=\overline{S_1}\,\overline{S_0}\,Q_1+\overline{S_1}S_0\,Q_0+S_1\overline{S_0}\,Q_2+S_1S_0\,D_1

(Python 对 64 种组合穷举,与功能表一致。)其余三位同理,只是FF0FF_0的"左边一位"换成DIRD_{IR}⁠,FF3FF_3的"右边一位"换成DILD_{IL}⁠。

3.5 例题 3:按控制信号逐拍填状态(典型考法)

题:74HC194 依次进行下列操作,写出每步之后的Q0Q1Q2Q3Q_0Q_1Q_2Q_3⁠: ① RD‾=0\overline{R_D}=0⁠;② RD‾=1\overline{R_D}=1⁠、S1S0=11S_1S_0=11⁠,D0D1D2D3=1011D_0D_1D_2D_3=1011⁠,来一个上升沿;③ S1S0=01S_1S_0=01⁠,DIR=0D_{IR}=0⁠,来一个上升沿;④ S1S0=01S_1S_0=01⁠,DIR=1D_{IR}=1⁠,来一个上升沿;⑤ S1S0=10S_1S_0=10⁠,DIL=1D_{IL}=1⁠,来一个上升沿;⑥ S1S0=00S_1S_0=00⁠,来一个上升沿。

解:

步骤 操作 计算 Q0Q1Q2Q3Q_0Q_1Q_2Q_3
① 置零 立即全部清 0 0000
② 并行输入 Qi∗=DiQ_i^{*}=D_i 1011
③ 右移,DIR=0D_{IR}=0 Q0∗=0Q_0^{*}=0⁠,Q1∗=Q0=1Q_1^{*}=Q_0=1⁠,Q2∗=Q1=0Q_2^{*}=Q_1=0⁠,Q3∗=Q2=1Q_3^{*}=Q_2=1 0101
④ 右移,DIR=1D_{IR}=1 Q0∗=1Q_0^{*}=1⁠,其余取左边旧值 1010
⑤ 左移,DIL=1D_{IL}=1 Q0∗=Q1=0Q_0^{*}=Q_1=0⁠,Q1∗=Q2=1Q_1^{*}=Q_2=1⁠,Q2∗=Q3=0Q_2^{*}=Q_3=0⁠,Q3∗=1Q_3^{*}=1 0101
⑥ 保持 不变 0101

(Python 用功能表模型逐步模拟,结果一致。)

3.6 两片级联成 8 位双向移位寄存器

教材给出的接法很简单:

  • 第一片的Q3Q_3接第二片的DIRD_{IR}(右移时数据从第一片流进第二片);
  • 第二片的Q0Q_0接第一片的DILD_{IL}(左移时数据从第二片流回第一片);
  • 两片的S1S_1⁠、S0S_0⁠、CLK、RD‾\overline{R_D}分别并联。

整体就是 8 位:右移时数据从第一片的DIRD_{IR}进,依次经过第一片的Q0→Q3Q_0\to Q_3⁠、再进入第二片的Q0→Q3Q_0\to Q_3⁠;左移时从第二片的DILD_{IL}进,方向相反。

例如 8 位内容为 1011 0000(前 4 位是第一片Q0∼Q3Q_0\sim Q_3⁠),DIR=0D_{IR}=0右移两次,得到 0010 1100(Python 核对)。

3.7 易错点 ⚠️

  • ⚠️ S1S0=01S_1S_0=01是右移、1010是左移,不要记反;右移的新数据从DIRD_{IR}进Q0Q_0⁠,左移的新数据从DILD_{IL}进Q3Q_3⁠。
  • ⚠️ RD‾\overline{R_D}低电平有效,且优先级最高:它为 0 时,S1S0S_1S_0和时钟都不起作用。
  • ⚠️ 并行置数也要等时钟上升沿才生效,和RD‾\overline{R_D}的立即清零不同。

四、移位寄存器的应用

4.1 数据的串-并、并-串转换

见 2.4、2.5 节:串行进、并行出,或并行进、串行出。

4.2 乘 2、除 2

如果把Q0Q_0当作数的最低位、Q3Q_3当作最高位,那么右移(⁠Q0→Q1→⋯Q_0\to Q_1\to\cdots⁠)就是把每一位挪到权重大一倍的位置上,相当于乘以 2(⁠DIRD_{IR}补 0);左移相当于除以 2(舍去最低位)。

例:寄存器里存 3,即Q0=1,Q1=1,Q2=0,Q3=0Q_0=1,Q_1=1,Q_2=0,Q_3=0(写作Q0Q1Q2Q3=1100Q_0Q_1Q_2Q_3=1100⁠)。右移一次(⁠DIR=0D_{IR}=0⁠)得 0110,值为2+4=62+4=6⁠;再左移一次(⁠DIL=0D_{IL}=0⁠)又回到 3(Python 核对)。

教材例 6.3.1 正是利用这一点:两个 8 位移位寄存器分别存MM⁠、NN⁠,按时钟让MM右移 3 位、NN右移 1 位,再用加法器相加,得到Y=M×8+N×2Y=M\times8+N\times2⁠。

⚠️ "左移乘 2 还是右移乘 2"取决于哪一端是最低位,题目里一定要先看清位权,不能死记。

4.3 数据延迟

串行数据从DID_I进去,要经过nn个时钟才从Qn−1Q_{n-1}出来,相当于把信号延迟了nn个时钟周期。


五、预告:移位寄存器型计数器

把移位寄存器的串行输出反馈回串行输入,就得到不用加法也能"数数"的计数器。

5.1 环形计数器

令D0=Q3D_0=Q_3(74HC194 中把Q3Q_3接DIRD_{IR}⁠,S1S0=01S_1S_0=01右移,见图 3 虚线)。先置入 1000,此后每来一个时钟,那个 1 就循环右移一位:

1000→0100→0010→0001→10001000\to0100\to0010\to0001\to1000

4 个状态循环,可以数 4 个时钟;而且每个状态只有一个 1,直接看哪个QQ为 1 就知道数到几,不用译码。

但 4 个触发器共有 16 个状态,有效循环只用了 4 个。用 Python 把 16 个状态全部模拟一遍,发现还有 0000、1111(停在原地)以及 0011→1001→1100→0110、0101→1010、0111→1011→1101→1110 等几个无效循环——所以基本环形计数器不能自启动,使用前必须先置入有效状态。

5.2 扭环形计数器(约翰逊计数器)

令D0=Q3‾D_0=\overline{Q_3}(反相后送回),从 0000 开始:

0000→1000→1100→1110→1111→0111→0011→0001→00000000\to1000\to1100\to1110\to1111\to0111\to0011\to0001\to0000

nn位移位寄存器得到2n2n个有效状态,利用率比环形计数器高一倍,而且每次只有一位变化,译码时不会产生竞争-冒险。但剩下的 8 个状态自成另一个循环,所以基本扭环形计数器同样不能自启动。第 14 讲例 2 的三位电路正是三位扭环形计数器,我们已经学过怎样修改反馈逻辑让它自启动。

这两种计数器的自启动设计,在后面计数器和时序电路设计的讲次里还会系统展开。


速记卡

知识点 要点
数码寄存器 nn个触发器共用时钟,Qi∗=DiQ_i^{*}=D_i⁠,并行入并行出;74LS75 用锁存器(电平触发),74HC175 用边沿 D 触发器
右移寄存器 Q0∗=DIQ_0^{*}=D_I⁠,Qi∗=Qi−1Q_i^{*}=Q_{i-1}⁠;每拍整体右移一位
为何只挪一位 边沿触发 + 传输延迟:同一拍各级都按前一级的旧值翻转
串-并 / 并-串 串行nn位需nn个脉冲;先进的位最终在最远端
74HC194 控制 RD‾=0\overline{R_D}=0置零(优先);S1S0S_1S_0⁠:00 保持、01 右移、10 左移、11 并行输入
右移 / 左移 右移:DIR→Q0→Q1→Q2→Q3D_{IR}\to Q_0\to Q_1\to Q_2\to Q_3⁠;左移:DIL→Q3→Q2→Q1→Q0D_{IL}\to Q_3\to Q_2\to Q_1\to Q_0
内部原理 每位前一个 4 选 1,S1S0S_1S_0为地址
8 位级联 片 1 的Q3→Q_3\to片 2 的DIRD_{IR}⁠;片 2 的Q0→Q_0\to片 1 的DILD_{IL}⁠;控制端、时钟并联
乘除 2 移向高位权 = ×2,移向低位权 = ÷2,先看清哪端是最低位
环形计数器 D0=Qn−1D_0=Q_{n-1}⁠,nn个有效状态,不能自启动
扭环形计数器 D0=Qn−1‾D_0=\overline{Q_{n-1}}⁠,2n2n个有效状态,不能自启动,每次只变一位

自测练习

1. 4 位右移寄存器(D 触发器构成,Q0∗=DIQ_0^{*}=D_I⁠,Qi∗=Qi−1Q_i^{*}=Q_{i-1}⁠),初态Q0Q1Q2Q3=0000Q_0Q_1Q_2Q_3=0000⁠,串行输入依次为 1、1、0、1,写出每个时钟后的状态。

答案与提示

1000 → 1100 → 0110 → 1011。第 4 拍后最先送入的 1 到了Q3Q_3⁠,最后送入的 1 在Q0Q_0⁠。(Python 核对。)

2. 74HC194 初态Q0Q1Q2Q3=0110Q_0Q_1Q_2Q_3=0110⁠,RD‾=1\overline{R_D}=1⁠,依次进行:右移(⁠DIR=1D_{IR}=1⁠)、右移(⁠DIR=1D_{IR}=1⁠)、左移(⁠DIL=0D_{IL}=0⁠)、保持、并行输入(⁠D0D1D2D3=1001D_0D_1D_2D_3=1001⁠),每步一个上升沿。写出每步后的状态。

答案与提示

1011 → 1101 → 1010 → 1010 → 1001。第 3 步左移时现态是 1101,所以Q0∗=Q1=1Q_0^{*}=Q_1=1⁠、Q1∗=Q2=0Q_1^{*}=Q_2=0⁠、Q2∗=Q3=1Q_2^{*}=Q_3=1⁠、Q3∗=DIL=0Q_3^{*}=D_{IL}=0⁠,得 1010。(Python 核对。)

3. 用一个 8 位移位寄存器把串行送来的 8 位数据变成并行输出,至少需要几个移位脉冲?若要把并行置入的 8 位数据串行送出,又需要几个?

答案与提示

都需要 8 个移位脉冲:串行输入 8 位要移 8 次才能全部进入;并行置入后连续加 8 个移位脉冲,8 位代码依次从串行输出端送出(2.5 节表中 4 位的情形是 4 个脉冲)。

4. 4 位环形计数器(⁠D0=Q3D_0=Q_3⁠,右移)预置 1000,写出有效循环。它能自启动吗?为什么?

答案与提示

1000 → 0100 → 0010 → 0001 → 1000,4 个有效状态。不能自启动:其余 12 个状态构成 0000、1111 自环以及 0011→1001→1100→0110、0101→1010、0111→1011→1101→1110 等无效循环,进入后回不到有效循环。(Python 列出全部循环核对。)

5.(华师风格)用 74HC194 接成右移方式(⁠S1S0=01S_1S_0=01⁠),DIR=Q2+Q3‾D_{IR}=\overline{Q_2+Q_3}⁠,从 0000 开始。写出状态序列,说明是几进制计数器,并判断能否自启动。

答案与提示

每拍Q0∗=Q2+Q3‾Q_0^{*}=\overline{Q_2+Q_3}⁠,其余右移:0000 → 1000 → 1100 → 1110 → 0111 → 0011 → 0001 → 0000,有效循环 7 个状态,是七进制计数器。用 Python 模拟全部 16 个状态,只存在这一个循环,其余 9 个状态都会进入它,所以能自启动。

6. 3 位扭环形计数器(⁠D0=Q2‾D_0=\overline{Q_2}⁠,右移,状态写作Q0Q1Q2Q_0Q_1Q_2⁠)有几个有效状态?无效状态是哪些?

答案与提示

有效循环 000 → 100 → 110 → 111 → 011 → 001 → 000,共 6 个(⁠2n=62n=6⁠)。无效状态 010、101 互相转换(010 → 101 → 010),不能自启动。

7. 能否用电平触发的 D 锁存器代替边沿 D 触发器组成移位寄存器?为什么?

答案与提示

不能。CLK 有效期间所有锁存器都是透明的,DID_I的数据会连续穿过多级,一个时钟内移动不止一位。必须用边沿触发器(或输出在有效电平结束后才变化的脉冲触发主从触发器),保证每个时钟每级只按前一级的旧值翻转一次。

8. 两片 74HC194 级联成 8 位右移寄存器,8 位内容(片 1 的Q0∼Q3Q_0\sim Q_3⁠,片 2 的Q0∼Q3Q_0\sim Q_3⁠)为 1011 0000,DIR=0D_{IR}=0⁠,右移两次后内容是什么?片间怎样连接?

答案与提示

0010 1100。连接:片 1 的Q3Q_3接片 2 的DIRD_{IR}⁠;若要双向,再把片 2 的Q0Q_0接片 1 的DILD_{IL}⁠;两片的S1S_1⁠、S0S_0⁠、CLK、RD‾\overline{R_D}分别并联。(Python 核对。)


下一讲预告

第 16 讲(上):从 T' 触发器的翻转出发,搭出同步、异步二进制和十进制计数器,弄清它们的原理和状态转换规律。

👉 点击进入下一讲:第16讲(上)|同步/异步计数器的原理

评论

还没有评论。 来写第一条。

留下一条评论

选填,不会公开

纯文本,链接会自动识别。