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之间的连接、完成我们想要的功能
|
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