1. 前言
我们说的数字电路,一般是指逻辑数字电路,即通过逻辑门组合成的电路,也即我们常说的逻辑IC。IC除了逻辑IC之外,还有模拟IC,存储IC等。
IC设计,需要学习数字电路,需要学习Verilog/VHDL等设计语言,需要学习使用相关EDA,看起来非常难。IC设计是很难,但是简单的入门并没有那么难。
2. 数字电路
2.1. 基础
- 数字电路(Digital Circuit)
- 用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路。数字逻辑集成电路(IC)是数字电路在半导体晶圆上的物理实现。
- 模拟电路和数字电路
- 模拟电路信号更接近真实世界信号,但是抗干扰差。
- 数字电路信号一般使用2进制(0和1)编码,抗干扰佳,传输速度快。
- PAM4编码
数字信号一般使用2进制编码(NRZ编码),但是也可以使用其他编码方式,如PAM4编码, 可以传输更多的信号,如PCIe6即支持PAM4编码。
2.2. 门
- 数字电路构成
- 逻辑门是数字电路的基本构成,逻辑门主要用来执行布尔逻辑运算。
- 数字电路工艺
- TTL门
- 由电阻和三极管构成。
- 响应速度快。
- 三极管在导通时,基极需要保持一定的偏置电流,导致TTL工艺IC静态功耗高,难以大规模集成。
- CMOS门
- 由电阻和MOS管构成。
- MOS状态不变时(无论是导通或截止),其栅极没有电流,CMOS工艺的IC静态功耗低。(MOS管只在状态改变时产生电流)
- 当前逻辑IC的主流工艺是CMOS门工艺。
- TTL门
- 基本门
- 与门、或门、非门、同门
- 与门、或门、非门、同门
- 复合门
- 与非门、或非门、异或门、同或门
- 与非门、或非门、异或门、同或门
2.3. 组合逻辑电路
2.3.1. 加法器
- Full Adder(全加法器,带进位的加法器)
加法器,可以用与门、或门、异或门实现,也可以用或非门实现,还可以用其他门组合实现。
优先选择与门、或门、异或门的实现方式,这种方式消耗的门数最少,降低IC的功耗和面积。
2.3.2. 比较器
- 1-Bit Digital Comparator (1Bit比较器)
1Bit比较器是最简单的比较器。
以此为基础可以扩展为多Bit比较器。
2.3.3. ALU
-
算术逻辑单元(Arithmetic Logic Unit)。
-
CPU的每个核心至少有一个ALU。
-
负责算术运算、逻辑运算、位运算和比较运算等。
2.3.4. Mux
- 2×1 Multiplexer
多路选择器,根据输入选择输出。多路选择器可以扩展为支持更多输入控制。
2.3.5. 组合逻辑
- 组合逻辑电路:
- 由逻辑门构成。
- 电路通电时,电路立即执行完成,输出结果,可以认为是即时响应。
- Mux、Decoder、 Comparator等ALU单元都是组合逻辑电路。
- 组合逻辑电路时延
电信号的速度为30万公里/秒,在导线中的速度大概20万公里/秒。
1GHz的时钟的IC,其时钟周期为1ns,电运行距离20cm。
一个组合逻辑电路在IC中的总长度为10cm,电执行完的时间0.5ns,在1个周期内。
一个复杂的组合逻辑电路如果总长度为30cm,电执行完的时钟1.5ns,超过1个周期。
IC的执行以时钟周期为单位,在1个周期内,即可以认为立即执行完成。
IC的执行时间超过1个周期,即认为组合逻辑没有即时执行。
组合逻辑电路不要太过复杂,总执行时钟不能超过1个时钟周期。
(以上计算只是估算,实际组合电路中不同门、不同线宽等都影响电的实际速度)
2.4. 时序逻辑电路
2.4.1. 锁存器
- SR-Latch(SR锁存器)
- SR锁存器,能够锁存之前的状态。
- SR锁存器,有多种实现方式,下面以与非门来介绍。
- 当输入为1时,输出均为之前的状态。
- SR锁存器,能够保持之前的状态,有记忆功能。
2.4.2. D触发器
- D Flip Flop(D触发器)
- 基于SR锁存器,将R改为Clk时钟。
- 当Clk为0变到1时,查看SR锁存器真值表,输出锁存。
- 第1次采样Data电平1,Q输出1,并保持到下个上升沿。
- D触发器可以记忆输入信号的上个时钟采样的数据。
- 1个或多个D触发器组成寄存器,保存多位状态。
2.4.3. 分频电路
- 2分频电路
通过寄存器保持上一次状态来让实现2分频输出。
此电路可扩展为多分频输出。
2.4.4. 计数器
- 2Bit Up Counter
通过寄存器保存上个时钟的状态,达到更新状态。
2Bit 最多计数4种状态。
可扩展到多Bit计数器,计数更多状态。
2.4.5. 时序逻辑电路
- 时序逻辑电路(Sequential Logic Circuit)
- 时序逻辑电路与时钟序列有关的逻辑电路。
- 通过寄存器保存上个时钟周期的状态。
- 数据在时钟边沿(上升沿或下降沿)触发时更新。
- 大型计算,如果可以拆分为多个并行计算,那么可以使用组合电路在一个时钟周期内完成计算。
大型计算,如果不能在一个时钟内完成计算,则需要将计算分拆为多Step,每Step通过组合电路在一个时钟周期内完成计算,然后通过寄存器将结果传入下个时钟周期继续计算,完成所有Step之后,输出最终结果。
2.5. 状态机
State Machine(状态机),清晰的输入输出,更可靠的时序电路,可以实现更复杂的逻辑。
3. 数字电路硬件
3.1. ASIC
ASIC(特定应用集成电路)
- ASIC 是为特定应用或功能而专门设计的集成电路,可以高度优化以满足特定性能、功耗和面积要求。
- ASIC一般不集成CPU,不可编程。
- 常应用于放大器、滤波器、调制解调器、音频解码器、视频解码器等。 在IC发展早期,类型主要为ASIC。 实现相对简单。
- 灵活性不够,只能通过外部引脚完成一些简单的功能配置。
3.2. CPU
- 指令集发展
- 早期的IC都是特定应用的集成电路(ASIC),灵活性不够。
- 为了提升IC的灵活性,早期引入了助记符指令,IC可以执行自定义的助记符指令实现复杂逻辑操作。
- 随着IC逻辑进一步复杂,助记符指令也进一步发展变得复杂。
- 1970s,Intel推出微处理器,并在助记符指令的基础上专门的8080指令集,后来逐步发展为x86-64指令集。
- 1980s,RISC(精简指令集计算机)架构推出,相应衍生出MIPS、SPARC和ARM等架构和配套指令集。
- 2010年,RISC-V(Reduced Instruction Set Computer V)作为一种开放的指令集架构(ISA),由UC Berkeley提出。
- CPU发展
- CPU和ISA是同步发展的。
- ASIC引入控制单元模块来支持指令集,此时ASIC即变成了CPU。
- CPU控制单元负责读取指令集代码,解析执行相应的操作,并完成调用ALU,I/O输出等。
3.3. SoC
系统芯片,也称片上系统(SoC,System on Chip)是一种集成电路设计,它将计算机系统的许多组件集成到单一的芯片上。SoC 通常包括 CPU、总线(Bus)、其他Master模块(如Security Subsystem等)、DMA等其他Slave模块(如UART、IIC等) ,以提供完整的计算解决方案,降低用读电路开发难度。MCU可以认为是一种应用于嵌入式上的低功耗SoC。
IP(Intellectual Property,知识产权),类似软件开发中的库。IP的表现形式:
- 软IP,RTL代码(Verilog/VHDL),使用灵活,可扩展性强。
- 硬IP,完成物理布线的物理版图,使用简单,但可扩展性差。
3.4. FPGA
- FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种集成电路,它的最大特点是可以通过编程来配置其硬件逻辑。
- CPU可以通过编程增加灵活性,但是如果CPU对应的数字电路出现Bug,也是无法修改的。数字电路部署到- FPGA上,如果出现Bug,可以很方便地替换为新数字电路设计。
- 数字电路设计到IC生产,这一整个过程很长,也可以使用FPGA加速数字电路到生产部署。FPGA用于验证数字电路,提升数字电路设计的可靠性。
- FPGA适合需要灵活性和快速变化的应用场景。
4. 数字电路设计
4.1. 数字电路图
- Digital Circuit Diagram
- 早期的数字电路设计是直接手动绘制电路图,然后将晶体管和其他电子元件按照电路图附加在半导体材料上。
- 随着IC的技术发展,电路图可以使用基本模块,如加法器、D触发器、Mux等,可以提升手动绘制电路图的效率。
- 随着IC复杂度的进一步增加,手动绘制数字电路图的难度越来越大,急需要一种更便捷的方法。
- Advantage
简单,直观,可以快速设计小的数字电路。 - Disadvantage
针对大型/超大型数字电路,设计难度大,设计效率低。
4.2. 数字电路描述语言
4.2.1. 概念
- HDL
- 硬件描述语言(HDL)是一种专门用于描述数字电路的编程语言。
- 随着数字电路规模增加,手动绘制数字越来越难,效率越来越低。
- 使用一种编程语言来描述数字电路,然后用工具将编程代码综合成数字电路图。
- Traditional HDL
VHDL、Verilog/SystemVerilog。 - New HDL
- SystemC,基于C++的 的硬件描述和建模语言,主要用于IC开发前期的系统建模。
- Chisel,基于Scala的RTL级HDL,可以生成Verilog/SystemVerilog。
- SpinalHDL,基于Scala的RTL级HDL,可以生成Verilog,更好的可读性可维护性。
- MyHDL,基于Python的RTL级HDL,可以生成Verilog、VHDL。
- Synthesis Tools
- 商业综合工具,Synopsys Design Compiler, Cadence Genus等。
- 开源综合工具,Yosys, iverilog等。
4.2.2. 抽象层级
-
Level of Abstraction
- System Level:抽象高,关注功能,用于建模仿真,不关注时序细节,推荐SystemC。
- Algorithm Level:关注算法的实现,推荐语言C/C++,MATLAB。
- RTL Level:关注寄存器级传输行为,可以综合为实际数字电路,推荐语言VHDL,Verilog,Chisel。
- Gate Level:逻辑门级别,可以综合成实际数字电路,推荐语言VHDL,Verilog。
- Switch Level:基于三极管开关的实现,用于分析电路电气特性,推荐SPICE, Verilog-A。
-
Digital Circuit Design
- 系统级的HDL,虽然有一些高级综合技术可以综合为实际数字电路,但是实际使用较少。
- 门级HDL,抽象层级低,描述硬件效率低,一般不单独使用。
- RTL级抽象层中等,描述硬件效率高,并且可以综合成实际的数字电路,所以数字电路设计多用RTL级语言描述。
4.2.3. RTL
- RTL(Register Transfer Level)是一种用于描述数字电路设计的抽象级别,着重于在寄存器之间的数据传输和处理方式。
- RTL可以通过工具综合成实际数字电路。
- 实际数字电路设计多用RTL表示,因此一般用RTL来代指数字电路设计。
- RTL语言:Verilog/SystemVerilog、VHDL、Chisel等。