目录

一、前言

二、仿真分类

三、RTL级仿真

 3.1创建库

3.2 仿真配置设置

3.3 运行仿真 

四、常见问题

4.1 # Error loading design

4.2 运行仿真时报错“can't read "Startup(-L)": no such element in array”

4.3运行仿真时无任何报错,但object窗口为空,可正常运行仿真,如执行命令run -all 但没有波形


一、前言

        目前网上较多的是使用ISE如vivado配合vivado进行仿真操作,本文将演示直接使用modelsim进行仿真,需要提供的是工程源文件和测试文件

二、仿真分类

        根据使用不同仿真阶段的源文件进行仿真,可划分为RTL仿真,综合后仿真,时序仿真。

RTL是根据.v源文件中verilog描述的功能进行仿真,是寄存器传送级的描述进行测试,验证功能的正确性,综合后仿真为对RTL级描述工程综合后的网表进行仿真,时序仿真是指布局布线后的仿真,并且考虑了布线后的线路时延。

三、RTL级仿真

以一个计数到10后重新计数的计数器工程为例,工程文件为counter1.

3.1创建库

打开modelsim,进入"file->new->library"

Library Name输入库名,Library Physical Name名称默认相同即可

创建后可在“Library”中查看到创建的library

3.2 创建project

进入“File->New->Project” ,弹出如下设计弹框,Project Name自定义名称,Project Location设置创建的工程位置,Default Library Name默认为work,将其修改为上一步设置的library名称,此处为counter_lib,然后点“OK”

设置完project后会弹出源文件添加的弹框,本例因为事项写好了源文件和测试文件,故选择“Add Existing File”直接添加文件,也可选择“Create New File”进行创建文件后再编写

同时选择源文件和测试文件进行添加 

添加成功后如下图所示 

选中任一文件,鼠标点击右键,选择“compile->compile All”,对添加的文件进行编译,编译成功后status由“?”变为“√”

3.2 仿真配置设置

任选一个编译后的文件,点击鼠标右键,进入“Add to Project->Simulation Configuration”

"Simulation Configuration Name"设置配置名称,库文件中如图第一步选择测试文件“counter_tb”,然后点击右下角的“Optimization Options” 

 

 进入"Options","Optimization Level"选择第二个,点击"OK"。

回到仿真配置界面,再点击“save”

 

3.3 运行仿真 

在project中可看到工程文件下多了一个“simulation_test”的配置文件,可双击该配置文件或点击鼠标右键后选择“Execute”

 如果没有弹出"Objects"和“wave”窗口,则按下图操作勾选“wave” 和“Objects”

在“Objects”窗口中 ,选择需要查看的波形,点击鼠标右键,选择“Add to->Wave->Selected Signals”即将需要查看到的波形添加到Wave窗口

在Wave窗口中,按下图顺序,先点击1执行restart,再点击2执行Run -All运行仿真,此时仿真开始,需要停止仿真点击3,执行stop即停止仿真

仿真结果波形如下图

如果想运行指定时长的波形,则可在命令窗口设置,先执行restart,再执行run 100000,此处因测试文件的时间为'timescale 1ns/1ps,因此100000为100000ps

结果如下图,仿真在100000ps处停止 

四、常见问题

4.1 # Error loading design

一般报此错误都是仿真文件设计问题,具体原因较多,可以查看具体的信息,此处的错误比较简单。

解决办法 :按照错误提示“ Port 'ce' not found in module 'FF' (4th connection)”可知端口ce不存在,检查设计的源文件修改即可

4.2 运行仿真时报错“can't read "Startup(-L)": no such element in array”

源文件和测试文件编译成功后,运行仿真报错 

解决办法 :进入到library下,选择测试文件divider_tb

4.3运行仿真时无任何报错,但object窗口为空,可正常运行仿真,如执行命令run -all 但没有波形

运行打印如下

 object为空

 解决办法:

运行仿真时进入“Optimization Options”,选择“Apply full visibility to all modules”即可

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐