在开发阶段,经常需要改代码,而且往往只改局部代码,但是编译的时候,通常会全部重新编译,这会很浪费时间,使得开发效率大大降低。那么有没有一种方法能够降低不必要的编译时间呢?通过查询Quartus II Handbook Version 9.1 Volume 1: Design and Synthesis手册,找到了方法,那就是采用incremental compilation方式。其实这种想法就是将已有编绎的成果保持不变,因此需要将整个设计进行模块化,如果整个设计就是相互耦合,水乳交融,那么好像用这种方法估计是行不通了。

在这里野蜜蜂做了一个sigma delta调制工程(软件为Quartus II 8.0),其主要模块包括正弦波发生器(用了查询表),插值,SDM调制等,模块的设计细节不在这里阐述。首先看一下第一次编译所花的时间如下:

如果此时改变了正弦波发生器的一个参数,其它模块都没变,如果没有做任何设置,还是按原来的方式编译(保持整个系统的运行环境基本一样),则所花的时间如下:

比较两幅图可以看出,时间几乎花的一样,没有改进,编译器很’傻’,至少从人的角度来说,只需要重新编译一下正弦模块就可以了,其它都可以保持不变,这样的话工作量就少多了。下面采用两种方法来改进一下这种悲剧。

(1)、第一种方式很简单,设置一下参数,让编译自己决定到底哪些需要重新进行编译,哪些不需要。

点击菜单栏上的”Assignments”,选中其中的”Settings”选项。如下图所示:

从跳出的对话框中选择左侧的”Compilation Process Settings,”,然后将右侧的”Use smart compilation”打钩选上。如下图所示

再点击左侧的”Compilation Process Settings”下的”Incremental Compilation”,将右侧的“Full incremental compilation”选上。如下图所示。将这两项选上表明可以让编译器根据之前编译产生的数据库自动识别哪些是改过,哪些是没改过的,从而做出编译选择,哪些需要,哪些不需要。

下面看一下在此种方式下的时间:

跟前面相比,主要是在“Analysis & Synthesis”上将时间花少了,但布线时仍然花那么多时间,这说明他在布线上仍然做了全局优化。但如果之前的编译已经在功能和时序上都已经满足了,对模块也只需要做小小的修改,那么其它模块的布线什么之类的也应该不用变化了,直接采用原来的就可以,但是编译器从全局上仍然做了得重新布线。下面考虑第二种方法:

(2) 采用Partition的方式,即手工设置模块,告诉编译器哪些需要改,哪些不需要改。下面是具体步骤:

一、局部更改代码,或者改正Bug。

二、自己手动设置Partition,即相当于分模块。在”Project Navigator”里”Hierarchy”标签下,可以看到各个层次的模块(因为之前已经编译过了)。右击某一个模块选择“Set as Design Partition”,其它模块同样设置,见下面二图。

三、选择保留的程度,即没有改变的是选择综合的(Synthesis),还是映射后(Fitter)的数据。点击菜单栏上的”Assignments”,选中其中的”Design Partitions Window”选项,出现Partitions窗口,如下图如示。从图中可以看出,之前所有分的Partitions都在里面。

在上图中’Netlist Type’下面全部选成’Post-Fit’选项,因为我们要选择映射后的数据。除了’sine:inst2’模块和’Top’模块,选择’Source File’,因为’sine:inst2’是代码进行改变的,因此需要从source file重新编译,而sine模块会影响Top,因此Top也选择source file。

在Fitter Preservation Level列下,全部选择’Placement and Routing’,我们保留不仅是映射后的逻辑,之间的连线也一同保留,这样对于不改的模块就等于什么都不变了。

四、重新进行编译。

从图中可以看出,要比最原始降了将近一半左右。‘Synthesis’和’Fitter’都只花了原来一半时间左右。可以看出时间明显缩短了。

从上面可以看出,在后期采用这种方式可以有效的缩短编译时间,但是他也有一个缺点。即在修改之前,时序已经得到满足,而且也是小规模的修改。如果之前时序还未满足,这种方法就可能不合适了,因为时序问题不一定出在这个模块上,因此需要其它流程来进行处理。

当然上面只是从手册读下来的个人观点:即这种修改只适合已经满足功能和时序,只是再进行小规模的修改而已,如果其它的估计还得要从其它方面着手吧。

Quartus II 增量编译的更多相关文章

  1. [重要更新][Quartus II][14.1正式版]

    [Quartus II][14.1正式版] ----14.1版本最大的变化就是增加了2大系列的器件库: MAX 10和Arria 10.这2大系列据Altera中国区代理 骏龙科技的人说,就是为了和X ...

  2. 【7集iCore3基础视频】7-6 Quartus II 13.1安装

    Quartus II 13.1安装:高清源视频:链接:http://pan.baidu.com/s/1csVRMA 密码:lkth 视频勘误:http://pan.baidu.com/s/1mhCIq ...

  3. Quartus II USB-Blaster驱动解决

    Quartus II USB-Blaster驱动解决 之前安装Quartus II 13.0,但FPGA开发板链接的USB-Blaster链接无法被Quartus识别,改装Quartus II 11. ...

  4. Quartus II 与 Modelsim 联调【转】

    Quartus II 9.0版本的时候软件还有自带的仿真工具,现在安装的是11.0以上版本,才发现 Quartus II 11.0以上取消了软件自带的波形仿真工具,因此需要波形仿真就要调用专业的仿真工 ...

  5. Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法

    在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...

  6. Quartus ii 12.0 和ModelSim 10.1 SE安装及连接

    quartus ii 10.0后就没有自带的仿真软件,每次写完一个VerilogHDL都想简单仿真一下,结果发现没有了自带仿真软件.这时候就需要第三方仿真软件ModelSim 10.1 SE. Qua ...

  7. Quartus II中FPGA的管脚分配保存方法

    一.摘要 将Quartus II中FPGA管脚的分配及保存方法做一个汇总. 二.管脚分配方法 FPGA 的管脚分配,除了在QII软件中,选择“Assignments ->Pin”标签(或者点击按 ...

  8. 【转】Quartus II调用modelsim无缝仿真

    Quartus II调用modelsim无缝仿真  ★emouse 思·睿博客文章★ 原创文章转载请注明:http://emouse.cnblogs.com 本篇文章为转载,写的不错,最近在学mode ...

  9. 关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法

    关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法 近期在评估使用NIOS II处理器进行项目的 ...

随机推荐

  1. Web前端开发的前景与用处

    随着时代的发展,现在从事IT方向的人有很多,所以励志要成为前端开发工程师的人有很多.当然也有很多人在犹豫不知道该从事哪个方向,我今天就是来给大家分析一下Web前端开发的前景.包括工作内容,发展前景和薪 ...

  2. iOS常用开发资源整理

    在行--专家付费咨询 杂项 App Release Checklist—iOS App发布清单. Hey Focus—帮助你专注于一个任务. Objective Cloud—Objective C A ...

  3. Onedrive 明年初基础容量缩小到5G,执行这一步骤避免(保持30G)

    Onedrive作为微软的云盘,相当实用,存储一些照片文档. 之前微软一直执行免费用户可以永久拥有30G空间(基础+开启功能获得). 但微软打算从明年开始减低这一优惠至5G. 不过最近微软有一些放松, ...

  4. 关于mongodb的复合索引新功能

    最新在做一个项目,由于查询字段较多,且查询较频繁,所以我做了一个复合索引,将所有需要查询的字段都做到索引里,做了一个名为s_1_m_1_c_1_v_1_year_1_month_1_week_1_da ...

  5. window下安装jupyter

    1.Install [Anaconda](https://docs.continuum.io/anaconda/install#anaconda-install) 实际上安装了anaconda就已经安 ...

  6. java异常架构图 和几个面试题

    1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...

  7. 370. Range Addition

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  8. MySQL数据库8 -子查询,联合查询

    一 使用IN关键字的子查询 问题: 查询游戏类型是'棋牌类' 的游戏的分数信息 - 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以 ...

  9. 通过ajax 后台传递的 区域id 选中ztree的节点 并展开节点

    代码如下: < script type = "text/javascript" >    var flag = "<%=request.getParam ...

  10. Spring MVC学习笔记--认识SpringMVC

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框 ...