微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > FPGA入门:内里本质探索——器件结构

FPGA入门:内里本质探索——器件结构

时间:01-27 来源:互联网 点击:

FPGA入门:内里本质探索——器件结构

本文节选自特权同学的图书《FPGA/CPLD边练边学——快速入门Verilog/VHDL》

书中代码请访问网盘:http://pan.baidu.com/s/1bndF0bt

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


图3.17 代码、逻辑电路和器件

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

         翻开MAX II的器件手册,第2章是专门谈论器件结构(Architecture)的。为了帮助大家更好的理解这部分内容,除了对这个典型的CPLD器件结构进行介绍,我们还会列举一个实例来看看一段代码是如何被综合为逻辑电路,以及逻辑电路如何被映射到器件中。

         我们先看看MAX II这款器件的内部结构,如图3.18所示。器件当中最多的就是逻辑阵列块(Logic array blocks,简称LABs),每个LABs包含了10个逻辑单元(Logic elements,简称LEs),LEs是能够实现用户逻辑功能的最小单位,后面我们还会详细介绍这个LEs的内部结构。其实这个MAX II器件的逻辑结构在altera的器件中非常具有典型性,altera的FPGA也基本都是类似的内部结构。在器件的周围布满了I/O块,这些I/O块直接连接控制着器件外部裸露的I/O管脚。I/O块中包括了双向的I/O缓冲以及一些可编程的I/O特性功能,如施密特触发、上拉电阻和各种电平标准。I/O块的左右两侧各有2个GCLK管脚可用作全局时钟输入,这4个管脚输入的信号在器件内部具有低延时、高扇出等特性,不仅适合于时钟信号输入,也可以作为复位、置位等控制信号的输入。


图3.18 MAX II器件内部结构

         在器件的左下角,有一个MAX II器件特有的CFM块(configuration flash memory)和UFM块(user flash memory),其实altera的这款CPLD器件和FPGA器件一样是基于SRAM的,只是其内部嵌入了一块用于存储配置数据流的flash存储器,即CFM块。有了CFM块,用户无需再像一般的FPGA一样专门给这款器件外挂一个用于存储配置数据流的非易失存储器了。UFM块则是供用户使用的flash存储区,关于这片存储区的应用在本书的实例部分会有详细的介绍。

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

         接下来我们再了解一下器件中最小的功能单元LEs的内部结构。如图3.19所示,这是在MAX II器件内部一个完整的LEs的内部结构。详细的各个模块以及功能介绍大家可以去研究MAX II的器件手册,简单的来看,有几样核心的东西是必须知道的。


图3.19 LEs内部结构

         在图3.19右上的Programmable Register想必大家一定很眼熟,没有错,它正是我们在前文大书特书的寄存器,这可是实实在在存在着的,它的功能也大体和前面介绍的D触发器别无二致。再看左侧,有个4输入的查找表(Look-Up table,LUT),别小看它,功能可强大了,前面的各种逻辑门需要实现的输入输出关系大多时候是通过这个LUT来实现的。此外,还有一些诸如进位链(Carrychain)是用来协助实现运算功能的,各种布线(routing)连接则是用于实现该LEs与外部互连功能。总之,这个结构几乎可以满足大多数的逻辑电路

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top