虽说接触和学习 FPGA 有一段时间了,但每次在给人介绍FPGA时,还是不能说得很清楚。因为呢,FPGA还是很有门槛的。所以,针对FPGA的关键知识再学习和整理了一次。供参考,对于FPGA老鸟,直接跳过,如果是初学者,可以看看。
FPGA 做为一个特殊的芯片,为什么存在?原理如何?如何设计和使用FPGA。
1:什么是FPGA?
要理解FPGA,如果连计算机结构都不清楚(比如:冯诺依曼架构,标准指令集),还有数字集成电路设计(组合/时序逻辑,逻辑综合,CMOS电路,时序分析,布局布线,低功耗设计,存储设计,电路测试和验证),这些还是得大致了解一下。
最基础的知识: 乘法是可以通过 加(Add) 和 移位(Shift)来完成,
所以,加法器和移位器是一切运算的基础。这个很重要!!!!!
如上图,是移动运算和加法运算。
那具体我们要运算时,有哪些实现方案呢?这里要注意了,特别是做软件的同学,有两种方案:
一种是硬件方案,一种是软件方案,如何理解?
1.1:运算的软/硬件实现方案
以 4位(二进制)乘以 4位(二进制),我们的实现方案分为软件,硬件实现方案。
对于一个数学运算,我们可以通过软件来实现,比如:CPU
软件的实现方案就是:冯式定理,通过控制器,运算器,内存。控制器确认流程,接受输入,运算时通过内存来缓存中间结果,缓存数据再运算时做数据搬运,最终给出输出。
于是,会有很多搬运的过程。(冯式原理,也就是软件的计算原理,如下)
这种做法,非常符合人的思维习惯,相当于把一个问题拆成多个步骤,按顺序来执行。
另外,软件同学并不熟悉的是:可以通过硬件方式来实现:
上图是四位的乘法。如果我们认为4位的乘法是由多次移位和加法组成的,在软件实现时,可能会把一个乘法变成多次的运算,中间结果用内存来缓存。但是,在上图的硬件实现中,我们直接把运算的过程全部通过硬件一次完成了。当然, 它在往后传递数据,进行运算时,必须要保证同步。而同步实际上是靠其它来保证(这里不细讲了)。但确实,它没有缓存,搬运数据的过程,速度更快。
上图表达了最重要的 组织逻辑,时序逻辑的实现。前者不依赖历史和状态。后者依赖历史和状态有记忆的能力。
硬件可以将运算并行,总是在第一时间拿到结果后,立即进行下一步运算,运算更快。
结论:硬件的实现比软件的能耗比更低。硬件更快,消耗能量更小。
软件有很多高级编程语言来支持,符合人的思考逻辑,开发效率高。
硬件实现较复杂,开发难度大,并且,一旦在硬件上实现,不能修改,生产成本也很高。
1.2:FPGA可以结合软硬件的优势
那如何结合软件和硬件的优势?
FPGA是其中一种可编程的方式(运行快,可编程)Programable circuit
随着FPGA的工艺提升,芯片的产量越大,消耗越高,高于某个特定量,ASIC的成本会低于FPGA。
1.3:FPGA的特点
当然,FPGA的劣势也很明显:
1:编程难度大。
对于软件,只需要学习简单的指令,做一下编译就OK了。属于指令架构。
对于FPGA的编程,除了要学会电路编程语言verilog以外,还需要学会如何 Synthesis,place,rout,逻辑电路还需要映射到当前FPGA的 Primitive Cell。
2:比 ASIC 更贵一些(10x的面积),
3:比 ASIC 更慢一些。(3x的差距)
以上讲了那么多,关键是讲了FPGA