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

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

多输入网络
利用真值表可以列出输出和所有输入的关系
|
|
逻辑门设计实例

AOI21 中数字 2 和 1 表示:一个 2 输入 AND 项:A⋅B; 一个 1 输入项:C; 然后两项OR,最后整体取反。
RISC-V数据路径设计 | Data Path
整个的部分主要围绕RISC-V数据路径各个部分的设计展开,包括同步电路设计,多路选择器,ALU等等。

同步数字系统电路设计
同步数字系统主要由两类电路组成:组合逻辑电路和时序逻辑电路。
程序计数器 | Program Counter
程序计数器用来保存当前指令地址。

如果没有寄存器隔离,当前 PC 和 PC+4 会同时出现在同一条反馈线上,电路会不断变化
所以要加一个状态元件,也就是寄存器/触发器,用来在某个时钟边沿才更新 PC。
添加正边沿触发器以后,程序计数器的时序逻辑图如下。

边缘触发器 | DFF
D Flip-Flop 是时序电路中最基本的存储单元,DFF是在时钟边沿采样输入。
|
|
Flip-Flop Timing
- 建立时间()表示在时钟上升沿到来之前,D 输入必须提前稳定一段时间。下图中电路的建立时间为:
- 保持时间()表示在时钟上升沿之后,D 输入还需要继续保持稳定一小段时间,在理想化 DFF 结构中,时钟边沿之后不需要额外保持时间。
- 传输延迟()表示时钟上升沿来了以后,Q 不会立刻变化,而是过一段时间才更新。
|
|
最大时钟运行速度
时钟周期必须满足:

例1 PC电路
计算最大时钟频率,最小时钟周期为:

例子中给出:, ,
所以:
因此:
例2
参考图中的波形图很好理解公式的推导。

对图中 hold time 计算的理解
在 UFF1 刚刚采样完旧数据之后,新数据会不会太快到达,把旧数据破坏掉?要求新数据到达UFF1的D输入口的时间要满足 hold time 的所允许最短时间。
有限状态机 | FSM
通过逻辑和寄存器的组合,任何FSM都能在硬件中实现。

案例 | 串行通信

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

对于状态机主要工作流解释:
从 S0 开始,说明还没检测到连续 1。
如果输入 1,说明看到第一个 1,所以进入 S1。
如果在 S1 又输入 1,说明已经看到 11,进入 S2。
如果在 S2 再输入 1,说明出现了 111,所以输出 1,表示检测成功,可开始读取wifi发送的数据了。
多路选择器
2 to 1 选择器
根据真值表写出逻辑表达式,化简后画出右图的具体结构。
好多手画,难评。。。还有就是应该用不到用真值表,直接写不更简单(doge)
|
|
4 to 1 多路选择器
选择项增加后可以复用前面的 2to1 选择器进行层次化设计,如右下图。
|
|
4 to 1 多路选择器的真值表有64行。
算术逻辑单元 | ALU
大多数处理器都包含一个特殊的逻辑块,称为“算术和逻辑单元”(Arithmetic and Logic Unit)。
下面主要是展示一个简单的ALU,包括ADD, SUB, bitwise AND, bitwise OR运算。

下图是ALU整体框图:

加法器设计
1位全加器设计
半加器和全加器的真值表及逻辑表达式
|
|
全加器逻辑表达式:,

N bit 加法器链

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

关键路径
在同步系统中设置时钟周期时,必须考虑到最坏的情况。
最糟糕情况的组合逻辑路径称为“关键路径(critical path)",它可以通过“门延迟(gate delays)”的数量来估计:在最坏的情况下必须通过的门的数量。
ALU 的关键路径通常是:
最低位进位输入 → 一路穿过所有全加器 → 最高位结果 / overflow
处理器设计流程
- 分析指令集:先看处理器要支持哪些指令。
- 确定数据通路需求:根据指令判断需要哪些硬件,比如寄存器、ALU、内存、PC 等。
- 选择数据通路组件并确定时钟方法:决定用哪些组合逻辑和状态元件。
- 组装数据通路:把寄存器、ALU、内存、MUX 等连接起来。
- 设计控制逻辑:根据不同指令产生不同控制信号。
设计步骤1:分析指令集
RISC-V精简子集
详细可见 L4b-machinecode 这一章的讲述。

寄存器转换语言 | RTL
所有指令都先从内存中取指令,然后根据指令定义和类型执行不同操作。

设计步骤2:指令集(Instruction Set)对硬件的要求
- 指令内存和数据内存:取指令、读写数据。
- 寄存器文件:读取
rs1、rs2,写回rd。 - PC:保存当前指令地址。
- 符号扩展器:把
imm12扩展成 32 位。 - ALU:执行加、减、OR 等操作。
- PC + 4 加法器:顺序执行下一条指令。
- 分支比较逻辑:判断两个寄存器是否相等。
数据通路的通用结构

设计步骤3:设计数据通路组件并确定时钟方法
主要设计组合元素,状态元素+时钟方法以及构建块。

ALU的需求
ALU需要设计加法,减法,逻辑或等算术功能。
ADD:加法。
SUB:减法。
ORI:按位 OR。
BEQ:判断两个寄存器是否相等。
也需要给定测试向量,测试ALU操作的输出是否正确。
存储需求
理想化内存
内存需要一个输入总线和一个输出总线。下图的内存模块的接口有:
Address:地址输入。
Data In:写入内存的数据。
Data Out:从内存读出的数据。
Write Enable:写使能。
Clk:时钟。

工作方式:
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:组装数据通路

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












评论区