从结构上浅谈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输入查找表能存储2^{^{N}}Bit数据

结语

        上述的看法是我个人的一些朴素的观点,现代FPGA结构日新月异,其中设计的奥妙不是通过我这三言两语能够讲清楚的,但上面的朴素理解对于我们FPGA工程师来说至关重要,就好比计算机组成对于优秀程序员的作用一样,我们不是专业制造FPGA,但我们一点要在心里对FPGA有一个核心的认识,这就是所谓学习的哲学。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值