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

    1, mirrot file: /etc/pacman.d/mirrorlist Server = http://mirrors.ustc.edu.cn/manjaro/stable/$repo/$a ...

  2. Wen前端性能优化

    Web前端性能优化 一般说来Web前端指网站业务逻辑之前的部分,包括浏览器加载.网站视图模型.图片服务.CDN服务等.主要优化手段有优化浏览器访问.使用反向代理.CDN等. 一.浏览器访问优化 减少h ...

  3. EF实体框架数据操作基类(转)

    //----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...

  4. 初学mongodb笔记

    先下载下mongodb,这里官网下载,https://www.mongodb.com/download-center?jmp=nav,根据自己的系统选择下载, 然后解压一下:会有这个文件夹\mongo ...

  5. tomcat8的配置

    本文章只适合初入javaweb的新人. 点击tomcat8的bin目录下的startup.bat,启动tomcat.在浏览器中输入http://localhost:8080  打开项目管理页,点击Ma ...

  6. Type.GetType()反射另外项目中的类时返回null的解决方法

    项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...

  7. offse

    关于offset共有5个东西需要弄清楚: 1.offsetParent 2.offsetTop 3.offsetLeft 4.offsetWidth 5.offsetHeight (1)offsetW ...

  8. C# List<T>用法

    C# List<T>用法 所属命名空间:using System.Collections.Generic; List<T>类是  ArrayList 类的泛型等效类. 该类使用 ...

  9. visualssh 是一个可视化的ssh客户端

    这两个周末写了visualssh,一个可视化的ssh客户端.里面集成了putty的功能,通过ssh协议与Linux server通讯. 以后可以针对不同的应用编写相关插件,便于管理Linux服务器上的 ...

  10. DotNetBar TabControl的使用

    这个和系统的TabPage不同,一个TabPage分为了DevComponents.DotNetBar.TabItem,DevComponents.DotNetBar.TabControlPanel两 ...