Quartus II的编译速度一直是个问题:太慢!尤其在进行FPGA调试时,加入SignalTAP II后编译时间明显延长,一次就要15分钟(对我当前的机器配置和设计来说)。
使用Quartus II快5年了,这是一个很深刻的体会,也带来几个好处。1. 我在等待编译结果时不得不翻翻书、看看文档,由此也多学了许多知识。2. 我不得不尝试提高使用SignalTAP II的效率,尽量减少重复编译的次数,由此也积累了些好的调试习惯。3. 我开发了几个vjtag调试工具,可以不经过编译就控制(可控性)和观察(可测性)FPGA内部的工作情况。4. 我认识到了软件可编程比硬件可编程的优势,软件的编译和更新比硬件配置文件的编译和更新快多了。5. 我认识到了仿真的重要性,仿真比调试不但有更好的可控性和可测性,更重要的是反复编译的速度快了许多。
在等待编译结果时最好不要让PC机执行其他对内存和CPU占用率高的程序:比如听歌看电影、硬盘查毒、反复点击网页等等。否则,编译时间一定短不了,白白浪费了生命。
在Quartus II的Tools - Options - General - Processing下面有一个性能选项,在Help文档里是这样介绍的:
Run design processing at a lower priority (recommended for single processor machines):
Runs a design process, such as a compilation or simulation, at a lower priority. This option is recommended for single processor machines because design processing tasks may use enough system resources to disable the Quartus II user interface for the duration of the processing task. Turn this option on if you want to use the Quartus II user interface while running a design process on a single processor machine. This option is turned off by default.
这一选项缺省是关闭的,也就是说Quartus II的编译进程是运行在正常的优先级下的。如果打开这一选项,Quartus II的编译进程的优先级会低于正常的进程,带来的效果是其它程序可以运行得更快,当然,编译就更慢了。提醒一句,不要由于看到了recommended这个词就毫不犹豫地打开这一选项。
前些天,一个偶然的情况下,我在Windows任务管理器里发现了手工改变进程优先级的方法。当然,对于已经知道这一秘密的朋友来说,这一雕虫小技算不了什么,但是我还是要写出来,让更多的朋友受益。
在Windows任务管理器的进程一栏,列出了CPU当前运行的各个进程,并且给出了内存使用情况。在任意一个进程上点击右键,可以看到一个“设置优先级”的功能。察看大部分进程的优先级,都在“标准”状态。通过把一个进程的优先级设置为高于“标准”,可以给该进程分配更多的CPU资源,相应地,其运行速度也就上去了。
在前面提到的Quartus II的性能选项中,只有两种选择:关闭时,编译进程运行在“标准”;打开时,编译进程运行在“低于标准”。通过手工修改Quartus II编译进程的优先级选项,可以设置编译进程运行在“高于标准”,甚至是“高”的优先级。这里,不建议设置为优先级最高的“实时”,因为对于Windows的稳定正常运行,应该有比Quartus II编译更重要的进程。
Quarutus II编译过程中,通常要顺序运行quartus_map、quartus_fit、quartus_asm、quartus_tan四个进程。其中前两个进程占用了编译时间的95%以上。手工修改这两个进程的优先级就可以实现调整编译速度的目的。
需要特别提醒的是,正常情况下,把Quartus II的性能选项关闭即可得到较佳的编译速度,不需要手工更改进程的优先级。但是,如果在Quartus II的编译过程中,可能会有意或无意地运行其它程序,而这些程序的运行性能又是可以牺牲的,那么可以考虑采用手工修改进程优先级的方法,保证Quartus II的编译过程不受干扰。
此外,在任务管理器里修改不是很方便,也许存在命令行修改进程优先级的方法。如果存在的话,可以结合Quartus II的命令行执行编译的方法,实现自动修改编译进程优先级。
PS:
倒数第二段话是本文的核心。
此外,对于提高工作效率和节省时间来说,享受编译的过程并充分利用时间积极思考是比提高软件运行速度更有效的的方法。反思一下,两次编译之间的时间是否比用于编译的时间更长?提高人脑的效率远比提高电脑的效率意义重大和深远。