特权同学

勇敢的芯伴你玩转Altera FPGA连载26:内里本质探索——器件结构 上

0
阅读(1497)

勇敢的芯伴你玩转Altera FPGA连载26:内里本质探索——器件结构 上

特权同学,版权所有

配套例程和更多资料下载链接:

http://pan.baidu.com/s/1i5LMUUD

1.jpg

 

         在第1章里,我们已经讨论了FPGA的基本开发设计流程。在本章,我们也讨论了基本的逻辑电路,那么它和代码以及最终的FPGA器件之间又是怎样的关系呢?如图3.18所示,设计者先编写RTL级代码来描述自己需要实现的功能;然后在EDA工具中对其进行综合,RTL级的代码就被转换为逻辑电路,就如前面一节里的与、或、非等一大堆门电路的各种组合;最后这些逻辑电路需要被实现到特定的FPGA器件中,这个步骤我们通常称之为布局布线。

2.jpg

图3.18 RTL代码、逻辑电路和器件

         在谈到FPGA的规模大小时,我们常常说FPGA器件有多少个门。因此,很多人就天真的以为FPGA器件里面就不过是一大堆与门、或门和非门,设计者写好代码实现的逻辑就对应为FPGA里面的各种不同门之间的相互连接。实际情况还真不是这么简单,FPGA里面还真的找不着几个与门、或门和非门。那么FPGA器件内部到底以怎样的方式来实现我们需要的逻辑电路呢?下面我们就通过剖析Altera公司的Cyclone IV系列FPGA器件的内部结构来解开这个迷。

         翻开Cyclone IV系列的器件手册,如图3.19所示,Volume1的Section 1是Device Core(器件内核,也可以译为器件内部结构),其下的第2章内容,即Logic Elements and Logic Array Blocks in Cyclone IV Devices是专门谈论器件内部逻辑单元结构的。为了帮助大家更好的理解这部分内容,除了对这个典型的FPGA器件结构进行介绍,我们还会列举一个实例来看看一段代码是如何被综合为逻辑电路,以及逻辑电路如何被映射(布局布线)到器件中。

3.jpg

图3.19 Cyclone IV器件手册目录截图

         我们先看看Cyclone IV这款器件的内部结构,如图3.20所示。器件当中最多的就是逻辑阵列块(Logic array blocks,简称LABs),每个LABs包含了16个逻辑单元(Logic elements,简称LEs),LEs是能够实现用户逻辑功能的最小单位,后面我们还会详细介绍这个LEs的内部结构。其实这颗Cyclone IV器件的逻辑结构在Altera公司的器件中非常具有典型性,Altera公司的FPGA也基本都是类似的内部结构。在器件的周围布满了I/O块,这些I/O块直接连接控制着器件外部裸露的I/O管脚。I/O块中包括了双向的I/O缓冲以及一些可编程的I/O特性功能,如施密特触发、上拉电阻和各种电平标准(如高达400Mbps速率的存储器接口以及高达875Mbps速率的LVDS接口)。I/O块不同bank上也有多组GCLK引脚可用作全局时钟输入,GCLK引脚输入的信号在器件内部具有低延时、高扇出等特性,不仅适合于时钟信号输入,也可以作为复位、置位等控制信号的输入。除此以外,Cyclone IV器件还具有丰富的内嵌存储器资源,如M9K存储块可用于配置成紧耦合的ROM、单口RAM、双口RAM、移位寄存器以及FIFO,非常实用;同样是内嵌的可用于各种DSP算法实现的18*18乘法器资源则在很多应用在都能派上用场。

4.jpg

图3.20 Cyclone IV器件内部结构

         虽然图3.20的结构图中没有示意出各个功能块之间的相互连接关系,但是大家可以想象,其实在各个功能块之间存在着丰富的可编程的互连线帮助实现最终的应用。如图3.21所示,各个行列LABs之间会有可编程的互连线、LABs内部的各个LEs内部之间也会有可编程的互连线、I/O块与LABs之间、LABs与存储块以及乘法器之间都有着灵活可编程的互连线。

5.jpg

图3.21 LAB互联结构