本人一直致力于应用自动化ModelSim仿真流程,最近由于项目需要,调整Transceiver的使用。将之前笔者这方只做发送修改为增加一路接收通道,在上板验证之前自己先用ModelSim开始仿真。
很快找到了一个ALTERA提供的例子,例程里的ModelSim工程无法在本人电脑上运行,从提示的信息看原因应该是库的问题。显然是本地Modelsim的库和当初Modelsim工程建立时的库不一致(至少路径不一样)。
修改原始的sim.do,保留原始wave.do文件以及设计源文件,建立batch文件开始自动化仿真,具体可以参考《FPGA设计之自动化》一文。这里需要强调的是,ALTERA的sim.do文件里不包含自动建立工程以及编译源文件命令,修改后加入,这意味着整个仿真重新建立工程,更重要的是修改启动仿真的命令,这个命令里包含了调用仿真库的内容,修改后的sim.do文件如图1所示。
运行batch文件开始自动化仿真,发现仿真到最后一步,即调用wave.do往wave窗口加入观测信号的时候出现error,如图2所示,错误的内容是很多信号不知道什么原因在add到wave窗口的报错。
不过该错误似乎不影响整个仿真流程走完,查看wave窗口发现有部分信号被成功添加到了wave窗口,如图3所示。
这个例子是ALTERA提供的,源文件笔者并没有修改,所以设计不会有问题,笔者修改的是sim.do文件,但是从上述仿真过程来看问题应该不是出在sim.do文件上,因为过程中的modelsim工程建立、源文件编译、启动仿真再到调用仿真库都通过了,唯独在添加信号到波形窗口时出问题。
分析图1中的错误发现所有错误属于同一类型,错误提示信息中有个关键词“Executing ONERROR command at macr”。那么也就是在在sim.do调用wave.do的时候执行了一条叫“ONERROR ”的命令,并且出错。查看wave.do文件,发现第一条命令就是这个“ONERROR ”,如图4所示。
一开始并没有仔细查阅这条命令的具体作用,想当然的认为既然它有问题,那么就把它屏蔽掉就是了,然后重新启动仿真,结果发现还是出类似的问题,只不过区别是错误只报图2中的第一条而已,然后仿真就结束,而且波形窗口一个信号也没有添加。所以很明显这个oneerro命令(特别是其参数resume)就是当启动波形窗口的时候遇到错误并回复,而不是停止仿真。所以当屏蔽这个命令后,wave.do中添加第一个信号的时候就出现问题,从而退出仿真,波形窗口里也未添加任何信号。总之,这个问题本质并不是由这个命令产生的。
仔细分析如图5所示的modelsim给出的仿真整个过程的提示信息,可以看到其中有这么一句“Note: (vsim-3812) Design is being optimized...”,也就是说这个仿真工程在仿真的时候是要被首先优化的,根据以往的经验,modelsim的优化经常“不干什么好事”。
修改sim.do中的vsim参数,即添加一个不使工程优化参数:“-novopt”,重新仿真,结果一切正常,波形窗口如图6所示。
后话:
这次经历,促使我打算重新审视ModelSim脚本中的众多命令的含义了。比如wave.do中的命令以前关注的就不多,只是掌握了添加波形的几条命令,其他命令并没有深究其具体含义,侧重点多放在了sim.do里的命令。以后还需要关注如图4开头以及wave.do结尾的几个命令如图7所示,这些命令一般都是用于编辑wave窗口显示状态的,比如可以通过tcl命令设置wave里信号是按hex模式还是模拟方式来显示,以及方法显示还是缩小显示等等。
文章评论(0条评论)
登录后参与讨论