L5:数字系统设计 Digital System Design

CMOS 逻辑门与 RISC-V 数据通路的同步时序设计,触发器与建立/保持时间的计算

怎么数集阴魂不散,这一章我怎么记得他连讲都没讲(doge)

CMOS

img

MOS 网络

反向网络

电路中的x和y呈现反向关系。

img

多输入网络

利用真值表可以列出输出和所有输入的关系

img

img

逻辑门设计实例

img

AOI21 中数字 2 和 1 表示:一个 2 输入 AND 项:A⋅B; 一个 1 输入项:C; 然后两项OR,最后整体取反。

RISC-V数据路径设计 | Data Path

整个的部分主要围绕RISC-V数据路径各个部分的设计展开,包括同步电路设计,多路选择器,ALU等等。

img

同步数字系统电路设计

同步数字系统主要由两类电路组成:组合逻辑电路和时序逻辑电路。

程序计数器 | Program Counter

程序计数器用来保存当前指令地址

img

如果没有寄存器隔离,当前 PC 和 PC+4 会同时出现在同一条反馈线上,电路会不断变化PCPC+4PC+8PC+12...PC→PC+4→PC+8→PC+12→...

所以要加一个状态元件,也就是寄存器/触发器,用来在某个时钟边沿才更新 PC。

添加正边沿触发器以后,程序计数器的时序逻辑图如下。

img

边缘触发器 | DFF

D Flip-Flop 是时序电路中最基本的存储单元,DFF是在时钟边沿采样输入。

img

元件工作方式
RS latch对电平敏感,时钟为有效电平时可能一直变化
DFF对边沿敏感,只在时钟边沿更新
Flip-Flop Timing
  • 建立时间tsetupt_{setup})表示在时钟上升沿到来之前,D 输入必须提前稳定一段时间。下图中电路的建立时间为:Tsetup=2Tinv+TpgT_{setup}=2T_{inv}+T_{pg}
  • 保持时间tholdt_{hold})表示在时钟上升沿之后,D 输入还需要继续保持稳定一小段时间,在理想化 DFF 结构中,时钟边沿之后不需要额外保持时间。
  • 传输延迟tclktoQt_{clk−to−Q})表示时钟上升沿来了以后,Q 不会立刻变化,而是过一段时间才更新。

img

img

最大时钟运行速度

时钟周期必须满足:tcycletclktoQ+tCL+tsetupt_{cycle}≥t_{clk−to−Q}+t_{CL}+t_{setup}

img

例1 PC电路

计算最大时钟频率,最小时钟周期为:tmin=tsetup+tadd+tclktoQt_{min} = t_{setup} + t_{add} + t_{clk-to-Q}

img

例子中给出:tsetup15pst_{setup} \geq 15ps, tadd=75pst_{add} = 75ps, tclktoQ10pst_{clk-to-Q} \geq 10ps

所以:tmin15ps+75ps+10ps=100pst_{min} \geq 15ps + 75ps + 10ps = 100ps

因此:fclkmax1100ps=10GHzf_{clk-max} \leq \frac{1}{100ps} = 10GHz

例2

参考图中的波形图很好理解公式的推导。

img

提醒

对于图中setup time计算的理解

当launch path把数据传到UFF1的D输入口时,此时距离UFF1的下一个周期的上边沿的时间要大于setup time,留有足够多的裕量。

问题

对图中 hold time 计算的理解

在 UFF1 刚刚采样完旧数据之后,新数据会不会太快到达,把旧数据破坏掉?要求新数据到达UFF1的D输入口的时间要满足 hold time 的所允许最短时间。

有限状态机 | FSM

通过逻辑和寄存器的组合,任何FSM都能在硬件中实现。

img

案例 | 串行通信

img

针对图中所述的要求,设计一个检测“连续3个1”的FSM,状态转换如下图:

img

提醒

对于状态机主要工作流解释:

S0 开始,说明还没检测到连续 1。 如果输入 1,说明看到第一个 1,所以进入 S1。 如果在 S1 又输入 1,说明已经看到 11,进入 S2。 如果在 S2 再输入 1,说明出现了 111,所以输出 1,表示检测成功,可开始读取wifi发送的数据了。

多路选择器

2 to 1 选择器

根据真值表写出逻辑表达式,化简后画出右图的具体结构。

好多手画,难评。。。还有就是应该用不到用真值表,直接写不更简单(doge)

img

img

4 to 1 多路选择器

选择项增加后可以复用前面的 2to1 选择器进行层次化设计,如右下图。

img

img

4 to 1 多路选择器的真值表有64行。

算术逻辑单元 | ALU

大多数处理器都包含一个特殊的逻辑块,称为“算术和逻辑单元”(Arithmetic and Logic Unit)。

下面主要是展示一个简单的ALU,包括ADD, SUB, bitwise AND, bitwise OR运算。

img

下图是ALU整体框图:

img

加法器设计

1位全加器设计

半加器和全加器的真值表及逻辑表达式

img

img

全加器逻辑表达式:si=XOR(ai,bi,ci)si = XOR(ai, bi, ci), ci+1=MAJ(ai,bi,ci)=aibi+aici+bicic_{i+1} = MAJ(ai, bi, ci) = a_i b_i + a_i c_i + b_i c_i

img

N bit 加法器链

img

二进制补码加法器/减法器

img

关键路径

在同步系统中设置时钟周期时,必须考虑到最坏的情况。

最糟糕情况的组合逻辑路径称为“关键路径(critical path)",它可以通过“门延迟(gate delays)”的数量来估计:在最坏的情况下必须通过的门的数量。

ALU 的关键路径通常是:

最低位进位输入 → 一路穿过所有全加器 → 最高位结果 / overflow

处理器设计流程

  1. 分析指令集:先看处理器要支持哪些指令。
  2. 确定数据通路需求:根据指令判断需要哪些硬件,比如寄存器、ALU、内存、PC 等。
  3. 选择数据通路组件并确定时钟方法:决定用哪些组合逻辑和状态元件。
  4. 组装数据通路:把寄存器、ALU、内存、MUX 等连接起来。
  5. 设计控制逻辑:根据不同指令产生不同控制信号。

设计步骤1:分析指令集

RISC-V精简子集

详细可见 L4b-machinecode 这一章的讲述。

img

寄存器转换语言 | RTL

所有指令都先从内存中取指令,然后根据指令定义和类型执行不同操作。

img

设计步骤2:指令集(Instruction Set)对硬件的要求

  • 指令内存和数据内存:取指令、读写数据。
  • 寄存器文件:读取 rs1rs2,写回 rd
  • PC:保存当前指令地址。
  • 符号扩展器:把 imm12 扩展成 32 位。
  • ALU:执行加、减、OR 等操作。
  • PC + 4 加法器:顺序执行下一条指令。
  • 分支比较逻辑:判断两个寄存器是否相等。

数据通路的通用结构

img

设计步骤3:设计数据通路组件并确定时钟方法

主要设计组合元素,状态元素+时钟方法以及构建块。

img

ALU的需求

ALU需要设计加法,减法,逻辑或等算术功能。

ADD:加法。

SUB:减法。

ORI:按位 OR。

BEQ:判断两个寄存器是否相等。

也需要给定测试向量,测试ALU操作的输出是否正确。

存储需求

理想化内存

内存需要一个输入总线和一个输出总线。下图的内存模块的接口有:

Address:地址输入。

Data In:写入内存的数据。

Data Out:从内存读出的数据。

Write Enable:写使能。

Clk:时钟。

img

工作方式

  • Write Enable = 0:读内存。地址有效后,经过访问时间,Data Out 有效。
  • Write Enable = 1:写内存。在时钟作用下,把 Data In 写入指定地址。

时钟输入

在写操作期间,CLK输入只是一个因素;在读取操作期间,表现为一个组合逻辑块:地址有效后,数据会在“内存访问时间(access time)”后才有效。

寄存器文件 | Register File

Register File 类似 D 触发器,但输入输出位更宽,有 N 位输入和 N 位输出,并且有 Write Enable

Write Enable的作用是:

  • Write Enable = 0:不写入,输出保持不变。
  • Write Enable = 1:在时钟上升沿,数据输出将变成数据输入

寄存器文件是由32个寄存器组成,包括2个32位输出总线: busA 和 busB和一个32位输入总线: busW。

寄存器工作方式

  • RA选择要放入busA(数据)的寄存器
  • RB选择要放入busB(数据)的寄存器
  • 当Write Enable为1时,RW (数字)选择通过busW (数据)写入的寄存器

时钟输入

在写操作期间,CLK输入只是一个因素;在读操作期间,表现为一个组合逻辑块: RA或RB有效后,busA或busB在“访问时间(access time)”后才有效。

设计步骤4:组装数据通路

img

设计步骤5:设计控制逻辑

img

L4b:机器码 Machine Code
L6a:单周期处理器设计

评论区