原创 第二章 反思两种的编译方法

2011-5-9 15:16 2302 10 10 分类: FPGA/CPLD

在第一章中,两种的编译方法各有好有坏,正是青菜萝卜的问题。第一种方法莫过是懒人的方法(笔者最喜欢),但是这个方法有一个缺点,就是Quartus II只是帮你把仿真对象 .v 和激励文件 .vt 通通“编译一次”而已。


这话要怎么说呢?打个比方,假设读者在第一次的仿真动作中,觉得仿真输出不满意,结果读者修改了激励文件。那么,如果按照“自动编译”的方式来运行,读者需要关闭ModelsimAltera,然后重新在Quartus II中调用 ModelsimAltera。

先看看演示视频吧:


http://www.swfcabin.com/open/1304922869


在演示视频中,激励文件的步骤0的被乘数和乘数还未被修改的时候,笔者先从Quartus II调用ModelsimAltera来启动仿真。当笔者修改激励文件中步骤0的被乘数和乘数(从之前的 10 * 2 变成 5 * 8 )这时候笔者不得不手动关闭 ModelsimAltera。为了是两个目的,第一是要劳烦Quartus II 重新帮我们编译文件,第二是系统报错的问题。


如果读者没有把ModelsimAltera手动关闭,然后再一次从Quartus II 启动 ModelsimAltera的话,系统就会报错(同一个时间是无法存在两个ModelsimAltera)。就此而知,我们知道手动关闭 ModelsimAltera是必须的,无论出于什么目的。


这种方法无论怎么简单,多少都很别扭 ....... 因为每一次修改 仿真对象或者激励文件,我们不得不再一次关闭 ModelsimAltera。唉 ~ 所到底,真的很别扭,但是笔者却十分钟爱它, 原因很简单,笔者可以省去许多手动操作的麻烦工作。不是所有人都和笔者一样懒,为了解决这个问题,我们必须把第一章中的两种编译方法整合整合起来。   


这话要怎么说呢?很简单呀,第一次打开仿真就用“自动编译”的方法,当仿真对象或者激励文件被修改以后,再使用“手动编译”的办法。呵呵,是不是被笔者搞糊涂了?我们来看演示视频吧:


http://www.swfcabin.com/open/1304923033


演示视频已经把过程表达得很清楚,笔者还是简单的分析一下。


首先笔者还是一如既往那样,先从Quartus II调用 ModelsimAltera,早期在激励文件中步骤0是 10 * 2,然后笔者修改了其中的 10 * 2 成为 5 *10。但是笔者没有执行和第一演示视频的动作,就是先关闭 ModelsimAltera再从 Quartus II 中启动。反之,笔者是引入手动编译的想法,笔者重新编译被修改的激励文件 .vt ,然后手动重新启动仿真和添加wave,最后再手动配置仿真用的最大时间。


第二演示视频的过程中可能会给读者留下一个“在重新启动仿真的时候为什么选择 "work" 这个"库" ”这一问题?那么,这个“库”到底是什么概念?在这里,我们先抛开手动编译不谈,我们来谈谈自动编译被隐藏的过程。


“库”和“仿真用的库”是有区别的。“仿真用的库”是编译时所使用的词典。换句话说就是,当某个仿真对象和激励文件想在Modelsim的环境中工作,普通下 Modelsim是不认识仿真对象和激励文件,所以Modelsim需要经过“编译”这一过程,把它们“转换”为仿真用的元素。在编译的过程中,编译器需要“参考仿真用的库”(有一点C语言库的感觉)。反之“库”是记录了仿真对象和激励文件“编译过后的结果”(亦即仿真元素)。


当从 Quartus II 中调用 ModelsimAltera,Quartus I I 会自动在项目的目录下建立“./simulation/modelsim”这个仿真项目(和手动编译中类似)。此外 Quartus II 也会自动为这个仿真项目建立名为 “work”的库。编译后的仿真对象和激励文件都保存在这里(仿真元素)。


在第二个演示视频中,当笔者经过 Quartus II调用 ModelsimAltera的时候,这个名为“work”的库已经建立完毕。一旦我们重新修改激励文件,我们用不着重新建立这个“库”。当然呢,我们可以直接更新在这个“库”中激励文件的信息。第二演示视频就是包含这个内容。 


其先,笔者借用Quartus II自动编译,自动建立仿真项目和库。当激励文件被修改以后,笔者再以手动编译更新这个“库”中的激励文件信息。最后如同手动编译一样,添加输出wave和配置最大仿真时间等 ......


同样的道理也可以用在更新“库”中的仿真对象。但是笔者不怎么建议这样做,当仿真对象被修改,还是先经过Quartus II的“综合和编译”来确保仿真对象的正确性以后再来仿真,以达到保险的效果。


好了,这一章就先谈到这里吧 ,读者先给自己的大脑消化消化吧 ... (*^__^*)  

文章评论0条评论)

登录后参与讨论
相关推荐阅读
akuei_2_550826815 2011-10-22 18:26
Verilog的私私细语 - 时钟化和信号的长度
目录 第2章 时钟化和信号的长度 2.01 一个时钟一块数据的概念 2.02 信号时钟化 2.03 深入了解模块的沟通 2.04 电平检测模块的整合(即时事件在时序上的不和谐)      实验八:电...
akuei_2_550826815 2011-09-08 12:47
瞎搞Time Quest 和无责任的笔记 第二章
最近整合篇的第二章的构思和灵感都累积不少了,应该是时候开工了。恰好手头上还有一本笔记还没有写完,就是这本瞎搞TimeQuest的第二章。目录笔者也懒得贴了,看过第一章的同学多少也会猜到第二章的内容是什...
akuei_2_550826815 2011-08-29 18:21
瞎搞Time Quest 和无责任的笔记 第一章
哎呀 ... 潜水了都有一段时间了,这是最近研究的成果和目标。 话说TimeQuest这个东西真的很搞怪呀,做得笔者不得不从其他的方向去研究它。 好了还是切入正题,TimeQuest用作静态时序的工具...
akuei_2_550826815 2011-07-06 17:43
Verilog的私私细语 - 整合的概念
目录         02  第1章  整合的概念          1.01  源码上的整合                   实验一:字面上的整合          1.02  时钟和步骤的定...
akuei_2_550826815 2011-06-22 10:18
VerilogHDL那些事儿 - 建模篇v4 + 时序篇v1
VerilogHDL那些事儿 - 建模篇v4 ====== v4 ====== 主要是修改了大量用法上的BUG和极限的精简内容 https://docs.google.com/leaf?id=0B...
akuei_2_550826815 2011-06-10 13:19
Verilog HDL的礼物 - Verilog HDL扫盲文
目录 02第0章 Verilog HDL语言扫盲文 030.01 各种的HDL语言 030.02 HDL语言的层次 03 0.03 RTL级和组合逻辑级 040.04 Verilog HDL语言真的那...
我要评论
0
10
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条