请选择 进入手机版 | 继续访问电脑版

集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1350|回复: 1

FPGA入门者必读宝典:详述开发流程每一环节的物理含义和实现目标(2)

[复制链接]
FPGAWD 发表于 2016-4-14 14:41:19 | 显示全部楼层 |阅读模式

在接触的很多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结构门级网表。在这个过程中,又可以分为如图两个步骤。

http://upload.semidata.info/new. ... 1/55d6cae506f8c.jpg
图5

需要说明的是在Altera的开发流程中,将编译、映射过程按照我们叙述的合称综合,而在Xilinx开发流程中,由设计输入得到门级网表的过程叫做综合,而映射过程归结到其叫做实现的某一子步骤中。但是整体的流程还是遵循这个顺序的,只是叫法一些外表性的不一样而已。

5.2.1编译
原理图、HDL、IP核这些都将通过编译后生成门级的网表,这里生成门级网表的过程其实是早起ASIC的步骤,直接生成门电路网表。这个时候的网表文件和具体的器件无关,也就是说,生成的门电路网表也是一种平台移植的媒质。

5.2.2映射
我们通过编译得到一张门级网表之后,与早先ASIC开发流程中在这个门级网表布线后去做掩膜不同,接下来就得考虑如何与我们选择的硬件平台结合起来,毕竟我们使用的硬件平台是由一个一个的LUT(假设这类FPGA)组成的。那么这个结合的过程就是映射过程。

这个过程其实很复杂,首先需要把形成的网表逻辑门给规划成一些小的组合,然后再去映射到LUT中,这个过程中规划按照一定的算法和章程进行。不同的算法和章程就会得到不同的映射,不同的映射就会为后面的过程提供不同的选择,最终生成性能不一样的电路了。

我们把讲基于SRAM技术的FPGA的二选一多路器拿出来举个例子,如图6,可以按照红色线将二选一多路器完全劈成两边,原来的一个表就可以规划到其他两个表或表内容中,因为被劈成的两部分可单独成表,也可以被规划到其他电路形成的表里。

http://upload.semidata.info/new. ... 1/55d6cae58aabf.jpg
图6

映射的工程比较复杂,运算量也很大,也是为什么FPGA开发过程中,一直存在的一个问题,形成最终的可配置二进制文件的时间非常长,特别是一些大一点的项目,时间消耗比较长的一个点就是映射了,至于具体的映射算法就超出了书的范围了。再强调的是,映射是和器件有关的,即使是同一个系列,不同型号的FPGA内部就够也是有区别的,好比从外观看都是一个单元楼内的单元房,但是每个单元房内装修、家具摆设等都是不一样的。

5.3布局布线
5.3.1布局
讲到这一块,正好有这么一个例子来讲解这个概念。近来报道朝鲜希望在俄罗斯远东地区租用数十万公顷的土地用来培育农产品。咱先撇开今后的购买的成功与否,假设成功了,并且有了这个详细的希望培育的农作物的品种及数量,有各式各样的蔬菜、主粮、禽类畜养场、果树等等。我们前面做的那些流程得到的LUT门级网表就好比这样的清单。

得到这样的清单之后,我们再假设在这十万公顷的土地上,阳光、水资源、温差都有一定的分布。大家知道农作物的的成长和高量产或者与阳关有关,或者与水资源有关,或者与温差有关,并且禽类的畜养材料与农作物的副产有关。所以接下来要做的事情就是根据现有的自然条件和农产品的所需环境特点合理布局,哪些地适合做什么。

紧接着我们回到FPGA开发中来,我们通过前面的步骤得到的清单就是LUT门级网表。网表里提供的仅仅是从逻辑关系上一些LUT结构的连接。我们需要将这些LUT结构配置到FPGA具体的哪个位置。需要说明的是,FPGA里任何硬件结构都是按照横纵坐标进行标定的,图中选中的是一个SLICE,SLICE里面存放着表和其他结构,它的位置在X50Y112上。不同的资源的坐标不一样,但是坐标的零点是公用的。

http://upload.semidata.info/new. ... 1/55d6cae557cc0.jpg
图7

在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右边的电路。

http://upload.semidata.info/new. ... 1/55d6cae557618.jpg
图8



还有一种典型的位置约束是在增量编译里涉及的物理界定。增量编译的出现就是因为在FPGA开发过程中综合和布局布线的长耗时性而提出的。思想就是把FPGA切成很多个小块的FPGA,然后约定具体哪块小FPGA放置什么模块,实现什么样的功能,从物理上进行界定。当修改工程后,开发平台就会检测哪些小FPGA内没有进行修改,哪些进行了修改,然后将修改过的部分重新进行综合布局布线步骤。这样一来,相比原来修改一点,全工程重新经过那些过程来讲,时间节省下来了。

时序约束
估计没有多少悬念了,时序约束很大程度上和布线有关。为什么要做这个约束?

由于一方面信号在芯片内传递是需要消耗时间的,另一方面大量存在的寄存器有反应时间,而我们开发的最开始的时候这些时间都是理想化的。但是考虑到真实情况下,如果跑的速度比较高,达到了200M这么个速度,当然这个高速和具体的芯片有关,高性能的芯片本身跑的速度可以达到很高,200M相对来说就不是高速,对一些低性能芯片还可能达不到200M.这个时候,这些时间达到了同样一个系统时间数量级的时候,很可能影响电路的性能了。某一刻,该来的信号没有来,默认的话就会采集错误信号了。

为了让这些硬件本身带来的延时时间更理想化,我们就要对这些决定时间延时的因素优化来减少时间延时。对于寄存器本身的反应时间这个因素我们开发者是无能为力的,我们要做的优化就是布线了。是走直线还是走其他,不仅仅决定于自身这条路径,还和整个系统布线有关,好比水桶原理,系统性能决定于最差路径延时。

时序约束做的就是这些事情,但是时序约束并不是指具体去连接每一条线,这个工作就像前面那些流程一样都是由软件去实现的,先用软件自己默认原则布线,然后对其结果分析,不满足时序要求的,我们再对具体的问题路径做一些指导约束。时序约束的添加,主要包括周期约束、输入偏移约束和输出偏移约束。具体的过程在后面章节介绍工具使用时会有具体动手的指导。

5.5 FPGA开发仿真
在经过上面从设计输入到综合再到布局布线过程的介绍后,我们来集中探讨一下,在这些过程中涉及到的相应的仿真。

仿真,字面上讲就是模拟真实状况。我们FPGA设计里面的仿真,就是模拟真实电路的状况,查看电路是不是我们需要的电路。如果我们把FPGA开发形成电路当作一个产品的生产过程,那么在FPGA开发流程中含有的三种仿真(RTL级仿真、静态仿真和时序仿真)就好比产品线中的三道检测站。如图9,这三道工序任何一道出了问题,修改设计后都得重新走这三道卡,所以尽量在把问题发现在源头。

http://upload.semidata.info/new. ... 1/55d6cae5c9855.jpg
图9
zxopenljx 发表于 2021-4-10 16:55:31 | 显示全部楼层
FPGA入门者必读宝典:详述开发流程每一环节的物理含义和实现目标(2)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-19 09:37 , Processed in 0.065361 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表