FPGA 入门 (一)


基本概念


什么是FPGA?

    Field-Programmable Gate Array 即现场可编程门阵列,作为一种可编程器件,既解决了ASIC(专用集成电路)的不足,又克服了原有可编程器件门电路数有限的缺点。它集成了大量的原始逻辑资源(触发器、查找表LUT和布线),并提供了可配置的I/O口及硬IP(Block RAM、PLL、DSP、通用接口等)依赖工程师采用HDL(Hardware Description Language,硬件描述语言)进行编码,各个逻辑并行工作来实现指定的功能。它是基于硬件描述的芯片。


为什么FPGA可编程

    一提到编程,大家肯定想到的是coding的那套软件编程的概念,但FPGA的编程是硬件编程,要理解这些需要看FPGA的内部结构和工作原理。

1)FPGA基本结构


    FPGA内部集成了很多逻辑块(Logic Block),这些逻辑以阵列的形式排布着,散步在各个逻辑块之间的内部互联线(Interconnect),它们就好比PCB板上的导线,将FPGA内部的各个相关逻辑进行互联,它们的起点和终点都是IOB(I/O Block),IOB是FPGA和外部器件的物理接口,有丰富的电平接口。

    Altera FPGA片上逻辑主要由logic Array Blocks(LAB)与Route组成,每个LAB包含一定数量的logic Element(LE),LE可以认为是FPGA中最基本的逻辑单元。Route可以认为是许多连接节点的导线段,这些连接节点不仅用来连接片上逻辑,也用来连接走线本身。

    咱们从外往内部说,首先是IOB,IOB是芯片与外部电路的物理接口,主要完成不同电气特性下输入/输出信号的驱动与匹配要求,比如从基本的LVTTL/LVCMOS接口到PCI/LVDS/RSDS甚至各种各样的差分接口,从5V兼容到3.3V/2.5V/1.8V/1.5V的电平接口,下面是ALTERA公司的Cyclone IV EP4CE115F29设备的IOB结构。

    



    FPGA的IOB按组分类,每组都能够独立地支持不同的I/O标准,通过软件的灵活配置,可匹配不同的电器标准与IO物理特性,而且可以调整驱动电流的大小,可以改变上/下拉电阻,Cyclone IV设备有8个IO blank(组),见下图:


    然后是LAB,LAB是FPGA的基本逻辑单元,其实际的数量和特性依据所采用的器件的不同而不同,EP4CE115F29设备的每个LAB的布局包括16个LE、LAB控制信号、LE carry chains、Register chains和Local interconnect,其LAB结构图如下:


    最后是最基本的单元LE,LE是Cyclone IV设备最小的逻辑单元,每个LE主要有LUT和寄存器组成的。


    查找表LUT(Look-Up-Table)其本质是一个静态存储器SRAM,目前FPGA多采用4输入的LUT,每个LUT可以看作一个有4位地址线的16x1的RAM。当我们通过原理图或HDL语言描述了一个逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,在FPGA工作时,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出。



Interconnect
    FPGA内部连接线很丰富,根据数据手册的描述,主要有图3中的Row interconnect、column interconnect、Direct link interconnect、和Local interconnect和Register chain interconnect(寄存器之间连接的连接线)。
    内部连接线联通FPGA内部的所有单元,而连线的长度和工艺决定着信号再连接线上的驱动能力和传输速度。在实际开发中,设计者不需要直接选择连接线,布局布线器可自动地根据输入逻辑网表(这由综合生成)的拓扑结构和约束条件选择连接线来连通各个逻辑单元,所以,从本质上来说,布线资源的使用方法和设计的结果有密切和直接的关系。
 
2)FPGA工作原理
    FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端(见图),触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。


    知道了FPGA的结构和工作原理后再理解为什么FPGA能编程就不难了,HDL(Hardware Description Language)之所以叫Description而不叫Design,就是因为工程师用HDL语言描述一个功能、一个行为、一个过程,然后在通过EDA工具把这种描述语言综合布局布线成实际的硬件电路。可以说FPGA编程是设计数字电路,而不是真正意义上的软件编程。HDL设计输入其实就是电路设计的抽象输入,编译工具的综合就是将这些设计输入翻译成由与、或、非门及RAM、触发器、寄存器等基本逻辑单元组成的逻辑连接,即网表。这些网表文件作为厂家布局布线工具的输入。

    除了上述资源外,FPGA内部还包含一些嵌入式块RAM、底层内嵌功能单元(DLL、PLL、DSP和CPU等软核)、硬核(乘法器和串并收发器等)等资源,大大方便了系统级的设计。


FPGA主要应用在什么领域?

1、数据采集和接口逻辑

    1)数据采集

    低速的A/D D/A数据采集可以直接通过SPI或I2C等方式连接到MCU或DSP上,但如果是高速的A/D D/A转换芯片,如视频的decoder encoder不能与通用的处理器直接接口,在这种情况下FPGA可以完成数据采集的粘合逻辑功能。 大疆无人机上的视频采集使用了FPGA。

    2)接口和I/O扩展

    有些实际的应用需要很多I/O接口,同时又对速度有一定的要求,这是通过处理器就显得力不从心,而恰恰FPGA资源丰富又可编程,就能满足这样的需求。

  很多情况下产品需要和PC机通信,PC机的接口丰富,如:PCI、PCIE、USB等,这样就需要专用的接口芯片,附加的芯片会带来一些PCB面积和功耗方面的问题,这些接口逻辑同样可以在FPGA内部实现,很多厂商提供一些实现好的IPcore可以直接使用。

   除了TTL、COMS接口电平之外,LVDS、HSTL、GTL/GTL+、SSTL等新的电平标准逐渐被很多电子产品采用。比如,液晶屏驱动接口一般都是LVDS接口,数字I/O一般是LVTTL电平,DDR SDRAM电平一般是HSTL的。 在这样的混合电平环境里面,如果用传统的电平转换器件实现接口会导致电路复杂性提高。利用FPGA支持多电平共存的特性,可以大大简化设计方案,降低设计风险。

2、信号处理

    无线通信、软件无线电、高清影像编辑和处理等领域,对信号处理所需要的计算量提出了极高的要求。传统的解决方案一般是采用多片DSP并联构成多处理器系统来满足需求。但是多处理器系统带来的主要问题是设计复杂度和系统功耗都大幅度提升,系统稳定性受到影响。FPGA支持并行计算,而且密度和性能都在不断提高,已经可以在很多领域替代传统的多DSP解决方案。

3、芯片验证

    做一些功能性的验证,使得软件和硬件可以同时进行开发。


FPGA的开发流程?


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值