【深入浅出玩转FPGA学习1-------基础普及】

FPGA强化学习-------基础普及

  • 初始FPGA
    • FPGA与ASIC
    • FPGA与CPLD
    • Altera与Xilinx
    • Verilog与VHDL
    • FPGA的基本结构
  • 应用领域
  • 开发流程

初始FPGA

20世纪60年代中期,TI公司大量生产了通用IC,如分别面向商用和军用的74系列和54系列。20世纪80年代,出现了可编程逻辑器件(PLD),如SPLD和CPLD,它们与ASIC相比,具有可重配置性和较短的开发调试时间,但实现的功能和电路都相对简单。为了弥补这一需要,Xilinx公司推出了第一块现场可编程逻辑器件(FPGA),并且在其后的几十年间,FPGA得到了巨大的发展。

FPGA与ASIC

FPGA和ASIC的不同主要在于:
1.ASIC是定制IC,内部功能已经固化,只能开启或者关闭不同的功能模块;而FPGA是一个地地道道的可编程器件,用户可以根据自己的功能需求进行开发设计。
2.FPGA可重配置的灵活性是ASIC不具有的。因此,ASIC通常适用于大型项目,而对于需要快速投入市场且升级换代较快的小型项目使用FPGA则更有优势。
FPGA之所以具有如此大的吸引力,不仅在于其开发周期短、开发软件投入少、成本也在不断下降,更在于它符合电子产品高密度、低压、低功耗的趋势。

FPGA与CPLD

FPGA和CPLD的差别:
1.CPLD是基于ROM结构的,下电后代码不丢失;而FPGA是基于RAM结构的,下电后代码丢失,所以FPGA一般必须有一个配置ROM在每次上电时加载代码到RAM里。
2.CPLD的硬件设计比较简单,FPGA的硬件设计相对复杂些。
3.二者制造工艺上的差别也导致了它们内部结构的不同,CPLD的逻辑资源不可能做得太大,而FPGA却能够做到数万乃至数百万逻辑门。
4.CPLD更适合于一些简单得应用,而FPGA可以做更多更复杂的工作。
基于FPGA和CPLD的设计开发流程是基本一致的,因此,一般情况下设计者也没必要刻意的区分二者。

Altera与Xilinx

目前FPGA主流厂商Altera公司和Xilinx公司(已被AMD收购)。通常来说,在欧洲使用Xilinx的人多一些,在亚太地区使用Altera的人多一些,在美国一般是平分秋色。这两家公司的可编程逻辑器件占到了全球市场的60%以上。

Verilog与VHDL

Verilog相对于VHDL有着快速上手、易于使用的特点,博得了更多工程师的青睐。正确掌握Verilog必须要花很多时间和精力,最好是有一些项目的实践,才会慢慢对可编程逻辑器件的设计有更深入的理解和认识。

FPGA的基本结构

一个典型的FPGA基本就由图示的各个部分构成:
【深入浅出玩转FPGA学习1-------基础普及】_第1张图片
逻辑块(Logic Block),Altera公司称之为逻辑阵列块(LAB),而Xilinx称之为可配置逻辑块(CLB)。Altera的LAB是由称之为LE(Logic element)的基本单元构成,Xilinx的CLB则是由称之为LC(Logic cell)的基本单元构成。LE和LC的机构虽有差异,但是大体还是很类似的。
FPGA内部的各个相关逻辑进行互联,它们的起点和终点都是IOB(I/O Block)。IOB是FPGA和外部器件的物理接口。
FPGA内部往往会扩展一些诸如PLL(DLL)、RAM块、乘法器等。PLL(DLL)是内部时钟倍频和分频的专用电路,可以方便用户对多个时钟的需求。RAM块一般可以配置成单口RAM、双口RAM、FIFO、ROM甚至以为寄存器等,乘法器一般是针对数字信号处理方面的运算需要。

应用领域

FPGA主要用在逻辑粘合与实时控制、信号处理与协议实现、片上系统等。
数字信号处理器(DSP)在数据运算方面有着相当不错的性能。但是,今天的FPGA已经具有了内嵌乘法器、专用运算电路并集成了大量可灵活配置的片内RAM等,再加上FPGA的并行性以及可灵活配置的位宽,这些特性使其足以与任何DSP相抗衡。

在软件无线电领域,ASIC、FPGA和DSP三足鼎立,各有优势。ASIC往往针对某一个特定的产品,可升级性和灵活性较低。DSP和FPGA都是可编程的,DSP的软件编译和调试相对FPGA要容易一些,但只适合一些基于顺序处理的算法实现,对于并行要求极高的应用场合则无能为力了。因此,在这样的应用场合,DSP加FPGA的解决方案是一个折中的选择。

FPGA 拥有着丰富的电平接口,易于实现各种各样不同的协议。现成的协议芯片确实不少,但是对于一些标准协议的非标准应用还是应该选择FPGA。有时只要选择要一个合适的IP核,简单的配置后即可灵活使用。
片山系统(soc是指在单个芯片上集成一个完整的系统,一般包括系统级芯片控制逻辑模块、微处理器/微控制器内核模块、数字信号处理器模块、存储器或存储器控制模块、与外部通信的各种接口协议模块、含有ADC/DAC的模拟前端模块、电源及功耗管理模块。如图1.2所示,一个相对复杂的系统采用传统的设计方案可能需要一个CPU做整体控制、一个FPGA做接口的逻辑粘合和一些信号的预处理,还需要一个DSP做复杂的算法实现,Flash和SDRAM分别作为程序存储和数据缓存,这些器件放在一块或者数块PCB板上。这样一个系统显得相当繁杂,不仅调试难度大,而且系统维护也不方便。

基于FPGA的片上系统提出了如图1.3所示,FPGA内部集成了CPU、DSP以及各种接口控制模块,对于有些存储量要求不大的系统,甚至可将外部的Flash和SDRAM都集成在FPGA中。
【深入浅出玩转FPGA学习1-------基础普及】_第2张图片

开发流程

【深入浅出玩转FPGA学习1-------基础普及】_第3张图片
任何项目的前期准备工作肯定都是从需求分析谈起的。需求明确了,把功能定义弄清楚了,设计者才好进一步地进行可行性分析。然后进行模块划分,模块划分的最基本原则是以功能为主,有时是按照数据流来做划分。分模块的好处不仅有利于分工的需要,更有利于日后的代码升级、维护以及设计的综合优化。在模块划分完成后,就要进行底层的设计输入工作。设计输入可以是原理图输入、代码输入或者搭建SOPC平台。代码设计不是FPGA设计的唯一手段,设计者也可以考虑使用基于原理图的设计或者基于SOPC的设计。原理图的设计有着太多的局限性,对于复杂应用基本不予考虑。SOPC的应用也越来越广泛,不过使用代码进行设计依然是主流。

综合是指将较高层次的电路描述转化为较低层次的电路描述。具体的说,就是将设计代码转化为底层的与门、非门、RAM、触发器等基本逻辑单元相互连接而成的网表。综合工具使用Synplicity公司的Synplify是个不错的选择。代码设计完成后,最好先使用开发工具进行语法检查。语法没有问题了,进行综合后,需要进行功能仿真。这个仿真不涉及任何时序上的延时,只是单纯地验证代码所实现地功能是否符合要求。仿真工具首推地是ModelTech公司地ModelSim,功能强大,而ISE或者Quartus II自带的仿真工具做做简单的测试还是可以的。

在功能仿真过后一般进行一次全编译,然后使用开发软件提供的时序编辑器进行时序约束,也可以使用第三方工具PrimeTime。时序约束首先需要对工程进行全局约束,然后对I/O接口时序进行约束,再对需要做的地方做时序例外约束。添加完时序约束后,设计者需要进行实现(Xilinx的ISE是分三步走,即翻译、映射和布局布线),然后查看时序报告。在添加时序约束前后,变化最大的应该是布局布线。一般设计者可能会先查看映射后的时序报告,这个报告的逻辑延时是完全准确的,布线延时确实通过一定的比例进行推导得出的估计值,所以由此得到的时序报告并不完全准确。但是对于一个较大的工程,编译往往耗费很多时间,所以设计者会悬着先查看映射后的时序报告进行前期的分析。如果得到的估计延时偏大,时序明显达不到要求,那么设计者应该先回头查找问题;如果映射报告的结果看上去不错,有足够的时序余量,那么就可以继续往后进行布局布线,查看布局布线后的时序报告,这个报告是最接近板级的时序分析结果。

仿真和板级调试时FPGA设计主要的验证手段。尽管板级调试能够很直观很真实地反映信号状态,也便于问题的寻找和定位,但是板级调试一个最大的问题在于同步观察接口信号数量受理,而且很难观测到FPGA内部信号节点的状态。

FPGA的仿真时通过给待测试设计添加一个激励,通过仿真工具模拟实际的FPGA运行状态输出响应,谁记者通过回放波形等方式观察已经运行的某一段时间 内的测试结果。
整个设计的验证过程如图1.5所示,这些步骤是要给迭代的过程。
【深入浅出玩转FPGA学习1-------基础普及】_第4张图片
设计输入阶段对应的是行为级的仿真,该阶段仿真验证的代码可以是不可综合的代码。综合优化后的共功能仿真时针对可以实实在在成为硬件的门级网表进行的验证,它不包含任何布局布线延时信息。实现完成后的时序仿真实在功能仿真的基础上包含了电路的延时信息,因此最接近板级电路。下载配置后则是板级的调试,验证最终功能是否实现。

FPGA的调试方法有很多,借助于示波器和逻辑分析仪的调试方法时最常用的。在FPGA剩余逻辑资源足够的情况下,也可以使用开发软件提供的在线逻辑分析仪进行调试,如ISE的Chipsole、Quartus II的SignalTape II功能都很强大。

Altera公司的Quartus II的SignalTap II功能支持的5中较实用的调试方法:

1.Signal Probe,信号探针方式不影响原有的设计功能和布线布局,只是通过增加额外布线将需要观察调试的信号里拦截到预先保留或者暂时不使用的I/O接口。该方式得到的信号电平会随布线有一定的延时,不适合于高速、大容量信号观察调试,也不适合做板级时序分析。它的优势在于不影响原有设计,额外资源消耗几乎为零,调试中也不需要保持连接JTAG等其他线缆,额能够最小化编译或重编译的时间。

2.SignalTap II Embedded Logic Analyzer, SignalTap II在线逻辑分析仪很大程度上可以代替昂贵的逻辑分析仪,为开发节约资本,同时也为调试者省去了原本繁琐的连线工作。在线逻辑分析仪的采样存储深度和宽度都在一定程度上受限于FPGA器件资源的大小。使用该方式必须通过JTAG接口,他的采用频率可以达到200MHz(若器件支持)以上,不用像外部调试设备一样担心信号完整性问题。

3.Logic Analyzer Interface,这里的逻辑分析仪接口时针对外部逻辑分析仪的。调试者可以设置FPGA器件内部多个信号映射到一个预先保留或者暂时不使用的I/O接口上,从而通过较少的I/O接口就能够观察FPGA内部的多组信号。

4.In-System Memory Content Editor, 在线存储内容编辑时针对设计中例化的内嵌存储器内容或常量的调试。可以通过这种方式在线重写或者读出工程中的内线存储器内容或常量。对于某些应用可以通过在线更改存储器内容后观察响应来验证设计,也可以在不同激励下在线读取当前存储内容来验证设计。

5.In-System Sources and Probes,这种方式是通过例化一个定制的寄存器链到FPGA器件内部。这些寄存器链通过JTAG接口与Quartus II通信,又能够驱动FPGA期间内部的某些输入节点信号、采样某些输出节点信号,这就使得调试者不用借助外部设备就能够给FPGA添加激励并观察响应。

你可能感兴趣的:(深入浅出玩转FPGA,fpga开发,学习)