从结构上浅谈FPGA实现逻辑的原理
FPGA是啥?你要是在百度上一查,多数会搜到什么 Field Programmable Gate Array,现场可编程门阵列嘛,但是这句话对咱们新手理解FPGA起到的作用十分有限,其实不单是新手朋友,就连我这个玩了几个月的FPGAer也不求甚解,我脑海里隐隐约约的印象就是:
FPGA是一堆数字积木,你可以用他来搭建任何需要的数字电路。
这个概念伴随了我很久,直到我看了一本关于FPGA结构的书,虽然是走马观花地浏览了一遍,但还是给了我一些启发,今天特写一篇博客记录一下我的一些感悟。
先来总结一下FPGA的基本组成:
基本组成要素
- 可编程逻辑要素 :实现逻辑电路需求的电路,有乘积项、查找表和数据选择器等
- 可编程输入/输出要素:连接IO引脚和内部布线要素的模块,通常包含上拉、下拉、输入/输出方向和极性、转换速率、开漏等功能的控制电路,以及触发器等数据存储电路。
- 可编程布线要素:连接前两种要素
上图给出了一个岛型结构的FPGA,可以看出FPGA的组成有实现任意逻辑的软逻辑块(soft logic、不同厂家对此称呼不同,例如Xilinx称为CLB,Confugurable Logic Block;Altera公司将其称为LAB,Logic Array Block)、位于芯片四周的输入/输出要素(IOB)、布线要素(开关块SB、连接块CB、布线通道),同时我们看到FPGA内部还有乘法器块和存储器块等硬逻辑,最基本的FPGA结构就包含上述的要素。
软逻辑的核心:LUT查找表
FPGA属于PLD,即可编程逻辑器件的一种。
我们学过数字电路可以知道,数字组合逻辑实现的方式有许多种,你可以化简,或者不化简,但是条条大路通罗马,不同结构的电路也能实现相同的逻辑功能,因此在这个背景下,PLD的实现方式可谓是五花八门,比如基于乘积项的实现,基于查找表的实现,基于数据选择器的实现等等,如今我们使用的FPGA主要是用一种结构来进行任意逻辑的实现,那就是查找表。
入门的大家伙不知是否被各种教材以及综合后的电路图忽悠地认为FPGA是真的实现了Verilog描述的由与或非逻辑以及D触发器等原件组成电路图呢?、
从FPGA的实际结构上看,这样的观点是不正确的。
FPGA的核心,可编程逻辑的实现其实是由上面这个小小的的单元:查找表来实现的,根本就没有什么与或非的门级电路,就更不要说有人还想在FPGA上写写晶体管级的代码了。
查找表是基于SRAM实现的,其实说白了就是一块RAM内存,把输入当成地址,输出当成存储在里面的数据,对应一个输入(地址),就送一个输出(数据),以此实现任意逻辑的功能,毕竟,一个三输入的逻辑电路只有最多八个结果,一个四输入的逻辑电路最多只有十六个结果。
更通俗易懂的解释就是,好比一场考试,专用集成电路ASIC会认认真真把题目(对应输入)地从头到尾解出来(通过与或非逻辑门),而FPGA则更像打好了一份小抄(LUT中存储的数据),对着题目(对应输入)去找答案。
所以其实各个FPGA的开发工具在实现时所做的工作就是根据Verilog描述的逻辑,把结果都预先算出来,下载比特流的时候就把答案烧录进FPGA的LUT当中。
如果要实现时序逻辑的话,就在后一级套一个D触发器,如上图所示,最后用选择器选择输出时序逻辑还是组合逻辑。
给我们的启发
了解了LUT的原理以后,我们能得到什么启发呢?考试前要打好小抄?NONONO!
第一个启发是解释了为什么FPGA掉电之后逻辑会消失,因为LUT是基于SRAM,RAM的特性就是掉电易失。
第二个启发是关于LUTRAM和LUT之间的换算关系。有时候我们需要在片内存储数据,一般我们有专用的硬存储器模块,BRAM或者URAM存储,但是如果数据量较小,或者数据太大以至于硬存储模块都使用完了,这时候我们就需要使用LUTRAM来进行数据存储了。
之前我们提到过,3输入的LUT可以存储八个Bit,4输入的LUT可以存储16个Bit,这样我们可以得到一个朴素的换算关系:
N输入查找表能存储Bit数据
结语
上述的看法是我个人的一些朴素的观点,现代FPGA结构日新月异,其中设计的奥妙不是通过我这三言两语能够讲清楚的,但上面的朴素理解对于我们FPGA工程师来说至关重要,就好比计算机组成对于优秀程序员的作用一样,我们不是专业制造FPGA,但我们一点要在心里对FPGA有一个核心的认识,这就是所谓学习的哲学。
相关文章
- 关于Free自由协议增发逻辑技术开发详细丨Free模式系统开发项目方案讲解
- Linux查看物理CPU个数、核数、逻辑CPU个数,以及内存
- DAPP借贷理财挖矿系统开发逻辑分析(源代码)
- 性能测试|JMeter逻辑控制器(一)
- 拆解联想普慧算力逻辑链:一次新的场景革命
- MySQL算术/比较/逻辑/位/运算符与正则全解
- 【数理逻辑】谓词逻辑 ( 一阶谓词逻辑公式 | 示例 )
- SQL的逻辑运算符和比较运算符
- 逻辑漏洞挖掘之验证码漏洞总结
- ORACLE DataGuard Logical Standby 详解之:(六)优化逻辑Standby数据同步性能
- postgresql流复制原理以及流复制和逻辑复制的区别说明
- 逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解
- 在MySQL中构建逻辑回归模型(lrmysql)
- 从优质企业的共性,看SaaS的投资逻辑
- 深入了解MySQL三目语句提高代码逻辑简洁性与效率(mysql三目语句d)
- 擎朗机器人李通:配送机器人的商业逻辑与行业落地因果论 | CCF-GAIR 2019