FPGA(Field-Program mable Gate
Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。所以,要想玩转FPGA,就必须理解FPGA内部的工作原理,学习如何利用这些单元实现复杂的逻辑设计。
一、FPGA的工作原理
FPGA一般来说比ASIC的速度要慢,无法完成复杂的设计,但是功耗较低。但是
他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA.因为这些芯片有比
较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
FPGA采用了逻辑单元阵列LCA(Logic Cell
Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic
Block)、输出输入模块IOB(Input Output
Block)和内部连线(Interconnect)三个部分。
现场可编程门阵列是可编程器件,与传统逻辑电路和
门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表来实现组合逻辑,每个查找表连接到一
个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用
金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
二、FPGA设计的基础问题 FPGA的基础就是数字电路和VHDL语
言,想学好FPGA的人,建议床头都有一本数字电路的书,不管是哪个版本的,这个是基础,多了解也有助于形成硬件设计的思想。在语言方面,建议初学者学习
Verilog语言,VHDL语言语法规范严格,调试起来很慢,Verilog语言容易上手,而且,一般大型企业都是用Verilog语言,VHDL语言
规范,易读性强,所以一般军工都用VHDL. 1、工具问题
熟悉几个常用的就可以的,开发环境QuartusII ,或ISE
就可以了,这两个基本是相通的,会了哪一个,另外的那个也就很Easy了。功能仿真建议使用Modelsim
,如果你是做芯片的,就可以学学别的仿真工具,做FPGA的,Modelsim就足够了。综合工具一般用Synplify,初学先不用太关心这个,用
Quartus综合就OK了。 2、思想问题
对于初学者,特别是从软件转过来的,设计的程序既费资源又速度慢,而且很有可能综合不了,这就要求我们熟悉一些固定模块的写法,可综合的模块很多书上都有,语言介绍上都有,不要想当然的用软件的思想去写硬件。
3、习惯问题
FPGA学习要多练习,多仿真,signaltapII是很好的工具,可以看到每个信号的真实值,
建议初学者一定要自己多动手,光看书是没用的。关于英文文档问题,如果要学会Quartus
II的所有功能,只要看它的handbook就可以了,很详细,对于IT行业的人,大部分知识来源都是英文文档,一定要耐心看,会从中收获很多的。
4、算法问题
做FPGA的工程师,最后一般都是专攻算法了,这些基础知识都是顺手捏来的,如果你没有做好搞理论
的准备,学FPGA始终只能停留在初级阶段上。对于初学者,数字信号处理是基础,应该好好理解,往更深的方向,不用什么都学,根据你以后从事的方向,比如
说通信、图像处理,雷达、声纳、导航定位等。 三、FPGA的配置模式
FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工
程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。
四、FPGA设计的三大法则 第一 面积与速度的互换
这里的面积指的是FPGA的芯片资源,包括逻辑资源和I/O资源等;这里的速度指的是FPGA工作
的最高频率(和DSP或者ARM不同,FPGA设计的工
作频率是不固定的,而是和设计本身的延迟紧密相连)。
在实际设计中,使用最小的面积设计出最高的速度是每一个开发者追求的目标,但是“鱼和熊掌不可兼得”,取舍之间展示了一个开发者的智慧。
1.速度换面积
速度优势可以换取面积的节约。面积越小,就意味着可以用更低的成本来实现产品的功
能。速度换面积的原则在一些较复杂的算法设计中常常会用到。在这些算法设计中,流水线设计常常是必须用到的技术。在流水线的设计中,这些被重复使用但是使
用次数不同的模块将会占用大量的FPGA资源。对FPGA的设计技术进行改造,将被重复使用的算法模块提炼出最小的复用单元,并利用这个最小的高速代替原
设计中被重复使用但次数不同的模块。当然,在改造的过程中必然会增加一些其他的资源来实现这个代替的过程。但是只要速度具有优势,那么增加的这部分逻辑依
然能够实现降低面积提高速度的目的。
可以看到,速度换面积的关键是高速基本单元的复用。 2.面积换速度
在这种方法中面积的复制可以换取速度的提高。支持的速度越高,就意味着可以实现更高的产品性能。一些注重产品性能的应用领域可以采用并行处理技术,实现面积换速度。
第二 硬件可实现原则 FPGA设计通常会使用HDL语言,比如Verilog
HDL或者VHDL.当采用HDL语言来描述一个硬件电路功能的时候,一定要确保代码描述的电路是硬件可实现的。
Verilog
HDL语言的语法与C语言很相似,但是它们之间有着本质的区别。C语言是基于过程的高级语言,编译后可以在CPU上运行。而Verilog
HDL语言描述的本身就是硬件结构,编译后是硬件电路。因此,有些语句在C语言的环境中应用是没有问题的,但是在HDL语言环境下就会导致结果不正确或者
不理想。 在C语言中运行没有任何问题,但是在Verilog
HDL的环境下编译就会导致综合后的资源严重浪费。 第三 同步设计原则
同步电路和异步电路是FPGA设计的两种基本电路结构形式。
异步电路的最大缺点是会产生毛刺。同步设计的核心电路是由各种触发器构成的。这类电路的任何输出都是在某个时钟的边沿驱动触发器产生的。所以,同步设计可以很好地避免毛刺的产生。
五、FPGA设计的主要应用 1、电路设计
连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领域也是FPGA应用的基石。事实上在电路设计
中应用FPGA的难度还是比较大的这要求开发者要具备相应的硬件知识和软件应用能力这方面的人才总是紧缺的,往往都从事新技术,
新产品的开发成功的产品将变成市场主流基础产品供产品设计者应用在不远的将来,通用和专用IP的设计将成为一个热门行业!搞电路设计的前提是必须要具备一
定的硬件知识。在这个层面,干重于学,当然,快速入门是很重要的,越好的位子越不等人电路开发是黄金饭碗。
2、产品设计
把相对成熟的技术应用到某些特定领域如通讯,视频,信息处理等等开发出满足行业需要并能被行业客户
接受的产品这方面主要是FPGA技术和专业技术的结合问题,另外还有就是与专业客户的界面问题产品设计还包括专业工具类产品及民用产品,前者重点在性能,
后者对价格敏感产品设计以实现产品功能为主要目的,FPGA技术是一个实现手段在这个领域,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条
件实现一个构造简单,固化程度高,功能全面的系统产品设计将是FPGA技术应用最广大的市场,具有极大的爆发性的需求空间产品设计对技术人员的要求比较
高,路途也比较漫长不过现在整个行业正处在组建“首发团队”的状态,只要加入,前途光明产品设计是一种职业发展方向定位,不是简单的爱好就能做到的!产品
设计领域会造就大量的企业和企业家,是一个发展热点和机遇。 3、系统级
系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统,实现一个基本环境,在这个平台上跑LINUX等系统,这个系统也就支持各种标准外设和功能接口了这对于快速构成FPGA大型系统来讲是很有帮助的。这种“山寨”味很浓的系统早期优势不一定很明显,类似ARM系统的境况但若能慢慢发挥出FPGA的优势,逐渐实现一些特色系统也是一种发展方向。若在系统级应用中,开发人员不具备系统的扩充开发能力,只是搞搞编程是没什么意义的,当然设备驱动程序的开发是另一种情况,搞系统级应用看似起点高,但不具备深层开发能力,很可能会变成爱好者,就如很多人会做网页但不能称做会编程。类似以上是几点个人观点,希望能帮助想学FPGA但很茫然无措的人理一理思路。这是一个不错的行业,有很好的个人成功机会。但也肯定是一个竞争很激烈的行业,关键看的就是速度和深度当然还有市场适应能力。

目前世界上有两种文明,一种是人类社会组成的的碳基文明,一种是各种芯片组成的硅基文明——因为几乎所有的芯片都是以单晶硅为原料制作的,芯片系统的总数比人类的数量还多出数十上百倍。芯片大家族里面也分各种不同类型的芯片,从古老的用电子管堆出来的成吨的逻辑门到现在的超级数据中心,电子技术的发展走过了一代又一代,到了今天,各种芯片更是百花齐放,芯片厂商百家争鸣。

可是,这么多芯片,按照功能分类,有专门用于计算的、有专门用于控制的、有专门用于存储的……按照集成电路规模分,有超大规模,大规模,和古老的中规模、小规模。而具体到了类型,又有CPU,SoC,DSP……有这么多的芯片,真的区分清除也是要花上一番功夫的,这篇文章就可以带领大家了解一些基础的、用来处理数据的集成电路芯片。

在这些专门用于处理数据的芯片中,最常用的就是由微处理器构成的微处理器系统,小到一块单片机,大到数据中心的几十路几十核地表最强处理器,都是由简单的微处理器系统发展而来,微处理器是应用最广泛的芯片。首先了解微处理器及微处理器系统,对接下来了解各种芯片及控制系统的很有帮助。

微处理器系统

微处理器系统,囊括了各种类型的计算机,微控制器/单片机。世界上的微处理器系统的总数比人类总数还多得多。它的基本工作原理是用程序控制系统的行为。

微处理器系统的基本操作过程是中央处理器(Central Processing Unit,
CPU)不断地从存储器取指并执行,实现对系统的全面管理。

一、CPU结构和功能CPU的结构:

1) 控制器:完成指令的读入、寄存、译码和执行。

2) 寄存器:暂存用于寻址和计算过程的产生的地址和数据。

3) I/O控制逻辑:负责CPU中与输入/输出操作有关的逻辑。

4) 算数逻辑运算单元(Arithmetic & Logic Unit,
ALU):运算器核心,负责进行算术运算、逻辑运算和移位操作,用来进行数值计算和产生存储器访问地址。

CPU的功能:

1) 与存储器之间交换信息。

2) 和I/O设备之间交换信息。

3)
为了使系统正常工作而接收和输出必要的信号,如复位信号、电源、输入时钟脉冲等。

二、微处理器系统的结构

▲图:微处理器系统的结构

1) CPU的外部特征就是数量有限的输入输出引脚。

2)
数据总线:
用于CPU和存储器或I/O接口之间传送数据,双向通信;数据总线的条数决定了CPU和存储器或I/O设备一次最多能交换数据的位数,是微处理器的位数的判据,例如:Intel
386DX、ARM
Cortex-M3是32位微处理器;Intel采用了IA-64架构的处理器、PowerPC
970是64位处理器;类似地,还有更加古老的8位、16位处理器等。

3)
地址总线
:CPU通过地址总线输出地址码用以选择某一存储单元或某一成为I/O端口的寄存器,单向通信;地址总线的条数决定了地址码的位数,进而决定了存储空间的大小,例如:地址总线宽度为8,则可以标记2^8
= 256个存储单元,若每个存储单元的字长为8
bit,则最大可以接入系统的存储空间为256kB。

4)
控制总线
:用来传送自CPU发出的控制信息或外设送到CPU的状态信息,双向通信;

微处理器系统的程序设计语言:程序设计语言,又称为编程语言,是用来定义计算机程序的,通过代码向处理机发出指令。编程语言让开发者能够准确地提供计算机所使用的数据,并精确地控制在不同情况下所应当采取的行动。最早的编程语言是在计算机发明之后产生的,当时是用来控制提花织布机及自动演奏钢琴的动作。在电脑领域已发明了上千不同的编程语言,而且每年仍有新的编程语言诞生。很多编程语言需要用指令方式说明计算的程序,而有些编程语言则属于声明式编程,说明需要的结果,而不说明如何计算。

机器语言:机器语言的每条语句即是处理器可以直接执行的一条指令,这些指令是以二进制0、1序列的形式表示,对应数字集成电路的高低电平。不同的处理器指令的机器代码各不相同,完成的具体功能也将不相同,按着一种计算机的机器指令编写的程序,不能在另一种计算机上执行。

示例:

0000’0000 STORE

0000’0001 LOAD

0000’0000 寄存器R0

0000’0001 寄存器R1

优点:功能和代码一一对应,CPU可以直接执行,效率最高。

缺点:只有二进制0、1序列,枯燥,难以辨识。

汇编语言:用简洁的英文字母、符号串来替代一个特定的机器语言指令——二进制0、1序列:用助记符代替操作码,用地址符号代替地址码。汇编语言与机器语言一一对应,所以和机器语言一样对计算机硬件的依赖性很大。

示例:加法运算

MOV R1,? R3;

将寄存器R3的值赋予R1

LDR R2, [R4]

;将寄存器R4的值代表的地址对应的存储空间的值赋予R2

ADCS R0, R1, R2

;将寄存器R1、R2与之前的进位值相加且进位,存储到寄存器R0

优点:汇编语句和机器语言一一对应,助记符与标号往往与实际意义相关,相比于机器语言,更加直观,容易理解,执行效率上类似。

缺点:不同的处理器指令集不同,移植性不好;即使完成简单的数据处理所需的代码体积很大,处理实际问题所需的工作量夸张,成本高。

高级语言:使用接近于数学语言或人类语言的表达描述程序。

特点:js9905com金沙网站,相比于面向机器开发的机器语言和汇编语言,高级语言拥有较高的可读性,并且代码量大大减少;高级语言通常远离对硬件的直接操作,安全性较高,也有部分高级语言可以使用调用汇编语言的接口操控硬件;高级语言有很多成熟、易于使用、可移植的数据结构与算法,使开发流程大大简化,节省开发成本,易于维护;发展迅速,社区完备,可以很方便地求助,解决遇到的各种问题;已经有很多各具特色、用以解决不同领域问题且发展相当完备的高级语言供开发者选用,如:适合初学者了解编程思想的Basic;效率颇高,接近于硬件操控,适合系统、硬件驱动编程与嵌入式开发的C/C++;跨平台、可移植特性优良的Java;搭配Visual
Studio可以快速开发项目的C#.NET;适合于数据分析、人工智能,越来越被青睐的Python;Microsoft公司为未来的量子计算而开发的Q#,等等。诸如MATLAB、HTML、JavaScript这样的用以在不同领域大显身手的语言亦可以称之为高级语言。

示例:加法运算

int a = 1, b = 2, c;

优点:不依赖于硬件,移植性好;不同场合选用适合的语言,开发效率高。

缺点:不直接使用硬件,需要编译-链接执行或解释执行,没有利用到具体硬件的特点,效率相比于机器语言和汇编语言不高;先天的特点决定了高级语言在底层的设计中无法完全取代机器语言和汇编语言。

可以看出,微处理器系统的核心部件是CPU,使用微处理器系统控制外部的设备工作的实质就是使用编写软件程序的手段来控制外部设备。由于CPU已经是一个完整的、封装好的部件,系统的设计人员只能通过编写软件,再经由编译器或解释器翻译为机器能够理解的代码来执行,CPU并没有专门的硬件电路来实现完全地控制外部设备的运行,这种实现方式是软件实现,是一种通用的实现,控制信号从软件到硬件要经过若干次转化,但有的时候,工程和设计领域往往需要高速高性能的芯片来实现控制与计算,这时候就需要更加强大的CPU或将几个CPU用一些技术并行起来协同工作,成本就会增加。这时候,可以不妨试试设计专门的硬件来满足工作的需求。

三、专用集成电路

专用的集成电路(Application Specific Integrated Circuit,
ASIC)是一种为专门目的而设计的集成电路。是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。ASIC的特点是面向特定用户的需求,ASIC在批量生产时与通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。

ASIC分为全定制和半定制。全定制设计需要设计者完成所有电路的设计,包括芯片设计的所有流程,因此需要大量人力物力,灵活性好但开发效率低下。如果设计较为理想,全定制能够比半定制的ASIC芯片运行速度更快。半定制ASIC使用准逻辑单元,设计时可以从标准逻辑单元库中选择SSI、MSI、数据通路、存储器甚至系统级模块和IP核,这些逻辑单元已经布局完毕,而且设计得较为可靠,设计者可以较方便地完成系统设计。

当今ASIC的设计方向已经越来越多地使用可编程逻辑器件来构造,开发门槛和难度不断降低,流程不断简化,成本不断下降,业务也开始变得丰富且多元化。目前ASIC已经走向了深度学习、人工智能、第五代移动通信技术等高新技术领域,在可编程逻辑器件两大巨头Xilinx和Altera的推动下,可以预见未来的ASIC设计将是可编程逻辑器件的天下。

四、可编程逻辑器件

可编程逻辑器件(Programmable Logic Device,
PLD)是一种通用集成电路,它是ASIC的一个子集,逻辑功能可以按照用户对器件编程来确定。一般的PLD的集成度很高,足以满足设计一般的数字系统的需要。这样就可以由设计人员自行编程而把一个数字系统“集成”在一片PLD上,而不必去请芯片制造厂商设计和制作ASIC芯片了,因为如果芯片需求量不大,设计制造ASIC的单片成本是很高的。

PLD与一般数字芯片不同的是:PLD内部的数字电路可以在出厂后才规划决定,甚至可以无限制改变,而一般数字芯片在出厂前就已经决定其内部电路,无法在出厂后再次改变,事实上一般的模拟芯片、通信芯片、微控制器也都一样,出厂后就无法再对其内部电路进行更改。最近闹得沸沸扬扬的Intel公司的芯片漏洞事件,就是因为CPU的内部电路已经无法更改,所以只能设计新的CPU芯片来解决,或是损失一些性能用软件修补的方法来弥补。

五、可编程逻辑器件的发展历程