学习导航

本章把多个触发器“串起来”,形成能够保存、移动和转换数字数据的移位寄存器。建议按“单级存储 → 四种输入/输出方式 → 双向移位 → Johnson/环形计数器 → 工程应用 → 故障排查”的顺序学习。文中的 Q₀ 通常是最先进入数据的级,Q₃/Q₇ 是移出端;具体方向以图中箭头为准。

一、先建立直觉:寄存器就是会移动的多位记忆

一个 D 触发器在时钟有效边沿把 D 的 0 或 1 存入 Q,并在下一次时钟到来前保持不变。因此,一个由 n 个触发器组成的寄存器能保存 n bit;每来一个时钟,级与级之间按照连线把数据复制到相邻级,这就是“移位”。

  • 存储容量:等于级数(触发器数),4 级就是 4 bit,8 级就是 1 byte。
  • 移位能力:每个时钟边沿把数据向右或向左移动一位;移入端补进新 bit,移出端丢出旧 bit。
  • 清零:用异步 CLR 或连续移入 0 均可清零;实际芯片通常提供专用清零端。

下图展示 D 触发器如何保存 1 或 0。

图8-1:D触发器作为存储单元

常见数据通路包括:串入串出(SISO)、串入并出(SIPO)、并入串出(PISO)、并入并出(PIPO),以及向左/向右旋转。箭头表示每个时钟数据移动的方向。

图8-2a:串行输入、右移、串行输出

图8-2b:串行输入、左移、串行输出

图8-2c:串行输入、并行输出示意

图8-2d:串行输入、并行输出

图8-2e:并行输入、并行输出

图8-2f:向右旋转

图8-2g:向左旋转

判断口诀

看到“一个数据线逐位进入”就是串行输入;看到“多根线同时装入”就是并行输入。输出端同理。类型的四字母缩写按“输入/输出”顺序读:SISO、SIPO、PISO、PIPO。

二、四种数据输入/输出方式

2.1 串入串出(SISO)

4 位 SISO 由 4 个 D 触发器串接而成。数据一次进入 1 bit,连续 4 个时钟后填满;再继续打时钟,最早进入的 bit 先从末级 Q₃ 出来。若串入序列按最低有效位优先(LSB first),必须结合移位方向判断最终并行排列。

图8-3:4位串入串出移位寄存器

Worked Example 8-1(保留原题与结论):5 位寄存器初始清零,按题图给定的数据和时钟波形输入。第 1 个时钟把第一个 1 存入,之后每拍右移;5 个时钟后寄存器为 Q₄Q₃Q₂Q₁Q₀=11010,波形见图8-4。若数据输入反相,只需把每拍采样到的 0/1 取反后重复同样的移位过程。

图8-4:Worked Example 8-1 的输入、时钟与寄存器状态

图8-5:8位串入串出寄存器逻辑符号

逐拍跟踪方法:先写初态;每个有效时钟边沿同时完成“新 bit → Q₀、旧 Q₀ → Q₁、旧 Q₁ → Q₂ …”。不要在一个时钟内使用已经更新后的值。

2.2 串入并出(SIPO)

SIPO 的装入过程与 SISO 完全相同,但每一级 Q 都引出,因此 4 个 bit 装满后可同时读出。它是“少线传输、多线处理”的核心电路。

图8-6:4位串入并出寄存器及逻辑符号

Worked Example 8-2(保留原题与结论):4 位寄存器初始全 1,按图8-7的串行输入和时钟逐拍移位。4 个时钟后状态为 0110。若第四拍之后继续保持串行输入为 0,再打 3 拍,寄存器状态为 0000

图8-7:Worked Example 8-2 波形与状态

74HC164 是典型 8 位 SIPO 芯片:A、B 为门控串行输入,CLR 为低有效异步清零,Q₀~Q₇为并行输出。只有 B=1 时,A 上的数据才能在时钟边沿进入。

图8-8:74HC164 8位串入并出移位寄存器

图8-9:74HC164 示例时序图

VHDL 读法

原书的 VHDL 将每一级 D 触发器实例串接:FF1 的 D 接 FF0 的 Q,依次类推。Clr 与数据相与实现清零效果;真实器件的异步 CLR 时序应以数据手册为准。

-- 8位串入并出结构的核心连接(示意)
FF0: dff1 port map(D=>D0 and Clr, Clock=>Clock, Q=>Q0);
FF1: dff1 port map(D=>Q0 and Clr, Clock=>Clock, Q=>Q1);
-- FF2 ... FF7 以同样方式连接

2.3 并入串出(PISO)

PISO 用多根并行线一次装入,再用一根串行线逐拍移出。SHIFT/LOAD=0 时选择并行输入;SHIFT/LOAD=1 时关闭并行通路并允许右移。选择逻辑本质是 AND-OR 多路选择器。

图8-10:4位并入串出寄存器逻辑图与符号

图8-10b:并入串出逻辑符号

Worked Example 8-3(保留原题与结论):图8-11给出时钟和 SHIFT/LOAD。第1拍并行装入 D₀D₁D₂D₃=1010,之后第2~4拍依次把剩余 bit 移到串行输出,第5拍全部移出(若 D₀持续为1,寄存器随后由1填充)。

图8-11:Worked Example 8-3 的输入、控制和串行输出波形

74HC165 是常用 8 位 PISO:SH/LD 低时异步并行装载,SER 支持串行输入,CLK INH 高可禁止时钟,Q₇及反相输出可用于串行读出。

图8-12:74HC165 8位并行装载移位寄存器

图8-13:74HC165 示例时序图

2.4 并入并出(PIPO)

PIPO 在同一个时钟边沿同时装入所有 bit,随后各 Q 端立即(经过触发器传播延迟)得到对应数据,适合寄存器间总线传输。

图8-14:4位并入并出寄存器

74HC195 支持并行访问,也可通过 J/K 串行输入实现其他三种工作方式。SH/LD 低时正沿同步并行装载;高时右移;CLR 为低有效异步清零。

图8-15:74HC195 4位并行访问移位寄存器

图8-16:74HC195 示例时序图

三、双向与通用移位寄存器

双向寄存器用控制信号选择左右两套门电路:RIGHT/LEFT=1 时右移,=0 时左移。边界级需要接入串行数据,避免移位时悬空。

图8-17:4位双向移位寄存器

Worked Example 8-4(保留原题与解题法):初态 Q₀Q₁Q₂Q₃=1101,串行输入为低。逐个时钟读取 RIGHT/LEFT 波形:高电平时向右移动,低电平时向左移动;每一拍只把旧状态按方向整体移动一位,空出的端补入0。图8-18(b)给出完整状态。

图8-18:Worked Example 8-4 控制波形与状态

74HC194 是 4 位通用双向移位寄存器,S₁S₀ 决定模式:00 保持,01 右移,10 左移,11 并行装载;所有动作通常在时钟正沿同步完成。

图8-19:74HC194 4位双向通用移位寄存器

图8-20:74HC194 示例时序图

四、把移位寄存器变成计数器

普通寄存器没有固定状态序列;把末级输出反馈到输入,就会形成具有确定循环序列的“移位寄存器计数器”。

4.1 Johnson 计数器

Johnson 计数器把最后一级的反相输出 (\overline Q) 反馈到第一级 D。n 级产生 2n 个状态,先逐步填入 1,再逐步填入 0。4 级序列为 0000→1000→1100→1110→1111→0111→0011→0001→0000;5 级同理,共10态。

图8-21a:4位 Johnson 计数器

图8-21b:5位 Johnson 计数器

图8-22:4位 Johnson 时序序列

图8-23:5位 Johnson 时序序列

4.2 环形计数器

环形计数器把末级 Q(不取反) 反馈到首级,通常预置“只有一个1”的模式。n 级只有 n 个有效状态,1 像指针一样绕环移动;优点是每个输出直接代表一个状态,无需复杂译码。

图8-24:10位环形计数器

Worked Example 8-5(保留原题与结论):10 位环形计数器初态 1010000000,有两个 1;每拍整体循环移动,因此每个 Q 输出是两个相隔固定拍数的脉冲叠加。图8-25(原书配图)展示各输出波形。初态 0101001111 时同样按“旋转而非重新计算”即可得到序列。

图8-25:Worked Example 8-5 环形计数器输出波形

五、工程应用

5.1 用于可调时间延迟

SISO 的延迟量为 [ t_d=nT_{CLK}=\frac{n}{f_{CLK}}. ] 例如 8 级、1 MHz 时钟的延迟为 8 μs。级联寄存器可增加延迟,从较低级输出可减少延迟。

图8-26:移位寄存器实现时间延迟

Worked Example 8-6(保留原题与结论):图8-27中时钟周期为 2 μs,输入到 Q₀~Q₇ 的延迟依次为 2、4、…、16 μs;改变时钟频率即可同比改变全部延迟。

图8-27:多级输出延迟计算

图8-28:图8-27的各级延迟时序图

5.2 74HC195 构成环形计数器

把 Q₃ 回接到串行输入,先用 SH/LD 并行预置 1000,随后每拍 1 循环移动,得到 4 态环形计数器。

图8-29:74HC195连接成环形计数器

图8-30:环形计数器两个完整周期的时序图

5.3 串行-并行转换与 UART

串行传输省导线,并行处理便于 CPU 运算;SIPO 先逐位采样,再一次性读出。典型异步帧为:1 个起始位 0、8 个数据位(可含奇偶校验)、1~2 个停止位 1,空闲时线路保持高电平。

图8-31:串行-并行转换器简化逻辑图

图8-32:串行数据帧格式

图8-33:串行-并行转换器时序

UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)同时包含串并和并串两条通路:接收时把串行帧还原为数据总线上的并行字节;发送时把并行字节加上起始/停止位后串行发出。

图8-34:UART在微处理器系统中的接口

图8-35:UART基本框图

5.4 键盘编码器

8×8 键盘矩阵由环形计数器逐行扫描:5 kHz 时钟经 8 态环形计数器后,每行约 625 次/秒被拉低检测。某行某列闭合后,行、列优先编码器分别输出 3 bit,合成唯一 6 bit 键码,再由寄存器锁存并送 ROM 转成字符码。

图8-36:简化键盘编码电路

六、逻辑符号中的依赖标注

74HC164 的 R 表示异步复位;箭头表示 Q₀→Q₇ 的数据流;1D1C 表示数据端受时钟端控制。74HC194 的模式编码为:0 保持、1 右移、2 左移、3 并行装载;1,4D2,4D3,4D 分别说明哪些输入在相应模式下受时钟控制。

图8-37:74HC164依赖标注逻辑符号

图8-38:74HC194依赖标注逻辑符号

七、时序逻辑故障排查

“Exercise(施加测试激励)”的目标是让每个触发器都经历 SET/RESET,让计数器走完全部状态,再观察输出是否符合预期。串并转换器可交替输入 1010101001010101,这样能暴露某一级卡死、时钟缺失、装载线异常等故障。

排查顺序:先比较输入寄存器输出;若输入寄存器正确而输出寄存器错误,检查输出寄存器的装载端、时钟、电源地和连线;若输入寄存器也错,则继续向前检查时钟发生器、计数器、单稳态和门电路。示波器测数字信号优先使用 DC 耦合,便于发现错误的 0 V 基准和浮地。

图8-39:交替测试码型

图8-40:串并转换器测试装置

图8-41:正常输出波形

八、应用综合:四位密码锁

密码锁把键盘输入的 BCD 码与 DIP 开关保存的预设码逐位比较。寄存器 A 保存键盘数字,寄存器 B 保存当前预设数字;比较相等时,寄存器 C 中的“1”右移一位。连续四次匹配后,1 移到输出端,驱动开锁;任意一次不匹配都让 C 重新装入 00010000

图8-42:密码锁系统框图

图8-43:密码比较逻辑

图8-44:密码选择逻辑

图8-45:密码锁 VHDL 编程模型

图8-46:密码锁 VHDL 组件

改成五位密码

将“成功匹配后右移”的寄存器 C 增加一级,并把预置的单个 1 放在对应起始位置;代码选择逻辑增加一组四位 AND 门,即可把比较次数从4次扩展到5次。

九、全章速记与自测

核心公式与结论

  1. n 级寄存器容量为 n bit;串行装入 n bit 至少需要 n 个时钟。
  2. 延迟:t=n/fCLK
  3. Johnson 计数器 n 级有 2n 个状态;环形计数器 n 级通常有 n 个状态。
  4. SHIFT/LOAD 决定“装载还是移位”;CLR 常为异步低有效,务必看符号上的小圆圈或横线。
  5. 右移相当于二进制数除以2(忽略移出的 LSB),左移相当于乘以2(忽略溢出)。

自测问题

  1. 4 位 SISO 初始清零,依次输入 1,0,1,1,第4个有效时钟后各级状态如何排列?
  2. 8 位 SIPO 需要多少个时钟才能装满一个字节?
  3. PISO 中 SHIFT/LOAD 为低和为高时,数据通路分别是什么?
  4. 74HC194 的 S₁S₀=10 表示哪种模式?并行装载是否与时钟同步?
  5. 8 位 Johnson 计数器的模是多少?8 位环形计数器的模通常是多少?
  6. 8 级寄存器使用 250 kHz 时钟,输入到末级输出延迟是多少?
  7. 键盘编码器为什么要用环形计数器扫描,而不是同时激活所有行?
  8. 串并转换器输出错误时,为什么应先检查输入寄存器的输出?

自测参考答案

  1. 按“新 bit 进入 Q₀、旧值逐级右移”逐拍写表;最终位序取决于图中 Q₀/Q₃ 定义。2. 8 个。3. 低:并行装载;高:串行移位。4. 左移;并行装载为同步操作。5. 16;8。6. 8/250 kHz=32 μs。7. 逐行激活可唯一定位列,避免多键同时造成歧义。8. 可将故障分界在输入寄存器之后,缩小排查范围。

原书图表与练习索引

本页已保留第8章所有原书 worked examples、练习图、测试图和代码对应图片;需要逐题练习时,可对照 df_slices/ch08.md 中的 Section Checkup、True/False Quiz、Self-Test、Problems 与 Answers。图8-47~图8-63等习题图如下。

图8-47:移位寄存器习题波形 图8-48:移位寄存器习题波形 图8-49:寄存器状态习题图 图8-49补图:寄存器状态 图8-50:串入串出习题波形 图8-50补图:输出波形 图8-51:习题输入波形 图8-52:8位寄存器输出波形 图8-53:74HC164习题波形 图8-54:并入串出习题电路 图8-54补图:并入串出波形 图8-55:74HC165习题波形 图8-56:74HC195习题波形 图8-57:8位双向寄存器习题 图8-58:双向寄存器控制波形 图8-59:74HC194习题输入 图8-60:环形计数器习题电路 图8-61:指定环形波形 图8-62a:故障波形 图8-62b:故障寄存器电路 图8-63:并入串出故障波形

资料说明

原书部分图号在 MinerU 解析中出现错位(例如图8-33与图8-32复用图片路径),本页以源文件实际路径为准,未删除任何图片资源。阅读芯片时钟有效边沿、异步/同步控制和位序时,必须优先依据电路图与器件数据手册。

十、原书其余配图(路径完整保留)

图8-6补图:串入并出实现照片 图8-9补图:74HC164相关实现 图8-12补图:74HC165实现照片 图8-13补图:74HC165 VHDL示意 图8-16补图:74HC195实现照片 图8-19补图:74HC194实现照片 图8-20补图:74HC194相关电路 图8-24补图:环形计数器实现照片 图8-29补图:环形计数器PLD示意 图8-31补图:串并转换器时序 图8-36补图:键盘编码器相关照片 图8-37补图:74HC164逻辑符号配图 图8-40补图:测试电路照片 应用逻辑补图:密码锁电路照片 应用逻辑补图:密码锁时序示意 应用逻辑补图:密码锁器件图 章节答案补图:移位状态 相关问题答案补图:双向移位 第9章衔接图:状态机示意 第9章衔接图:Moore状态机 补图:4位并行访问实现 补图:双向寄存器PLD实现 补图:时延应用照片 补图:环计数器答案图

自测一下