FPGA学习系列1-搭建自动化仿真环境

一、GUI方法使用Modelsim进行仿真的工作流程

第一步【新建工程】:打开Modelsim,点击菜单栏中的File->New->project新建一个仿真工程。
在这里插入图片描述
第二步【填写工程路径等信息】:在弹出的Create Project对话框中填写仿真的工程名(project)、工程存储路径(E:/SimBfm/sim)、默认库名称(work)。设置好后点击OK。
**库(library)的概念:**库是Modelsim仿真的载体,Modelsim会将仿真工程中的设计文件激励文件(testbench)的编译(compile)结果存放在work库中,当新建 工程时就会在工程存储路径下(E:/SimBfm/sim)生成一个work名字的库。
在这里插入图片描述
在Modelsim的工作区,选择library选项卡可以看到生成的work库(此时的work库是空的,因为我门还未编译和仿真设计文件和激励文件)。
在这里插入图片描述
第三步【添加文件】:新建或添加待测模块设计文件以及testbench文件。
在这里插入图片描述
添加完成后project选项卡内出现待测模块文件和testbench文件,status为“?”代表未编译。
在这里插入图片描述
第四步【编译】:编译添加的待测模块文件和testbench文件。右键添加的待测模块文件或testbench文件,选择Compile->Compile All。
在这里插入图片描述
编译成功相应文件的status变为“对勾”。
在这里插入图片描述
此时切换到library选项卡,此时work库里面已不是空的了。work库里面的phy_rgmii_bfm、top_bench分别是phy_rgmii_bfm.v和top_bench.v编译的结果。
在这里插入图片描述
第五步【启动仿真】:选中work库内testbench的编译结果top_bench,右击->Simulate without Optimization启动无优化仿真。
在这里插入图片描述
第六步【添加波形】:启动仿真完成后工作区多了一个sim窗口和object窗口,内部有顶层testbench和待仿真模块。点击任意一个在objects中出现此模块内部用到的全部信号名称。右键sim工作区的模块(或objects内的任意信号)->Add wave,将待观察信号添加到波形窗口。
在这里插入图片描述
第七步【运行仿真】:切换到wave窗口,设置仿真运行时间(100ns),再点击旁边的向下箭头按钮(run)运行仿真。可看到待观察信号出现波形。
在这里插入图片描述
在这里插入图片描述
至此结束Modelsim的GUI仿真过程。

二、使用自动化脚进行Modelsim仿真

1、仿真脚本分成三类,按照调用的先后关系排列如下:
工具启动脚本:sim_win.bat;
初始仿真脚本:sim_win.do;
反复仿真脚本:resim.do
三者之间的关系为:
在这里插入图片描述
2、sim_win.bat是一个批处理文件,其中代码如下:
1)文件内首先是设置Modelsim的环境变量路径,其中的D:\Xilinx\modelsim se\win64是modelsim.exe的存放路径;
2)其次设置Modelsim的license文件路径D:\Xilinx\modelsim se\LICENSE.TXT;
3)vsim是一条DOS命令,意思是调用Modelsim工具,并在modelsim工具中执行sim_win.do文件的内容。当DOS调用Modelsim没有成功时,需要设置环境变量PATH到.exe路径下。

set PATH=%PATH%;D:\Xilinx\modelsim se\win64
set LM_LICENSE_FILE = %LM_LICENSE_FILE%;D:\Xilinx\modelsim se\LICENSE.TXT
title %CD%

vsim -do sim_win.do

3、sim_win.do文件中代码如下,脚本的运行分成2个阶段:
1)退出当前打开的仿真环节;
2)启动反复仿真脚本resim.do
两个步骤之间,还可以插入对特定FPGA厂商仿真器件库的编译命令,和针对操作系统的差异而需要执行的特定命令。在我们仿真的这个阶段,这些命令是不需要的。

quit -sim

do resim.do

4、resim.do是由tcl脚本语言编写,脚本的运行分成6个阶段:
设置仿真编译目标文件库。
编译源文件到目标文件库。
设置仿真的顶层文件和参数,开始仿真环节,并链接已编译目标文件。
设置仿真运行参数。
从预先设置好的波形配置文件中加载观察信号到波形窗口。
启动仿真,运行至遇到break跳出信号。

quit -sim

vlib work
vdel -lib work -all

set ENABLE_LOOPBACK 0

vlib work
# compile vendor independent files

# compile testbench files
vlog -work work -sv testbench/top_bench.v

# compile bfm files
vlog -work work bfm/phy_rgmii_bfm.v

if {$ENABLE_LOOPBACK==1} {
    set interconnect_config 1
} else {
    set interconnect_config 2
}

vsim top_bench \
     -novopt \
     -t ps \
     -G/top_bench/bfm_rgmii/CLK_CYCLE=8 \
     -G/top_bench/bfm_rgmii/INTERCONNECT_MATRIX=$interconnect_config \
     -G/top_bench/bfm_rgmii/DELAY=1 \
     -G/top_bench/bfm_rgmii/CAPTURE_PKT_NUM=1 \
     -G/top_bench/bfm_rgmii/PREAMBLE_NUM=6

global IgnoreWarning
set IgnoreWarning 1 

log -r */*
radix -hexadecimal

if {$ENABLE_LOOPBACK==1} {
    do wave_loopback.do
} else {
    do wave.do
}

run -all

最终的文件夹架构为:
在这里插入图片描述
以下是一些常用的Modelsim脚本命令的意义:
vlib work:建立work库,相当于第一部分中新建工程时所生成的work库,后期的编译结果会存储在work中。
vlog -work work -sv testbench/top_bench.v:相当于上一部分中的compile,-work代表编译后文件的存放位置,最后是源文件路径,可使用绝对路径也可使用相对路径。表示将top_bench.v编译后的文件存放在当前工作目录下的work目录中。
vmap work work:映射库,第1个work是逻辑库名称,第2个work是当前Modelsim工作路径下的work文件夹。即将一个名为work的库映射到当前工作路径下的work文件夹。
vsim :启动仿真,后面的一些关键词含义如下,
-t ns:表示仿真时间单位为ns;
-novopt:表示仿真时无优化;
-nottimingchecks:无时序检查;
有时会使用类似语句 vsim -t ns -novopt work.top_bench,表示对work库中的top_bench进行仿真,相当于第一部分的第五步操作。
addwave:表示添加待观察信号到wave窗口中,这样就不用每次仿真手动添加波形。
run -all:运行全过程,也可以run 10us(运行10us)。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值