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

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  2. Java中main函数只能调用同类中的静态方法?

    如果想调用本类中的非静态方法可以这么来写: public class TT{ public static void main(String[] args){ TT t = new TT(); t.fu ...

  3. redis随笔集-使用

    redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库 一数据集合: 1.list -- 链表  key-value形式,通过list ID  可以实 ...

  4. jacon

    com的线程回收不由java垃圾回收器进行处理,因此,每new一次jacob提供的类就要分配一定大小的内存给该操作,new出来的这个com对象在使用结束之后产生的垃圾java是无法回收的,new出来的 ...

  5. Beagleboard xm sd卡恢复

    来源于:http://circuitco.com/support/index.php?title=BeagleBoard-xM windows下恢复更加简单,推荐windows系统下恢复. To in ...

  6. HTML5 拖动

    触发的事件有:dragstart事件.drag事件和dragend事件. 按下鼠标键并开始移动鼠标的时候,会在被拖拽的元素上触发dragstart事件.这时候光标变成”不能放”符号(圆环中有一条反斜线 ...

  7. mysql5.7 zip版的配置方法

    下载了最新版的mysql,发现配置后使用net start mysql 服务无法启动,花了点时间找到了解决方案,按照如下步骤就可以了,关键在于创建data文件夹以及mysqld --initializ ...

  8. 【Python】列表各种操作

    # -*- coding:utf-8 -*- #列表操作name_list = ['zhangsan','lisi','wangwu'] #append 在最后插入name_list.append(& ...

  9. iOS UITextField限制输入数字

    有时候项目中要求文本框中只能输入数字,如:价格.公里数.费用等等,一般的文本框不限制输入的格式,这时候只能强制限制输入框的输入格式了,代码如下: #import "ViewControlle ...

  10. SqlServer性能优化 提高并发性能(八)

    并发访问: 当多个线程访问同一个资源,会产生并发性问题 并发控制与处理: 乐观并发控制:一种方式是"后来的更新者获胜"   这意味着先来的用户提交的值会在没有察觉的情况下丢失. 为 ...