用modelsim对Verilog进行仿真

目录

1.新建工程:file->New->project

2.若有原工程,会跳出关闭原工程的对话框;无原工程则跳出新建工程信息框

3.填写新建工程信息框,只填前两个框,其他保持默认,填写完点击确认。注意工程名字和保存路径不要出现中文!!!

4.新建V文件,点击create New file;若原来有就选择add existing file

5.填写V文件名,与模块名保持一致,文件类型选择Verilog

6.新建完成,开始编写模块代码

7.编写testbench文件(测试文件,简称tb文件)

        新建V源文件

        保存到默认位置,文件名后加_tb来代表tb文件,同时模块名也与文件名保持一致

        将文件添加到工程中,在左边的工程目录空白处右击,选择add to project->existing file->browse预览tb文件位置,双击tb文件即可将其加入工程

        按照tb文件规范编写tb文件

8.全部V文件编写和添加完成后,对所有文件进行编译:compile ->compile All,若有错误则通过最下边问提示框进行定位查找语法错误,直至所有文件都通过编译

9.开始仿真:simulate->start simulate->Design->work选择tb文件

10.点击start simulate 框的右下角optimization options,勾选中间那个选项,将所有模块的所有变量添加至仿真,点击OK

11.start simulate框点击OK,跳出仿真界面。

12.右击test_tb->add Wave将test_tb模块中的所有变量添加到波形图中

13.找到弹出的wave框

14.点击信号框下边的小山,将信号的前缀隐藏掉

15.点击上面工具栏的run图标,运行仿真,可以改变旁边的仿真时长,也可以多点击几次run仿真更长的时间

​16.点击放大镜,看全图

1.新建工程:file->New->project

2.若有原工程,会跳出关闭原工程的对话框;无原工程则跳出新建工程信息框

3.填写新建工程信息框,只填前两个框,其他保持默认,填写完点击确认。注意工程名字和保存路径不要出现中文!!!

4.新建V文件,点击create New file;若原来有就选择add existing file

5.填写V文件名,与模块名保持一致,文件类型选择Verilog

6.新建完成,开始编写模块代码

7.编写testbench文件(测试文件,简称tb文件)

        新建V源文件

        保存到默认位置,文件名后加_tb来代表tb文件,同时模块名也与文件名保持一致

        将文件添加到工程中,在左边的工程目录空白处右击,选择add to project->existing file->browse预览tb文件位置,双击tb文件即可将其加入工程

        按照tb文件规范编写tb文件

8.全部V文件编写和添加完成后,对所有文件进行编译:compile ->compile All,若有错误则通过最下边问提示框进行定位查找语法错误,直至所有文件都通过编译

9.开始仿真:simulate->start simulate->Design->work选择tb文件

10.点击start simulate 框的右下角optimization options,勾选中间那个选项,将所有模块的所有变量添加至仿真,点击OK

11.start simulate框点击OK,跳出仿真界面。

12.右击test_tb->add Wave将test_tb模块中的所有变量添加到波形图中

13.找到弹出的wave框

14.点击信号框下边的小山,将信号的前缀隐藏掉

15.点击上面工具栏的run图标,运行仿真,可以改变旁边的仿真时长,也可以多点击几次run仿真更长的时间

16.点击放大镜,看全图

最后查看波形图是否正确,若不正确,再修改文件,后重新编译仿真。


### ModelSim中进行Verilog仿真的注意事项 #### 添加信号的顺序 在ModelSim中执行仿真前,务必按照正确的顺序添加待观测信号。如果先运行仿真再尝试添加信号,则可能导致无数据显示的情况。因此,在启动仿真之前应预先加载所有需要监控的关键节点和变量[^3]。 #### 阻塞与非阻塞赋值的选择 编写测试平台(Testbench)时对于不同类型的操作采用合适的赋值方式非常重要。具体来说,建议使用`=`来进行时钟信号的直接赋值;而对于其他输入激励则应该利用`<=`来实施非阻塞式的更新逻辑。这样做有助于防止由于缺乏适当的时间协调而导致的数据竞争条件或意外行为[^4]。 ```verilog // 推荐做法:时钟用 "=" 赋值, 输入信号用 "<=" 赋值 initial begin clk = 1'b1; // 初始化时钟为高电平 forever #5 clk = ~clk; end always @(posedge clk) begin input_signal <= new_value; // 使用非阻塞赋值给输入信号 end ``` #### 初始状态设定 为了使仿真相位与时序更加贴近实际硬件工作情况,通常会将全局时钟信号初始化为特定的状态——通常是高电平(即'1')。这使得所有的触发动作都发生在第一个下降沿之后,从而更好地模拟真实环境下的事件序列。 #### 版本兼容性和接口一致性 当涉及到跨工具链的工作流程(比如MATLAB/Simulink与ModelSim之间的交互),必须仔细核对所使用的软件版本及其API/ABI规格是否相互支持。此外还要确认不同部分之间传递的信息格式保持一致,以免引起不必要的错误或者误解[^1]。 #### 文档记录的重要性 在整个项目过程中维护详尽的日志和技术笔记是非常有益处的。这些资料不仅能够帮助团队成员理解当前的设计决策背后的原因,而且可以在遇到困难的时候作为参考资料快速定位并解决问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值