要知道,要把一件作业做好,不论是做哪们技能仍是办什么手续,了解这个作业的流程十分要害,它决议了这件作业的顺利进行与否。相同,咱们学习FPGA开发数字体系这个技能,先放下运用这个技能的根底编程言语的详细语法、运用东西和运用技巧不谈,咱先来弄清楚FPGA的开发流程是什么。
FPGA的开发流程是遵从着ASIC的开发流程开展的,开展到现在为止,FPGA的开发流程全体依照图1进行,有些进程或许因为其在当前项目中的条件的宽度的答应,能够免除,比方静态仿真进程,这样来抵达项目时刻上的优势。可是,大部分的流程进程仍是需求咱们安分守己的去做,因为这些进程的输入是上一个进程的成果,输出是下一个进程的输入的联系,这样的进程就必不可少了。
有人看到这个流程图的时分,第一个发自内心的感叹是“啊,怎样这么费事啊,特别是之前从事软件开发转过来的。关于他们来讲,很少有触摸到一种技能有如此多的环节来完结。可是这并不能阐明FPGA开发的详细难度,与软件开发有输入、编译、链接、履行进程对应的便是规划输入、归纳、布局布线、下载烧写,FPGA开发仅仅为了保证这中心完结骨干路每一个环节的成功性加了其他的润饰(束缚)和验证罢了。下面,咱们将以中心骨干路为道路,逐个介绍每个环节的物理意义和完结目标。
5.1规划输入
5.1.1规划输入方法
从图1 FPGA开发流程中的骨干线上别离出第一步规划输入横向环节,并做了进一步的细节的处理,如图2,从图上看到,规划输入方法有三种方法,有IP核、原理图、HDL,由此打开规划输入方法的评论。
原理图输入
原始的数字体系电路的规划或许咱们还不或许幻想,是用笔纸一个个逻辑门电路乃至晶体管建立起来的,这样的方法咱们称作原理图的输入方法。那个时分,硬件工程师们会环绕的坐在一块,拿着图纸来评论电路。幸而那时分的数字电路的还不是很杂乱,要是放到今日,略微大一点的体系,也算得上是浩大工程,略微有点电路要修正的话,这个时分你要是一个没耐性或是一个急性子的人或许就就会损失对这个范畴的爱好。话说回来,那个时代出来的老工程师们,电路根底功夫的确很厚实。
作业总是朝着好的方向开展的,后来呈现了大型计算机,工程师们开端将最原始的打孔的编程方法运用到数字电路规划傍边,来记载咱们手艺绘画的电路规划,后来存储设备也开端用上了,从卡片过度到了存储文本文件了,那个时分网表文件大致是起于那个时分。
需求留意的问题是原理图和网表文件的联系,原理图是咱们最开端便利咱们规划的一个输入方法,而网表文件是计算机传递原理图信息给下一道流程或是给仿真渠道进行原理图描绘仿真用的。规划输入方法不相同,可是关于功用仿真来讲,终究进展到仿真中心的应该是同一个文件,那么这个文件便是网表文件了。
有了计算机的辅佐,数字电路规划起来能够说前进了一大截,可是假如仍然悉数是依据逻辑门晶体管的话,仍是比较繁琐。所以后来呈现了符号库,库里包含一些常用的具有通行的器材,比方D触发器类的等等,并跟着需求的开展,这些符号库不断的在丰厚。与在原理图里运用这些符号库构建电路对应的是,由原理图得到的这个网表文件的描绘方法也相应的得到扩展,那么这儿网表文件里对电路符号的描绘便是最开端的原语了。
作为最原始的数字电路ASIC规划输入的方法,并从ASIC规划流程延续到FPGA的规划流程,有着它与生俱来的长处,便是直观性、简洁性,致使现在仍然还在运用。可是需求留意的是,这也是相对的,详细评论见下一末节。
HDL输入
HDL全称是硬件描绘言语Hardware Description Language,这种输入方法要追溯的话得到20世纪90时代初了。其时的数字电路的规划已足以让依照其时的输入方法进行门级笼统规划顾左顾不了右了,一不小心很简单犯错,而且得进行多层次的原理图切开,最为要害的是怎样能做到在更笼统的层次上描绘数字电路。
所以一些EDA开端供给一种文本方法的,十分谨慎,不易犯错的HDL输入方法开端供给了。特别是在1980年的时分,美国军方建议来甚高速集成电路(Very-High-Speed Integrated Circuit)方案,便是为了在部队中配备中大规划需求的数字电路的规划开发功率,那么这个VHSIC硬件描绘言语便是咱们现在的VHDL言语,它也是最早成为硬件描绘言语的规范的。与之相对的是晚些时刻民间建议的Verilog, 后来到1995年的时分,它的第一个版别的IEEE规范才出台,可是沿用至今。
前面说到HDL言语具有不同层次上的笼统,这些笼统层有开关级、逻辑门级、RTL级、行为级和体系级,如图3。其间开关级、逻辑门级又名结构级,直接反映的是结构上的特性,许多的运用原语调用,很相似最开端原理图转成门级网表。RTL级又可称为功用级。
HDL言语除了前面说到的两种外,历史上也呈现了其他的HDL言语,有ABEL、AHDL、硬件C言语(System C言语、Handle-C)、System verilog等。其间ABEL和AHDL算是前期的言语,因为比较前面两种言语来讲,或多或少都有些丧命的缺陷而在小范围内运用或许直接筛选掉了。而因为VHDL和Verilog在仿真方面具有仿真时刻长的缺陷,System verilog和硬件C言语发生了,从图3看,System Verilog是在体系级和行为级上为Verilog做弥补,一起硬件C言语发生的原因还有便是有种想把软件和硬件规划整合到一个渠道下的思维。
IP(Intellectual Property)核
什么是IP核?任何完结必定功用的模块叫做IP(Intellectual Property)。这儿把IP核作为一种输入方法独自列出来,首要考虑到彻底用IP核的确是能够构成一个项目。它的发生能够说是这样的一个逆进程。
在跟着数字电路的规划不断扩展的时分,面临一个超级大的工程,工程师们或许是抵达一种一致,将这规划巨大而且杂乱的规划常常用到的具有必定通用性的功用给独立出来,能够用来其他规划。当下一次规划的时分,发现这些组装好的具有必定功用的模块的确挺好用的,所以越来越多的这种具有必定功用的模块被提取出来,乃至工程师之间用来交流,渐渐咱们留意到它的常识产权,所以一种叫做IP常识产权的东西出来了,所以集成电路一个全新范畴(IP规划)发生了。
IP依照来历的不同能够分为三类,第一种是来自前一个规划的内部创立模块,第二种是FPGA厂家,第三种便是来自IP厂商;后边两种是咱们重视的,这是咱们进行零开发时考虑的现有资源问题,先放下本钱问题,IP方法的开发对项目周期十分有利的,这也是在FPGA应用范畴章节陈设相关FPGA厂家IP资源的原因。
FPGA厂家和IP厂商能够在FPGA开发的不一起期供给给咱们的IP。咱们暂时知道他们分别是未加密的RTL级IP、加密的RTL级IP、未经布局布线的网表级IP、布局布线后的网表级IP。他们的意义在后边连续介绍FPGA的开发进程的时分,信任咱们能够茅塞顿开。需求阐明的是,越是FPGA靠前端进程的时分供给的IP,他的二次开发性就越好,可是它的功用或许是个反的进程,一起也越贵,究竟任何一个供给者也不想将自己的源码程序供给给他者,可是为了不让客户走向其他商家,只能提高价卖了,一起加上一些法律上的协议维护。那么越朝FPGA开发进程的后端,情况就相反了,越是后端,IP核就会进一步做优化,功用就越好,可是一些客户不要的功用就欠好去了。
FPGA厂商供给一般常用的IP核,究竟为了让咱们用他们家的芯片,可是一些特殊需求的IP核仍是需求付费的。当然这儿需求阐明的是FPGA厂商的IP是很少能够穿插用的,这一点很简单想,对厂家来讲不会做这种给竞争者供给服务作业的。IP厂商一般会高价的供给未加密的RTL级源码,有时FPGA厂商为了扩展芯片市场占有率,会购买第三方的IP做进一步的处理后免费提给该FPGA芯片运用者的。
5.1.2输入方法运用评论
在上面咱们介绍了三种输入方法,有些当地会讲到第四种输入方法,便是门级网表文件输入的方法,咱们这儿并没有把它归为一种输入方法,原因在于,本身这些门级网表文件的发生仍是源于介绍的三种输入方法中的一种或是几种混合的方法。所以这儿没有把它归为一类。
好了,在上面三种输入方法介绍的根底上,咱们来评论一下这令人目不暇接的输入方法,评论的意图便是为了让咱们更好的运用他们。
首要,来总结一下三者的优缺陷,其实是两种,因为IP核不论是哪个层次,或许在原理图中被以符号的方法被例化,或许在HDL中被模块例化。所以这儿会集评论的是原理图和HDL的优缺陷。原理图的长处便是结构直观性,HDL的长处是严密性、支撑甚宽的笼统描绘层次、易于移植、便利仿真调试等等,缺陷便是不具备对方的长处。其时呈现HDL的时分,人们的确是想着原理图该退出历史舞台了,可是到现在它还仍然存在着。存在便是有道理的,存在就得用它,可是又得运用HDL,所以存在一种混合编程的方法。除了顶层模块用原理图之外,其他的内部子模块悉数运用HDL来描绘,HDL描绘的模块能够通过东西转化成符号,然后在顶层模块中引证这些符号,这就完结混合编程。
在触摸的许多FPGA的初学者很简单被原理图的输入方法给利诱,乃至爱的深重,加上本身其他输入方法的繁琐的输入的讨厌,更是爱的无法自拔。当开端强制性要求开端时养成多用HDL输入的习气的时分,有些乃至有着咬牙切齿般的苦楚,可是跟着学习的深化,做的东西越来越大,尝到HDL输入方法带来的甜头的时分,就会觉得那个苦没有白吃。
我觉得原理图输入方法从现在的一些头绪看来,在往后的某一天将会执役完结。首要是找到了原理图本身带有优势的替代品,那便是干流FPGA集成环境中的归纳器和第三方归纳器都具有RTL视图生成功用,这个视图彻底展现了项意图结构组成,能够上下分层,最大的优点便是能够检查核实写的RTL级代码的归纳后电路情况。还有一条头绪是,咱们用的仿真软件Modelsim并没有供给原理图输入的支撑,是原理图的规划有必要在集成环境成转化成RTL级代码或是归纳成网表方法来做仿真,也是一件繁琐的事。原理图的脱离仅仅时刻问题。
至于现在HDL挑选哪一种比较好,这个问题放到开端将HDL根底语法常识的当地进行评论。这儿要阐明的是,并不是咱们这儿讲Verilog运用就否定其他的HDL言语。各种HDL的争端从未中止过,现在仍是仍然存在四种开发人,第一种是运用Verilog/System Verilog的人,第二种是运用VHDL的人,第三种便是运用System C的人,第四种是混合型的人,究竟哪种好,也有或许是时刻问题吧,时刻证明全部。
5.2 归纳
不论你是选用单一的输入方法,仍是选用的是混合编程(这种在许多跨公司合作项目中会碰见,或许A公司用的是VHDL,B公司用的是Verilog,那这个项目中很大或许选用混合型),咱们总称得到规划输入后,都得把规划输入得到一个能够和FPGA硬件资源相匹配的一个描绘。假定FPGA是依据LUT结构的,那么咱们就得到一个依据LUT结构门级网表。在这个进程中,又能够分为如图两个进程。
需求阐明的是在Altera的开发流程中,将编译、映射进程依照咱们叙说的合称归纳,而在Xilinx开发流程中,由规划输入得到门级网表的进程叫做归纳,而映射进程归结到其叫做完结的某一子进程中。可是全体的流程仍是遵从这个次序的,仅仅叫法一些表面性的不相同罢了。
5.2.1编译
原理图、HDL、IP核这些都将通过编译后生成门级的网表,这儿生成门级网表的进程其实是早上ASIC的进程,直接生成门电路网表。这个时分的网表文件和详细的器材无关,也便是说,生成的门电路网表也是一种渠道移植的媒质。
5.2.2映射
咱们通过编译得到一张门级网表之后,与新近ASIC开发流程中在这个门级网表布线后去做掩膜不同,接下来就得考虑怎样与咱们挑选的硬件渠道结合起来,究竟咱们运用的硬件渠道是由一个一个的LUT(假定这类FPGA)组成的。那么这个结合的进程便是映射进程。
这个进程其实很杂乱,首要需求把构成的网表逻辑门给规划成一些小的组合,然后再去映射到LUT中,这个进程中规划依照必定的算法和规章进行。不同的算法和规章就会得到不同的映射,不同的映射就会为后边的进程供给不同的挑选,终究生成功用不相同的电路了。
咱们把讲依据SRAM技能的FPGA的二选一多路器拿出来举个比方,如图6,能够依照赤色线将二选一多路器彻底劈成两头,本来的一个表就能够规划到其他两个表或表内容中,因为被劈成的两部分可独自成表,也能够被规划到其他电路构成的表里。
映射的工程比较杂乱,运算量也很大,也是为什么FPGA开发进程中,一向存在的一个问题,构成终究的可装备二进制文件的时刻十分长,特别是一些大一点的项目,时刻耗费比较长的一个点便是映射了,至于详细的映射算法就超出了书的范围了。再着重的是,映射是和器材有关的,即使是同一个系列,不同类型的FPGA内部就够也是有差异的,比方从外观看都是一个单元楼内的单元房,可是每个单元房内装饰、家具铺排等都是不相同的。
5.3 布局布线
5.3.1 布局
讲到这一块,正好有这么一个比方来解说这个概念。近来报导朝鲜期望在俄罗斯远东地区租借数十万公顷的土地用来培养农产品。咱先放下往后的购买的成功与否,假定成功了,而且有了这个详细的期望培养的农作物的种类及数量,有林林总总的蔬菜、主粮、禽类畜养场、果树等等。咱们前面做的那些流程得到的LUT门级网表就比方这样的清单。
得到这样的清单之后,咱们再假定在这十万公顷的土地上,阳光、水资源、温差都有必定的散布。咱们知道农作物的的生长和高量产或许与阳关有关,或许与水资源有关,或许与温差有关,而且禽类的畜养资料与农作物的副产有关。所以接下来要做的作业便是依据现有的自然条件和农产品的所需环境特色合理布局,哪些地合适做什么。
紧接着咱们回到FPGA开发中来,咱们通过前面的进程得到的清单便是LUT门级网表。网表里供给的仅仅是从逻辑联系上一些LUT结构的衔接。咱们需求将这些LUT结构装备到FPGA详细的哪个方位。需求阐明的是,FPGA里任何硬件结构都是依照横纵坐标进行标定的,图中选中的是一个SLICE,SLICE里边存放着表和其他结构,它的方位在X50Y112上。不同的资源的坐标不相同,可是坐标的零点是共用的。
在FPGA里布局需求考虑的问题是,怎样将这些已有的逻辑上衔接的LUT及其它元素合理的放到现有的FPGA里,抵达功用要求的时分保证质量。详细点就比方,乘法器这样的电路合适放在RAM邻近,当然,硬件乘法器的硬件布局一般也是在存储器邻近,有利于缩短乘法的延时时刻,什么样的电路需求装备高速等等。
十万公顷的地布局规划好了,农产品就会有很好的丰盈,相同FPGA开发布局布好了,由FPGA建立起来的电路就会愈加安稳和扩展性。
5.3.2 布线
上末节中,咱们把十万公顷的地给组织好了,哪些地该种什么。详细施行之前还有一些是有必要做的,比方农作物的灌溉,没有一个很好的灌溉体系是一个问题;再比方丰盈了得采摘吧,这个时分,能够让大卡车抵达每一块农地的公路纽带也是需求处理的问题。将每一块或许相关的地步衔接的灌水体系和公路的建造,就比方咱们这个布线的进程。
咱们在FPGA内通过布局,知道那些LUT详细散布到哪个SLICE,可是一方面怎样让这些SLICE衔接起来,二方面怎样让输入的信号抵达相应的开端处理点和怎样让输出抵达输出IO上,而且衔接的电路全体功用好,这便是布线这个环节需求完结的内容。要抵达布线最优话,当然这儿面规划到布线算法和许多细节问题,比方触及到布线资源、PLL资源散布。可是这些对咱们了解布线这个概念没有许多好处,暂时不深化,本质上便是一个线路求最优的问题。
5.4 束缚
束缚,在图1上看到,在归纳和布局布线这两个流程环节里都呈现了,咱们暂时规矩其为束缚一和束缚二,或许说归纳束缚和布局布线束缚,布局布线束缚又能够分为方位束缚、时序束缚。束缚,便是对这些环节操作定制规矩。一般开发环境会对这些束缚有个默许,这些默许的设置对大部分情况下仍是适用的,可是一般布局布线束缚中的I/O束缚是咱们每一个工程都有必要给定的。一起开发东西敞开其他束缚接口,答应咱们设置这些规矩,详细的有哪些束缚怎样去做在后边介绍东西运用的时分进行评论,这儿先了解这些束缚的基本概念。
归纳束缚
信任咱们现已下意识的将归纳束缚和归纳进程挂在一起了,没错,归纳束缚的确是在归纳进程中做的,用来辅导归纳进程,包含编译和映射。咱们现已知道归纳进程是将RTL级电路描绘转化到FPGA上的硬件单元(LUT)中,构成以FPGA存在的硬件单元构成的电路。
咱们仍是拿前面有过的比方来阐明,不同的束缚将导致生成功用不同的电路。归纳这么一个完结式***能的电路,没有加资源共享得到的电路如图8左面所示的电路,而加了资源共享的束缚后,得到的电路结构如图8右边的电路。
通过之前的剖析,得到左面的电路结构资源耗费多可是速度快,而右边的结构耗费资源少,可是速度慢,乘法器需求分时复用。
当然这仅仅一个比方,可是足以阐明,不同的归纳辅导准则也便是归纳束缚,将会发生不同的电路。当得到的电路功用不能满意需求的时分,恰当考虑归纳束缚,来抵达一个速度和面积的转化的作用,完结功用的提高。电路完结的速度和耗费的面积是贯穿在FPGA开发进程中两个 对立的问题,归纳束缚是其间一种小范围内完结速度和面见平衡点移动的方法。
方位束缚
没错,你又想对了,方位束缚和咱们布局有联系,它便是指布局的战略。依据所挑选的FPGA渠道现有硬件资源散布来决议咱们布局。
其间最典型的方位束缚便是I/O束缚。一个典型的体系是既有输入也有输出的,而不论是输入仍是输出,都是从I/O上为端点的。输入从哪个端点进来,输出从哪个端点出去,输入是需求支撑什么样的电气特性的端点,输出又是需求支撑什么样的电气特定的端点。这些都是I/O束缚做的作业。任何一个工程,都有必要有这么一个束缚。
还有一种典型的方位束缚是在增量编译里触及的物理界定。增量编译的呈现便是因为在FPGA开发进程中归纳和布局布线的长耗时性而提出的。思维便是把FPGA切成许多个小块的FPGA,然后约好详细哪块小FPGA放置什么模块,完结什么样的功用,从物理上进行界定。当修正工程后,开发渠道就会检测哪些小FPGA内没有进行修正,哪些进行了修正,然后将修正过的部分从头进行归纳布局布线进程。这样一来,比较本来修正一点,全工程从头通过那些进程来讲,时刻节省下来了。
时序束缚
估量没有多少悬念了,时序束缚很大程度上和布线有关。为什么要做这个束缚?
因为一方面信号在芯片内传递是需求耗费时刻的,另一方面许多存在的寄存器有反应时刻,而咱们开发的最开端的时分这些时刻都是理想化的。可是考虑到实在情况下,假如跑的速度比较高,抵达了200M这么个速度,当然这个高速和详细的芯片有关,高功用的芯片本身跑的速度能够抵达很高,200M相对来说就不是高速,对一些低功用芯片还或许达不到200M。这个时分,这些时刻抵达了相同一个体系时刻数量级的时分,很或许影响电路的功用了。某一刻,该来的信号没有来,默许的话就会收集过错信号了。
为了让这些硬件本身带来的延时时刻更理想化,咱们就要对这些决议时刻延时的要素优化来削减时刻延时。关于寄存器本身的反应时刻这个要素咱们开发者是力不从心的,咱们要做的优化便是布线了。是走直线仍是走其他,不仅仅决议于本身这条途径,还和整个体系布线有关,比方水桶原理,体系功用决议于最差途径延时。
时序束缚做的便是这些作业,可是时序束缚并不是指详细去衔接每一条线,这个作业就像前面那些流程相同都是由软件去完结的,先用软件自己默许准则布线,然后对其成果剖析,不满意时序要求的,咱们再对详细的问题途径做一些辅导束缚。时序束缚的增加,首要包含周期束缚、输入偏移束缚和输出偏移束缚。详细的进程在后边章节介绍东西运用时会有详细着手的辅导。
5.5 FPGA开发仿真
在通过上面从规划输入到归纳再到布局布线进程的介绍后,咱们来会集评论一下,在这些进程中触及到的相应的仿真。
仿真,字面上讲便是模仿实在情况。咱们FPGA规划里边的仿真,便是模仿实在电路的情况,检查电路是不是咱们需求的电路。假如咱们把FPGA开发构成电路当作一个产品的生产进程,那么在FPGA开发流程中含有的三种仿真(RTL级仿真、静态仿真和时序仿真)就比方产品线中的三道检测站。如图9,这三道工序任何一道出了问题,修正规划后都得从头走这三道卡,所以尽量在把问题发现在源头。