首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA开发流程1(详述每一环节的物理含义和实现目标B)

FPGA开发流程1(详述每一环节的物理含义和实现目标B)

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

    需要说明的是在的开发流程中,将编译、映射过程按照我们叙述的合称综合,而在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资源分布。但是这些对我们理解布线这个概念没有很多益处,暂且不深入,本质上就是一个线路求最优的问题。
返回列表