一、安装
1、下载软件
链接:https://pan.baidu.com/s/1S05AnO_w-wy6RsAj_kdUXg
提取码:p2nt
2、根据电脑类型是32位还是64位,解压不同安装包。
解压得:
2、运行.exe文件,出现:
问题及解决办法: 这是杀毒软件造成的,因此在安装过程中关闭杀毒软件即可。关闭之后,再次运行.exe文件。
3、点击下一步,进入选择安装位置界面,如下:选择好安装位置后点击下一步。
4、点击同意
5、接下来等待安装结束即可,在安装过程中,会跳出来弹框,询问是否要添加桌面快捷方式与环境变量,都选择“是”(也可选择否)。
6、安装结束之后选择否,然后安装完成,继续下一步
7、解压Crack,将MentorKG.exe和patch64_dll.bat复制到questasim的安装目录的win64中。
8、修改win64文件夹下的mgls64.dll的属性。
9、双击运行win64文件夹下的patch64_dll.bat文件,然后会生成并自动打开一个LICENSE.TXT文件(不要直接关闭,将其另存在一个你找得到的地方),如下:
10、另存license文件位置后,为其添加环境变量。
11、添加系统环境变量
(1)电脑开始搜索“环境变量”,进入“编辑系统环境变量”
(2)点击环境变量
(3)在系统变量处选择新建
(4)变量:LM_LICENSE_FILE
变量值:license文件的位置
输入这些,选择确定,即添加完成。
安装结束!!!
更新!!!!
问题:第一天questasim能够正常使用,但是第二天重新打开questasim时,出现:fatal license error :Unable to checkout a viewer license necessary for use of the QuestaSimgraphical user interface. vsim is closing.
错误
解决办法:
(1)解压以下文件
(2)打开QuestaSim10.1d windows64位xx说明.txt,按照其步骤即可。
ps:
1)在第一步中,之前我们已经将部分同名文件复制到win64下,直接覆盖即可。
2)第二步骤中,我的win64文件夹下生成下面两个.bat文件,我的运行patch64_dll.bat才有用。(原因可能是因为我的电脑是64位的)
二、questasim使用教程
1、打开软件,新建工程:file->new->project,填写工程名和工程位置,然后点击OK
2、编写/添加文件,这里为方便说明,使用写过的简单4位全加器adder4.v和对应testbenchadder4_tb.vt。(文件代码在文末)
3、通过以下步骤添加文件,第二步选择copy to project directory是为了避免影响到原文件,并且方便我们查看
4、成功添加问价如下
5、编译(类似C语言编译),步骤如下:
将两个文件都进行编译。
6、运行
(1)首先点击图中1处的library,展开work,发现有与我们编译同名的两个文件。
(2)如需对文件代码进行更改,可右键该文件->edit,如图中第一步。运行的话右键该文件,选择simulate without optimization(避免被优化逻辑)。
因为我们要进行仿真,所以我们要运行tb文件。
运行结束,仿真界面如下:
7、为了检查结果,我们要观察输出波形。
(1)将输入、输出端口添加波形至观察窗口:第一步,选择到adder,然后再右侧2处窗口显示出各端口信号。
注意:如果你不知道该点击哪里显示出信号端口,可通过右侧窗口确定。Mode的那列为In或者Out时即为信号端口(这些端口也就是你设计中的输入输出端口)。
(2)选择要观察的信号,右键->add wave,进入wave窗口界面。
界面左侧2处(下图)的各信号名包含路径等东西,很繁琐。通过如下图所示1处的按钮可简化。
(3)在transcript窗口run, 键入:run 1us,然后enter。即仿真1us,这个时间可以随意更改,直到得到你想要的波形。
(4)回到wave窗口,如果没看到波形,按下快捷键f,就可出现波形。
至此,使用questasim对Verilog设计进行仿真的教程到此结束。
三、附录
1、adder4.v
odule adder4(cout,sum,ina,inb,cin);
input cin;
input[3:0] ina,inb;
output cout;
output[3:0] sum;
assign {cout,sum}=ina+inb+cin;
endmodule
2、adder4_tb.v
`timescale 1ns/1ns
`include "adder4.v"
module adder4_tb;
reg[3:0] a,b;
reg cin;
wire[3:0] sum;
wire cout;
integer i,j;
adder4 adder(sum,cout,a,b,cin);
always #5 cin=~cin;
initial begin a=0;b=0;cin=0;for(i=0;i<16;i=i+1)
#10 a=i;
end
initial begin for(i=0;i<16;i=i+1)
#10 b=j;
end
initial begin
$monitor($time,,,"%d+%d+%b={%b,%d}",a,b,cin,cout,sum);
#160 $finish;
end
endmodule
参考:https://blog.csdn.net/qq_42334072/article/details/108811549
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73695.html