Ch6 Registers & Register Transfers

本篇笔记详细介绍了寄存器及其传输操作的基本概念,包括寄存器的结构、控制信号的作用、寄存器传输语言(RTL)的使用,以及不同类型的寄存器和计数器的设计方法。内容涵盖了并行加载、双向移位、计数器的工作原理及其设计注意事项,最后探讨了基于多路选择器的设计方法和时序电路的设计方法。(由 gpt-4o-mini 生成摘要)

1. 寄存器 Registers

一个 nn 位的寄存器包含 nn 个触发器,还有若干组合电路来实现特定功能,如移位、计数等。

一般通过一个 LoadLoad 信号来控制寄存器,LoadLoad 信号一般通过更高阶的电路控制。可以把 LoadLoad 信号和 ClockClock 信号的 AND 来作为触发器的控制信号:

  • Load=1Load=1 表示 载入(load),新数据被写入寄存器。
  • Load=0Load=0 表示 储存(store),寄存器保持已经写入的数据。

SFJK7MOd.png

时钟偏斜(clock skew)

如果给时钟信号加上一个非门,那么不同触发器的控制信号的时间存在一个非门的延时。

一种解决方案是时钟信号直接接到所有触发器的控制信号上,但触发器的输入信号接一个 2-to-1 MUX,根据控制信号选择是加载触发器的输出,还是从输入流中加载。

如果载入操作在同一个时钟脉冲中完成,我们称之是并行(parallel) 的。

2. 寄存器传输操作 Register Transfer Operations

寄存器传输操作(register transfer operation):处理存储在寄存器中的数据的操作。

CPBN1eDH.png

微操作(microoperation):关于寄存器传输的初级操作,包括 load/count/shift/add/bitwise OR 等等。

2.1. 寄存器传输语言 Register Transfer Language

寄存器传输语言(register transfer language, RTL) 用来表述寄存器传输操作。

  • 字母和数字:表示寄存器
  • 小括号:表示位的范围(如 R(1)PC(7:0)
  • 箭头:表示数据的传输(如 R1 <- R2)
  • 逗号:用于分开多次操作
  • 方括号:(可通过寄存器)指定内存地址(如 R0 <- M[AR]
  • 条件传输(conditional transfer):如 K1: (R2 <- R1) 表示当 K1 寄存器的值为 1 时执行 R2 <- R1

关于寄存器传输操作的硬件描述语言的比较

如用 RTL 来描述一个加减法器的行为(X=0\text X=0 时加法,X=1\text X= 1 时减法):

X K1:R1R1+R2X K1:R1R1+R2+1\begin{aligned} \overline{\text{X}}\ \text{K1}&: \text{R1} \leftarrow \text{R1} + \text{R2}\\ \text{X}\ \text{K1} &: \text{R1} \leftarrow \text{R1} + \overline{\text{R2}} + 1 \end{aligned}

2.2. 数据传输结构 Register Transfer Structures

2.2.1. 基于多路选择器的传输 Multiplexer-Based Transfers

多个输入通过一个多路选择器进行选择,从而给到目标寄存器中。

YWD6lMjz.png

2.2.2. 基于专有的多路选择器的传输 Dedicated MUX-Based Transfers

这里专有的(dedicated) 的 MUX 的意思是说,每个寄存器的输入都通过一个独立的 MUX 进行选择。

SXBI8Gww.png

  • PROS:可以实现在一个时钟节拍中同时的数据传输。
  • CONS:门输入代价高。
    • GN 的计算:MUX 的反相器是可以共享的,每一个 MUX 里需要两个 2 输入与门和一个 2 输入或门,共 GN=3×6+3=21GN = 3 \times 6 + 3 = 21

2.2.3. 多路选择器总线 Multiplexer Bus

总线(bus) 的主要思想在于让多个寄存器共享一个多路选择器和数据传输路径,把这个多路选择器称作是共享的(shared)vmPTRYOb.png

dWamWDYH.png

2.2.4. 三态门总线 Three-State Bus

三台总线的实现需要用到三态门(tri-state gate),因为其可以输出高阻态,从而使得来自多个寄存器的输出可以直接连起来而不需要逻辑门或 MUX 的控制。

MhJmWI1e.png

3. 移位寄存器 Shift Registers

一个普通的移位寄存器(shift register) 如下:

GWS45J0I.png

  • 串行输入(serial input)In\text{In}
  • 串行输出(serial output)Out\text{Out}
  • 并行输出(parallel output)A\text AB\text BC\text COut\text{Out}

3.1. 并行加载移位寄存器 Parallel Load Shift Register

yE3R4xpn.png

通过给输入信号加一个 2-to-1 MUX 可以实现并行加载功能,这样在 SHIFT 为 0 时,移位寄存器 {A,B}\{A,B\} 会直接从 {DA,DB}\{D_A, D_B\} 加载数据,并且这一加载过程在同一时间发生(是并行的)。

aUweTYxa.png

如果需要支持保持(hold) 功能,可以换成 3-to-1 MUX,并接一路从自己这来的输出,功能表如下:

Shift Load Operation
0 0 保持 no change
0 1 加载 load
1 x 移位 shift down

注意,实现保持功能时,我们不能直接给时钟信号 CP 加一个与门,这样的话与门的延迟同样会导致上文提到过的时钟歪斜(clock skew) 问题。

3.2. 双向移位寄存器 Bidirectional Shift Registers

再换用 4-to-1 MUX 可以让我们的移位寄存器同时支持两个方向的移位操作,电路的一部分如下图所示。

r45GWNkA.png

其功能表如下(S1,S0S_1,S_0 为控制信号):

S1S_1 S0S_0 Operation
0 0 保持 no change
0 1 向下移位 shift down
1 0 向上移位 shift up
1 1 平行加载 parallel load

如果需要让移位寄存器支持更多功能,更换 MUX 并设计相应电路即可。

4. 计数器 Counters

zNJtJh5M.png

4.1. 纹波计数器 Ripple Counter

触发器 DAD_A 把时钟信号作为控制信号 CRC_R,其反转频率是时钟信号的一半;DBD_BDAD_A 的输出作为控制信号,其反转频率是 DAD_A 的一半,是时钟信号的四分之一。从而实现计数器的功能。

  • 最低有效位(LSB)
  • 最高有效位(MSB)

从最低有效位开始计数,低位触发器的输出作为更高一位触发器的控制信号。

q5pDrDSj.png

时延计算:分析是上升沿还是下降沿,或者直接 tpdt_{pd}

4BXhdNoW.png

4.2. 同步计数器 Synchronous Counters

触发器只用来保存状态,计数的功能用组合电路(nn 位计数器只需要 nn 个半加器)实现。所有触发器同步改变。

  • 计数使能(count enable = CE):控制是否进行计数,当 CE=1\text{CE} = 1 且边沿到来时进行一次计数,当 CE=0\text{CE} = 0 时处于保持状态。
  • 进位输出(carry output = CO):给出最高的进位作为输出,可以指示计数器是否达到上界。

HkSwHtKj.png

类似于加法器,我们也可以在并行计数器中实现提前进位:

p1gE6i6d.png

4.3. 支持平行加载的计数器 Counter with Parallel Load

通过一个 2-to-1 MUX 控制是从 D\text D 中并行加载还是从组合逻辑中加载。

k3YE7pPN.png

4.4. 模 N 的计数器 Counting Modulo N

我们以设计模 10 的计数器(BCD 计数器为例),那么只有 0099有效的(valid),剩下的 6 个状态都是未使用的状态。

5yHkPXH1.png

写出状态转移的激励方程,并通过卡诺图化简,可以得到我们需要的组合逻辑。

j0dWfJp0.png

需要注意的是,虽然剩余 6 个状态是未使用状态,但是如果计数器因为意外处于未使用状态时,他的下一状态是确定的,画图可知我们设计的这一计数器在有限步后又会回到有效状态(称为自恢复能力;并非对于所有计数器都成立后,最好设计成这样的)。我们也可以设计一个 Error\text{Error} 输出,用于指示是否进入了未使用状态,同样可用卡诺图进行化简。

不推荐的设计(自杀式计数器):让模 nn 的计数器在输出变成 nn 时直接给所有寄存器异步清零。如果异步清零过程的时延不同,可能“卡在”中间的任意有效状态,非常不稳定。

5. 寄存器单元设计

5.1. 基于 MUX 的设计方法 Multiplexer Approach

  • 寄存器功能(register functions):可以通过寄存器传输语言 RTL 来描述。

  • 控制输入(control inputs):输入控制信号,控制信号的可以是编码的(encoded) 或未编码的。

btfn5DDT.png

  • 数据输入(date inputs):从寄存器中输入。

Example

cQwlfOFm.png

5.2. 基于时序电路的设计方法 Sequential Circuit Design Approach

这里状态本身就是输出,所以一定是摩尔型电路。使用时序电路的相关方法进行设计,虽然结果更优但设计过程非常麻烦。

Example

评论

TABLE OF CONTENTS

1. 寄存器 Registers
2. 寄存器传输操作 Register Transfer Operations
2.1. 寄存器传输语言 Register Transfer Language
2.2. 数据传输结构 Register Transfer Structures
3. 移位寄存器 Shift Registers
3.1. 并行加载移位寄存器 Parallel Load Shift Register
3.2. 双向移位寄存器 Bidirectional Shift Registers
4. 计数器 Counters
4.1. 纹波计数器 Ripple Counter
4.2. 同步计数器 Synchronous Counters
4.3. 支持平行加载的计数器 Counter with Parallel Load
4.4. 模 N 的计数器 Counting Modulo N
5. 寄存器单元设计
5.1. 基于 MUX 的设计方法 Multiplexer Approach
5.2. 基于时序电路的设计方法 Sequential Circuit Design Approach