当前位置:首页 > 使用Quartus调用Modesim仿真后,怎样才能不在Quartus中再次显示Modelsim的输出2
使用Quartus调用Modesim仿真后,怎样才能不在Quartus中再次显示Modelsim的输出
2009-04-04 22:52
前两天使用Quartus调用Modelsim仿真,让人忍不住要大骂法克的事情发生了:Modelsim完成仿真后,Quartus会把Modelsim的输出在Messages对话框中再次输出一遍,本来几万行输出在Modelsim中就得等半天,还得到Quartus中重复一次,而且Quartus读文件时缓冲区似乎处理得很粗糙,文件一大就卡。每仿一次就得看Quartus在那边卡半天,好几次有砸电脑的冲动!于是决定研究一下怎么才能避免Quartus的这种脑残行径。
网上搜了n遍,没找到!到几个群里问了n次,没人理!无比郁闷!没办法,只能发扬毛爷爷“自己动手,丰衣足食”的气节。摸索了半天,终于找出一种方法,虽然有点傻瓜,好歹也不用输出稍微多一点就得等半天了。 首先必须搞清楚为什么会发生这种现象。在Quartus的Messages对话框中可以看到这么一行提示: Info: Probing transcript
原来Modelsim会把自己的标准输出stdout写入一个transcript文件,如果用Quartus调用Modelsim仿真,则Modelsim仿真后会在
\\simulation\\modelsim\\文件夹中生成一个msim_transcript文件,Modelsim的输出就全部写在其中了。然后Quartus软件工程师做了一件吃力不讨好的事情,在Quartus中读入transcript文件并输出。
怎么才能避免这种事情呢?可以在Modelsim仿真完成后,先删除msim_transcript文件,然后关闭modelsim,这样Quartus就找不到transcript文件了,自然也不会读取输出浪费我们宝贵的时间了。不过直接删除时,应为modelsim仍然在使用transcript文件,windows会报错:文件正在使用中,无法删除。
看modelsim的手册可以知道要想阻止创建transcript文件可以通过transcript file “”命令来实现,所以我们可以通过以下几步来让自己“不再等待”:
1.在仿真结束后提示 Are you sure you want to finish?是选择否 2.在transcript对话框中会看到VSIM[paused]>,输入transcript file \,回车
3.删除msim_tanscript文件
4.关闭modelsim,回到Quartus中,Quartus会报错,因为它找不
到transcript文件了,不用管它,哈哈!
这个方法确实比较麻烦,不过比起每次仿真后等半天的尴尬来说应该是比较爽了吧。
本来想通过do脚本阻止transcript文件的输出,不过不知道为什么已经在工程中设置了通过指定脚本设置仿真,但每次Quartus还是会自己生成do脚本来仿真。唉,早知道这样当初就买赛灵思的开发板了。
这篇文章只不过是抛砖引玉,希望有高手能提供更好的解决方法。
续:使用Quartus调用Modesim仿真后,怎样才能不在Quartus中再次显示Modelsim的输出 2009-04-12 14:00
前两天向Altrea的工程师请教了一下,他也说可以用transcript file “” ,还说每次仿真会重写do脚本是Quartus NativeLink的一个defect。看完邮件感叹找到一个知音之余,觉得自己还算挺高明的嘛,顿有飘飘然之感觉。 后来一想不对啊,丫的你可是Altrea的工程师,不是Mentor的啊。怎么能净教用户让Quartus报红的法子呢?觉得这法子还是不大靠谱,遂再次看了一下仿真时Quartus的Message,发现有这么一句话:
Info: Command: quartus_sh -t
d:/altera/72/quartus/common/tcl/internal/nativelink/qnativesim.tcl --rtl_sim DA_TLC5620 DA_TLC5620
原来Quartus调用Modesim进行仿真时的流程都是通过tcl脚本来实现的,这就意味着我们可以通过修改tcl脚本来阻止Quartus读取transcript文件了。想到这里,不禁窃喜~~
很快找到了相关的脚本语句,不过不是在qnativesim.tcl中,而是在
d:/altera/72/quartus/common/tcl/internal/nativelink/modelsim.tcl中。打开modelsim.tcl,找到下面这段脚本语句:
if [catch { open \
nl_postmsg error \make sure the software is properly installed and the environment variable LM_LICENSE_FILE or MGLS_LICENSE_FILE points to the correct license file.\ error \ } else {
nl_postmsg info \ seek $tscr_fid $tscr_fpos while {1} {
gets $tscr_fid line
if { [eof $tscr_fid] == 0 } {
if { [regexp {# \\*\\* Error:} $line] } { nl_postmsg error \ incr err_cnt;
} elseif { [regexp {# \\*\\* Warning:} $line] } { nl_postmsg warning \ } else {
nl_postmsg info \ }
} else { break } }
set tscr_fpos [tell $tscr_fid] close $tscr_fid }
这段代码没仔细看,反正大概的意思就是开关读取transcript文件了,用#注释或删除之,再使用Quartus调用Modesim仿真后,Quartus就不会再次显示Modelsim的输出,也不会报错了。
还有,每次仿真时Quartus都会将原来的do脚本备份一下然后再重新生成do脚本,仿真几次后看到文件夹里一堆bak文件bak1,bak2,bak3......是不是很不爽呢?这也可以通过修改modelsim.tcl来阻止的。找到: if [ file exists $msim_do_file_name ] { backup_file $msim_do_file_name }
注释或删除之就可以了。
安全起见,在修改modelsim.tcl的时候记得要先备份哦。
共分享92篇相关文档