图8 :二选一多路选择器的真值表
根据数字组合逻辑电路的设计方法,首先做出布尔表达式,经过化简,得出简化后的布尔表达式,最后做出电路。
如果需要一个二选一多路选择器的等效电路,不关心内部是如何实现的。那么我们设计时,只需要考虑实现真值表的功能即可。当我们把真值表看做查找表时,A、B、S都是输入,任意指定一组值,都可以得出后面对应的Y即可。
下面解释一种器件:存储器。
存储器(Memory)是现代信息技术中用于保存信息的记忆设备。它根据控制器指定的位置存入和取出信息。
图9 :存储器模型
存储器中被分为了很多“小格子”,每一个“小格子”里面都可以放下很多的二进制数码。每个小格子都会有自己独特的标识,就像我们的门牌号一样,每个屋都是不同的。逻辑功能是当外部输入一个“门牌号”,对应的“小格子”里面的二进制数码就会输出。
存储器中的“小格子”的数量,在制造时,就已经确定。“小格子”的数量确定了,那么“门牌号”的形势也就被确定了。例:我们有100个房间,我们只有两个十进制的数码就可以表示了,00至99。在存储器中,“门牌号”也只能用二进制数来表示,例如:有4个“小格子”,那么“门牌号”就要用两个二进制码来表示,00~11。每个“小格子”里面存放的二进制数的个数,在制造时,也就确定好了。
通常我们把“门牌号”称为地址,“小格子”称为单个地址的存储空间,每个“小格子”能放下的二进制数码的个数称为“存储器的存储位宽”。
制作一个拥有8个地址,单个地址空间为1个二进制数码的存储器。此时,地址码应该有三位,每个地址对应的存储二进制数码 的个数为1个。要求:000地址中,放入0;001地址中,放入0;010地址中,放入1;011地址中,放入1;100地址中,放入0;101地址中,放入1;110地址中,放入0;111地址中,放入1;
图10 :存储器示意图
按照我们存储器的逻辑功能,给与地址,存储器就会给出对应地址中所存放的数据。那么存储器的功能表如下:
图11 :存储器的功能表
将存储器的功能表图11和二选一多路选择器的真值表图8相对比,我们会发现,除了自定义的信号名称不相同外,逻辑功能是相同的。那么也就是说,在黑盒设计时,我们可以将一个带有预设值的存储器放进去,它所对外的功能,也是可以实现二选一多路选择器的。此时,我们可以带有预设值的存储器可以等效为二选一多路选择器。
仔细观察,我们发现,任意真值表都可以用存储器来等效。那也就是说,存储器电路可以等效为任意组合逻辑的电路。
存储器电路的优势:不用做任何逻辑化简,不受基本逻辑门电路的样式限制,可以很快的得出最终的电路功能。如果存储器可以任意修改预设值的话,那么同一个存储器就可以随着不同的预设值等效为各类的电路。如果是基本门电路构成的话,就需要受到数量和样式的限制。
存储器电路的劣势:对于简单的门电路,用存储器实现是一种浪费。存储器电路也是一种相对复杂的电路。另外存储器电路的延迟一般偏大,原因同上。
在做数字组合逻辑电路设计时,如果采用门电路的设计方式,需要更新电路功能时,就需要重新布置电路结构,更换基本电路元器件;如果采用存储器等效的设计方式,只需要更改预设值即可。这种方法为我们做电路升级提供了一个很好的解决途径。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
在介绍FPGA芯片结构之前,首先就FPGA和单片机做一个简单的对比。
单片机是一种微处理器,类似于电脑CPU。它的电路是固定的,是通过软件编程语言描述软件指令控制微处理器进行工作;它的所有指令都是微处理器顺序执行的;
图12 :某单片机结构图
FPGA是一种半定制电路。它的电路也是固定的,但是可以通过硬件编程语言描述电路功能,重新配置电路功能,得到我们想要的电路的等效电路;它的所有功能都是利用电路来直接实现的,所有的功能都是可以并行执行。
图13 :与门逻辑功能示意图
要求实现两路信号的与操作,将结果作为一路信号输出。那么在单片机中和FPGA中都是如何实现此功能的呢?
在单片机中,假设我们已经将对应的变量和引脚已经分配结束。我们会编写如下一段代码:
CPU会首先去读取A管脚的电平值,放入到自己的通用寄存器。然后读取B管脚的电平值放入到自己的通用寄存器。然后将两个电平值进行相与,结果写入通用寄存器。最后将存放结果的通用寄存器的值存入到Y管脚对应的寄存器。每一步都需要很久的时间。
在FPGA内部会形成一个存储器的等效电路(与门),直接将A管脚电平和B管脚的电平相与的结果用线连接到Y管脚了。
有些人可能不太明白,觉得这两个是相同的。都是取两个电平,然后把结果输送出去。不一样的地方有两个:
第一:单片机执行是顺序的,也就是说,每个时刻只能做一件事情。假设A管脚被取完电平后,突然降低一段时间,然后又拉高了。但是此时CPU去取B管脚电平或者输送结果到Y管脚了。那么整个设计将不会察觉到A管脚被拉低了一段时间。在FPGA中,都是直接线连接的,没有任何控制逻辑,任何的变化都会直接反映到电路的结果上。
第二:由于单片机的执行时顺序的,也就是有一个时间表,每一个时刻干什么规定好的。而FPGA是纯逻辑实现,每时每刻所有的电路都在工作。速度上要比单片机快很多。
所以FPGA的本质实现是靠自己的逻辑功能电路来实现,单片机是靠控制CPU,让CPU单个控制各个逻辑功能电路顺序实现的。
在数字电路基础中,我们知道,所有的数字电路都是由组合逻辑和时序逻辑构成,而时序逻辑是由组合逻辑和时序逻辑器件构成。所以数字电路是由组合逻辑和时序逻辑器件构成。
电路的重新配置按照现在的技术还实现不了。例如:有一个asic,现在想要他换一种功能,这是现在实现不了的,因为其中的电路是固定的,并且没有重新配置的功能。
如果想要电路能够重新配置,在上一节中叙述存储器等效电路时,我们了解到存储器电路预设不同的值是可以完成不同的电路功能。
在FPGA中,由一定的存储器等效电路和时序逻辑器件构成最小单元。那么此单元可以被配置成为组合逻辑、时序逻辑。
图14 :CYCLONE IV E 可编程最小单元示意图
CYCLONE IV E是INTEL FPGA中CYCLONE系列的第四代。在上图中,四输入查找表(Four – Input LUT)其实就是一个有16存储空间,每个存储空间只有1个二进制数字的存储器,LUT(Look Up Table)就是查找表。设置合理的预设值,就可以实现一定的数字组合逻辑电路功能。
那为什么要固定为16存储器空间呢?如果我们要实现一个5输入的与门,那16个存储空间就不够用了。那么此时我们应该怎么办?
其实也很简单,只需要将5输入的与门分为一个四输入的与门,然后把结果和另外一个输入进行相与即可。对于存储器电路也可以这样做。
如果可以级联的话,那么做成2输入的是不是也可以的。原则上是可以的,但是如果我们实现的逻辑功能比较复杂的话,那么就会级联特别长,延时就会很大。那做成1000输入的话,是不是就好了,再复杂的话,都不用级联。可是在设计时,我们做的不仅仅是复杂逻辑,还有很多的不复杂的,那么一个二输入与门的设计也要占用一个1000输入,那就得不偿失了。所以经过衡量,最终设计者将输入做成了4输入的查找表。
经过不断的发展,FPGA在各个场合的应用越来越多,所做的设计越来越复杂,要求的延迟越来越小。于是新出的FPGA系列拥有更多的输入查找表。
在图2-14中,后面还有一个时序逻辑器件。这个时序逻辑器件是FPGA厂商直接做到FPGA内部的,我们设计电路时,不需要设计,只需要调用出来即可。
由此,我们就可以实现组合逻辑和时序逻辑的一个小部分了。但是复杂的设计,往往是需要级联的。
图15 :CYCLONE IV 中结构示意图
LAB中包含了很多最小可编程单元,这些可编程单元完成电路的一部分功能。然后通过各种interconnect(连线)互联,最终实现我们想要的复杂的逻辑功能。
通过可编程单元和连线资源就可以完成各种电路功能,但是最终还是在芯片内部,为了能够和外部的芯片进行通信,一定会需要IO单元。
图16 :CYCLONE IV的IO单元
在IO单元中,我们可以发现整个IO单元可以被配置为输入、输出、输入出。并且其中可以是否配置上拉电阻,以及电路延迟等等功能。
FPGA的IO数量较多,在需要同时控制多个外设时,不需要级联,一致性会比较好。
图17 :CYCLONE IV E的某块FPGA的IO供电bank
在FPGA中,内部逻辑运行是一种电压。输入输出被分为了好多个块(bank),每一个块都可以有自己的电平标准,这就让FPGA可以在不用转换电路的情况下,驱动多个不同电压标准的接口。
在图17中可以看到FPGA的内部逻辑电压相对较低,所以FPGA的功耗也相对较低。
通过上述的三种结构,一个简单的FPGA芯片就可以实现了。
在FPGA应用时,我们发现经常用到一些缓存和特殊电路,并且对这些电路的要求比较高,用FPGA实现不太现实。那么FPGA就会将其集成到FPGA内部,用大量的互联资源引出接口,供给内部逻辑进行控制或者通信。
设计者可以利用FPGA的资源实现CPU的功能,构成SOPC。
现在的很多FPGA将ARM的硬核放入到自己内部,构成SOC。
本文只是简单介绍FPGA内部结构,后续在设计时,需要详细了解结构时,会单独列出来详细讲解。有兴趣的同学可以自己查询FPGA的介绍文档。
FPGA是一种芯片,有很多的厂商都在生产和销售,下面简要介绍几个厂家以及他们的芯片。
Altera公司(阿尔特拉)自二十年前发明世界上第一个可编程逻辑器件开始,秉承了创新的传统,是世界上“可编程芯片系统”(SOPC)解决方案倡导者。Altera结合带有软件工具的可编程逻辑技术、知识产权(IP)和技术服务,在世界范围内为14,000多个客户提供高质量的可编程解决方案。我们新产品系列将可编程逻辑的内在优势——灵活性、产品及时面市——和更高级性能以及集成化结合在一起,专为满足当今大范围的系统需求而开发设计。
在2015年12月Intel斥资167亿美元收购Altera公司。至此,我们将Altera FPGA更名为Intel FPGA。
Intel FPGA的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Cyclone系列;还有一种侧重于高性能应用,容量大,性能能满足各类高端应用,如Startix、Arria系列等,用户可以根据自己实际应用要求进行选择。在性能可以满足的情况下,优先选择低成本器件。
Xilinx(赛灵思)是全球领先的可编程逻辑完整解决方案的供应商。Xilinx研发、制造并销售范围广泛的高级集成电路、软件设计工具以及作为预定义系统级功能的IP(Intellectual Property)核。客户使用Xilinx及其合作伙伴的自动化软件工具和IP核对器件进行编程,从而完成特定的逻辑操作。
Xilinx的主流FPGA分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Spartan系列;还有一种侧重于高性能应用,容量大,性能能满足各类高端应用,如Virtex系列,用户可以根据自己实际应用要求进行选择。在性能可以满足的情况下,优先选择低成本器件。
继Xilinx正式向外界发布其推出全球首颗28nm制程的Kintex-7后,该公司推出7系列四款芯片Artix-7、Kintex-7、Virtex-7和Zynq的FPGA芯片,以及围绕7系列的开发资源。
ACTEL公司成立于1985年,位于美国纽约。之前的20多年里,ACTEL一直效力于美国军工和航空领域,并禁止对外出售。国内一些特殊领域的企业都是采用其它途径购买军工级型号。目前ACTEL开始逐渐转向民用和商用,除了反熔丝系列外,还推出可重复擦除的ProASIC3系列(针对汽车、工业控制、军事航空行业)。
莱迪思(Lattice)半导体公司提供业界最广范围的现场可编程门阵列(FPGA)、可编程逻辑器件(PLD)及其相关软件,包括现场可编程系统芯片(FPSC)、复杂的可编程逻辑器件(CPLD),可编程混合信号产品(ispPAC®)和可编程数字互连器件(ispGDX®)。
京微齐力、西安智多晶微电子、紫光国微、高云等等,他们都拥有自己的FPGA系列芯片。
FPGA的厂商有很多,但是基本的内部结构和开发流程是比较接近了,只要掌握一种FPGA的开发方式,其他的FPGA开发就会容易上手很多。
目前学习FPGA设计,使用INTEL FPGA和Xilinx FPGA的居多,这两家的FPGA芯片也是应用最多的。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA的特点有以下几点:
- 采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。
- FPGA可做其它全定制或半定制ASIC电路的中试样片。
- FPGA内部有丰富的触发器和I/O引脚。
- FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
- FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA的应用大可分为以下几种:
数据采集领域:自然界的大部分信号是模拟信号,在高速采集时,信息无法直接传入MCU或者DSP。此时,需要FPGA进行一定的转换和速率匹配。
逻辑接口领域:CPU在于外界通信时,需要各种专门的接口,而接口电路所引入的接口电路很庞大。加入FPGA,就可以CPU与FPGA做单独通信,由FPGA实现其他各种接口的扩展。
电平接口领域:不同的器件支持的电平不尽相同,如果需要连接各种接口时,就需要各种接口标准或者转换电路。对于FPGA来说,FPGA分为不同的BANK,可以直接支持不同的电平标准。
数字信号处理领域:通信、图像等领域近些年对计算量提出了更高的要求,FPGA支持并行计算,可以大大缩短计算的时间。
IC设计领域:IC在设计时,首先会使用FPGA设计出基础的电路模型进行各种理论验证,等验证通过后,才会进行IC制造等等。
通过上述的叙述,了解FPGA内部都是使用等效电路实现功能,那么它的速度是不是赶不上ASIC?
既然要做对比,就要说明一部分情况。例:如果是同等工艺条件下,FPGA是没有ASIC跑的快。各大FPGA厂商都是利用世界先进工艺做出的片子,如果某些应用类型公司尝试利用的最先进工艺做片子,那么风险比较高,费用也比较昂贵,如果采用成熟工艺去做片子,那么asic的速度不一定会有FPGA速度快。