不奢望岁月静好 只希望点滴积累

0%

FPGA和ASIC(32讲)

FPG

CPU其实是一些简单的门电路搭建而成、从最简单的门电路、搭建成半加器、全加器, 然后再搭建完整功能的ALU. 这些功能有完成各种实际计算功能的组合逻辑电路、也有用来控制数据访问、创建出寄存器和内存的时序逻辑电路, 一个4核 i7的CPU、大约有20亿个晶体管.

思考:

如何保证连接20亿晶体管时不出错 ?若每验证一次bug就重新生成一块芯片、代价过高.

1
2
3
4
5
现场可编程门阵列(Filed-Programmable Gate array)解决了这个问题.
P: Programmable, 可通过编程来控制的硬件
G: Gate, 代码芯片里的门电路, 各种编程功能的实现、依赖的就是一个个的门电路
A: Array, 阵列, 是说在一块`FPGA`上、布满了大量的门电路
F: 一块`FPGA`的板子、可以多次进行编程、不像`PAL`(Programming Array Logic, 可编程阵列逻辑)这样古老的硬件设备、只能编程一次.

思考:

如何对硬件进行编程呢 ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CPU其实是通过晶体管、来实现各种组合逻辑或者时序逻辑、如何去`编程`这些线路呢 ?
一、用存储功能实现组合逻辑
在实现CPU时、需要完成各种各样的电路逻辑、在FPGA里、这些基本的电路逻辑、不是采用布线连接的方式进行的、
而是预先根据软件里设计的逻辑电路、算出对应的真值表、然后直接存到`LUT(Look-Up Table, 查找表)`的电路中
(其实就是一块存储空间、存储了输入特定信号时、对应输出是0还是1)
如图(Look-Up Table)示:
这个查表的方法、其实就是FPGA通过LUT来实现各种组合逻辑的方法

二、对于需要实现的时序逻辑电路、可以在FPGA里直接放上`D触发器`、作为`寄存器`.
和CPU里的触发器本质相同、会把多个LUT的电路和寄存器组合在一起(称为`逻辑簇`).
在FPGA里、组合了多个LUT和寄存器的设备叫 `CLB`(Configurable Logic Block, 可配置逻辑块)
通过配置CLB实现的功能类似全加器、是基础电路上的组合、可提供更复杂的功能、更复杂的芯片可以从CLB组合搭建、不用从基本门电路

三、FPGA是通过可编程逻辑布线来连接各个不同的CLB、最终实现我们想要的功能芯片.
可类比为铁路网、整个铁路系统已经铺好、单设计了很多岔道、通过控制岔道来确定不同列车的线路.
在可编程逻辑布线里、编程做的、就是拨动像岔道一样的各个电路开关、最终实现CLB之间的连接、完成我们想要的功能

Look-Up Table.png

image.png

ASIC

虽然在手机或者录音笔上塞上一个Intel的CPU可以实现拍照、录音等功能、但, 显然比较浪费、于是: 考虑为专门用途的场景、设计单独芯片, 称为:
ASIC(Application-Specifed Integrated Circuit) -> 专用集成电路, 电路比较精简、制造成本也比CPU低、功耗也较小

思考:

可以FPGA实现ASIC的事情吗?

1
2
3
4
5
6
7
8
9
10
可以、而且成本和功耗上要优于做通用计算的CPU和GPU、

那: 为什么不直接使用FPGA替代ASIC呢 ?
硬件上的浪费. 每一个门电路都是一个小小浪费、一个LUT电路设计出来、既可以实现`与`门、
又可以实现`或`门、用到的晶体管是比单一功能要多的、单品FPGA的生成制造成本也较高
FPGA的优点是: 无硬件研发成本、ASIC的电路设计、需要仿真、验证、还要经过六篇、变成一个印刷的电路板、最终变成芯片、
从研发到上式、最低花费也要几万美元、高的话、可能在几千万到数亿美元、还要失败的可能,
若设计的芯片最终只制造几千片、那还是FPGA的成本较低

实际上: 到底采用FPGA这样的可编程通用硬件、还是ASIC这样的专用芯片, 核心决定因素还是成本(不止是单个芯片的制造成本、还包括总体拥有成本)

FPGA 本质上是一个可以通过编程来控制硬件电路的芯片、通过LUT这样的存储设备来代替硬连线的电路、有了可编程逻辑门、然后把LUT和寄存器放在一起、变成一个更复杂的电路CLB, 单号通过可编程布线中的开关、设计成芯片、FPGA常用来进行芯片的设计和验证、也可直接当成专用芯片、替代CPU或者GPU
相比FPGA, ASIC设计出来的芯片针对特殊场景、研发成本高、制造成本和能耗较低、针对大量需求、适合ASIC