[学习] FPGA之基本原理(可能理解不对)

 >> 什么是fpga

 

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中 的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
  FPGA采用了逻辑单元阵列 LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:

a) 采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

b) FPGA可做其它全定制或半定制ASIC电路的中试样片。

c) FPGA内部有丰富的触发器和I/O引脚。

d) FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

e) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。这个过程,在资料中称为“加载”或者“装载”,是不是有点怪怪的?类似于arm系列的芯片中bootrom加载bootloader到internal sram中。掉电后,FPGA恢复成白片,内部逻辑关系消失,因 此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一 片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。


>> lut

 

      查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

下面是一个4输入与门的例子,

实际逻辑电路
LUT的实现方式

a,b,c,d 输入

逻辑输出
地址
RAM中存储的内容

0000

0
0000
0
0001
0
0001
0
....
0
...
0
1111
1
1111
1

 

>> 基于查找表(LUT)的FPGA的结构

 

      通过上面对lut的描述,如果你联想到可以使用这个来实现fpga,那么就恭喜你,你简直是太聪明了。

      下面由小郭同志帮你以几个fpga为例来说明基于lut的fpga结构。

 

我们看一看xilinx Spartan-II的内部结构,如下图:

[学习] FPGA之基本原理(可能理解不对)_第1张图片
[学习] FPGA之基本原理(可能理解不对)_第2张图片
xilinx Spartan-II 芯片内部结构
Slices结构

Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构 (xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)

altera的FLEX/ACEX等芯片的结构如下图:

 

 

altera FLEX/ACEX 芯片的内部结构

 

 

 

[学习] FPGA之基本原理(可能理解不对)_第3张图片

逻辑单元(LE)内部结构

FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)

 

>> lut结构的fpga的基本工作原理

 

      上电后,程序加载到fpga中的internal ram中,接下来lut就可以工作了,据spec中讲述,这个过程很快,基本可以忽略。在军工和航天类的fpga中,可以把程序直接搞到flash或者eeprom中,不需要这个load的过程,实现上电运行的特性,类似于pld。

       下面接着描述基于lut结构的fpga的基本原理。

 

我们还是以这个电路的为例:

A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。 该电路中D触发器是直接利用LUT后面D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样PLD就完成了图3所示电路的功能。(以上这些步骤都是由软件自动完成的,不需要人为干预)

这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。

由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。 也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。

由于 FPGA 需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺或者是基于FLASH工艺的查找表结构,通过每次烧写改变查找表内容的方法实现对FPGA的重复配置。
       那么查找表取代与非门电路的原理是什么呢?我们知道,一个n输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n种结果,若我们事先将相应的结果存放于一个存贮单元,不就相当于实际了与非门电路的功能了吗?FPGA的原理正是如此,它通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。
以例1为例,它的真值表如表1所示。我们只需用将输出y的值事先存放在一个1x16的SRAM或者FLASH中,然后用a、b、c、d做地址索引查找输出,就可以代替与门运算,得到等价的结果。

【例1】 一个四输入与门电路
assign y = a&b&c&d;

      表1   例1对应的真值表
输入                               输出
a b c d y
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 1

 

[学习] FPGA之基本原理(可能理解不对)_第4张图片
>> fpga中的宝贵资源
io资源:其决定了gpga的扩展性;
dcm:数字时钟管理器,用来实现倍频,并且可以消抖;
ip核:这个就不用说了吧
bram:可以用来实现成堆栈/fifo/ram等(这个怎么实现我就不明白了,没有做过)
      上面有些是自己总结,不可全信哦。

你可能感兴趣的:(编程,工作,Flash,input,output,联想)