在开发阶段,经常需要改代码,而且往往只改局部代码,但是编译的时候,通常会全部重新编译,这会很浪费时间,使得开发效率大大降低。那么有没有一种方法能够降低不必要的编译时间呢?通过查询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. mac brew mysql 启动之后报错

    打开电脑 链接mysql 发现报错,连不上,应该是没自启动, 之前一直用windows电脑,就用mysql start 准备启动下,发现报错, p.p1 { margin: 0.0px 0.0px 0 ...

  2. MyEclipse Java Build Path详解

    转载自:http://blog.163.com/magicc_love/blog/static/185853662201111161580631/ 1.设置"source folder&qu ...

  3. win7下KiWi Syslog服务器的安装与配置

    今天就来聊聊日志服务器KiWi Syslog的安装与配置. 首先,所需文件有以下2个: 1.Kiwi_Syslog_Server_9.5.0.Eval.setup.exe[此版本只有14天寿命][Ki ...

  4. html input节点很多 json字符串提交解决方法

    遇到一个页面,38个input节点,页面前端写好的,不太容易改成 js框架 容易操作的样式,只能自己想办法一个一个id获取然后 setvalue getvalue(miniui): 38个一个一个写太 ...

  5. (转) 如何让 UITableView 的 headerView跟随 cell一起滚动

    在我们利用 UITableView 展示我们的内容的时候,我需要在顶部放一个不同于一般的cell的 界面,这个界面比较独特. 1. 所以我就把它 作为一个section的 headerView. 也就 ...

  6. oc swizzling 真的好用

    Objective-C的hook方案(一):  Method Swizzling 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写.和借助类别重名方法暴力抢先之外,还有更加灵活 ...

  7. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  8. C#利用摄像头拍照功能实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. Qt5.5中,使MainWindow初始为全屏

    MainWindow w; w.showMaximized(); 实例化后,初始显示设置为最大格式即可!

  10. 关于容器为NavigationControlle时,view的起始位置的问题

    在iOS 7中,苹果引入了一个新的属性“EdgesForExtendedLayout”,默认值为UIRectEdgeAll,默认的布局将从navigationbar的顶部开始,这就是为什么所有元素都往 ...