modelsim仿真vivado ip核方法和遇到的问题

modelsim仿真vivado ip核方法和遇到的问题

1. 说明
本文用于记录操作流程以及遇到的问题和解决方法。使用的vivado版本2019.2。modelsim版本19.2。

2. 首先是生成仿真库
参考芯王国的文章
vivado2018.3 与modelsim联合仿真
编译仿真库
编译选项

在这个过程中出现了error,生成的文件夹非常小,还不到100M。tcl shell表示有一个cxl_error.log文件记录了error的情况。使用everything搜索发现该文档在c:\user\你的用户名\appdata\roaming\xilinx目录下。文档中出现error [vlog-12110]。

以下两篇文章给出了这个问题的解决办法
Modelsim编译Vivado仿真库报错(vlog-12110)
vlog 12110错误及解决

再次通过everything搜索,发现modelsim安装路径下和c:\user\你的用户名\appdata\roaming\xilinx路径下都有modelsim.ini文件(其他路径不用管),先修改了modelsim文件路径下的voptflow,生成库,还是error。再把c盘下的modelsim.ini修改,不再出现error了。

3. 把库添加到modelsim
这时候modelsim里面还是只有原本的库。
modelsim原本的库
我本想手动把库添加进去,但实在是太多了。想着应该有简便的方法。

再次参考芯王国的文章
modelsim 自动化 独立仿真vivado ip核工程
仿真选项
这里要先将红色箭头处选为modelsim,才会出现绿色箭头的框,不然是不会出现的。这是在选择vivado中使用哪个仿真器。以后想使用vivado默认仿真器,再切换回来即可。
选择第三方库
这里是要指定第三方仿真工具的可执行文件地址和库的地址。

到这一步还没有把库添加到modelsim中,还要进行一次仿真,就像平常在vivado里面启动仿真一样操作。
启动完仿真之后,modelsim的界面就自动打开了,vivado的库就自动添加到了modelsim中。
加入vivado库的modelsim库界面
这之后只要从vivado中仿真,就可以直接跳出modelsim界面得到结果。

4.直接在modelsim中仿真
脱离了vivado想在modelsim中仿真,还需要几步,需要把vivado生成的modelsim.ini文件中secureip之后和vivado库有关的内容拷贝到modelsim安装路径下modelsim.ini中。然后举例说明接下来的操作:
这里是仿真一个rom ip核。需要在modelsim里新建一个工程,把tb和ip核代码添加进去。ip核的添加参考
modelsim仿真调用xilinx IP的一种方法
modelsim 独立仿真 Xilinx IP核

在windows目录下就是把vivado工程目录下如:
D:\*\ *\**.srcs\sources_1\ip\blk_mem_gen_0\路径下simulation和sim文件夹中的.v文件都添加进modelsim工程。然后rom文件还需要初始化的数据,刚刚这个路径下还有一个mif文件,这个文件拷贝到新建的modelsim工程work目录下。

mif文件说明参考
vivado中coe与mif的区别与联系
然后就可以像普通modelsim工程进行仿真了(目前只是rom ip核经过了验证,其他ip核还需要再验证看看)

5. 使用do文件自动化仿真
好几篇文章都像用Modelsim独立仿真带Vivado IP核的仿真工程中描述的,在vivado仿真之后,使用工程目录…\project.sim\sim_1\behav\modelsim下的三个do文件,分别是tb_compile.do、tb_simulate.do、tb_wave.do。基本上都是直接使用这三个do文件中的代码,就能完成仿真。但我在使用中出现了很多问题。tb_compile.do中的代码完全不能用

D:\\modeltech64_2019.2\\win64\\vlib modelsim_lib/work
D:\\modeltech64_2019.2\\win64\\vlib modelsim_lib/msim

D:\\modeltech64_2019.2\\win64\\vlib modelsim_lib/msim/xil_defaultlib

D:\\modeltech64_2019.2\\win64\\vmap xil_defaultlib modelsim_lib/msim/xil_defaultlib

D:\\modeltech64_2019.2\\win64\\vlog -64 -incr -work xil_defaultlib  \
"../../../../project_1.srcs/sources_1/ip/blk_mem_gen_0/sim/blk_mem_gen_0.v" \
"../../../../project_1.srcs/sim_1/new/tb.v" \


# compile glbl module
D:\\modeltech64_2019.2\\win64\\vlog -work xil_defaultlib "glbl.v"

quit -force

问题之一是不能带有路径,一含路径就报错。并且这个代码映射了多个库,结合本文第4节的原理,令人疑惑到底是vlog blk_mem_gen_0 还是vlog blk_mem_gen_v8_4_4,而且不管填哪个还都会报错。tb_simulate.do中的代码

vsim -voptargs="+acc" -L blk_mem_gen_v8_4_4 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm -lib xil_defaultlib xil_defaultlib.tb xil_defaultlib.glbl

set NumericStdNoWarnings 1
set StdArithNoWarnings 1

do {tb_wave.do}

view wave
view structure
view signals

do {tb.udo}

run 1000ns

由于映射了多个库,所以需要把多个库关联起来,vsim后面跟了一堆就是干这个事儿的。
在modelsim中运行这两个do文件之后,会提示“error:no design loaded”通过删改无论怎样都不能运行正确。
之后就放弃了直接使用vivado路径下的do文件代码,转去学习以下几篇文章

ModelSim之TCL仿真
modelsim仿真出现** Error: No Design Loaded! 求解决,急急急急急!!!有追加

从中明白了do文件的基本流程,首先是要用vlib建立一个逻辑库,从前使用modelsim的习惯是建立一个名为work的库,所以如下面的代码段所示。

vlib之前有切换路径、退出前面的仿真、清空tcl shell框信息的代码。切换路径不是必须的,只要do文件和bat文件以及所有源文件都在同一路径就不用切换。如果已经有打开的仿真,那可必须关掉前面的仿真。

建立逻辑库之后,要在windows中也生成一个文件夹并且让这个文件夹和逻辑库关联起来,即物理库和逻辑库的关联,这里使用vmap语句。关联好了之后就开始加入仿真文件了,本工程中包含tb.v和rom ip核的文件,和第4节的思路一样,两个.v文件都包含了。-incr 表示只编译有变化的代码,-work语句指定一个逻辑名称或者一个库的路径来映射到逻辑库work,一行写不下时使用了换行符\,顶层文件也要放在最后面的位置。

不知道glbl.v是不是必须的,但是加上好像也没什么问题。到这一步发现,project框下并没有出现添加的.v文件,不能像手动操作那样进行编译。这是使用do文件的特点,不会对结果造成影响。

#更换路径
#cd D:\\fpga\\project_1

# 退出之前仿真
quit -sim

# 清空信息
.main clear

#新建一个库
vlib work

#映射逻辑库到物理库
vmap work work

#编译仿真文件
vlog -incr -work work  \
"project_1.srcs/sources_1/ip/blk_mem_gen_0/sim/blk_mem_gen_0.v"  \
"project_1.srcs/sources_1/ip/blk_mem_gen_0/simulation/blk_mem_gen_v8_4.v"  \
"project_1.srcs/sim_1/new/tb.v"

# compile glbl module
vlog -work work "glbl.v"

do tb_simulate.do

这些都完成后,还需要进行仿真。参考以下两篇文档,发现vsim后面不需要跟那么多描述符。并且第四节中手动操作时,tcl shell框中会出现对应的命令语句。于是我直接拿来使用。
参考文档:
Modelsim TCL仿真
基于脚本的modelsim自动化仿真

第一句中-voptargs="+acc" 是必须的,没有这句软件也报错。work.tb表示仿真work库中的tb文件。调用的tb_wave.do文件中对界面显示、添加波形做出了设置。之后就是运行1000ns,运行结束后将屏幕进行缩放。

vsim -voptargs="+acc" work.tb

set NumericStdNoWarnings 1
set StdArithNoWarnings 1

do {tb_wave.do}
run 1000ns
WaveRestoreZoom {0 us} {1000 ns}

有了上面这两个do文件,仿真界面就差最后一步了,如果信号比较少、逻辑比较简单,这时候也可以自己添加波形。但有时候需要修改波形的进制、信号放置的顺序,进行多次仿真,最好还是能按照自己的需要来进行设置。于是有了tb_wave.do中的代码。

第1、2行就是添加信号到波形界面,当然也可以用第4行的代码代替,*表示该路径下的所有信号,或者像第5行单独对每个信号进行编辑,比如颜色、模拟还是数字、可显示的最大最小值、进制以及必须放在最后的信号名称。

第7行代码则是在已经显示某波形后想对其进制修改。后面根据注释所示,使用不同的标尺单位,方便进行换算等。上面两篇参考文章也都写了一些内容。最详细的内容在modelsim软件自带的手册中。
还有一条property wave代码,手册中说是可以改变信号的颜色、模式等。有时候也确实需要在信号已经显示出来之后来回切换模拟和数字模式,但测试了几遍都在最后一个描述符pattren上出了问题,系统提示error: no item found。

最后一部分是用字符串代替数字显示,这在状态机中特别好用。fsm_a是给这个状态机起的名字,add wave之后在波形显示界面就会出现这个名字。

virtual function 的功能是给/tb/addra信号起了个新名字叫state。然后add wave将state显示出来。相同的定义也可以起不同的fsm名。但不能起相同的fsm名,必须先把这个被占用的名字删除,为了方便不如干脆新起个名字。

if { [catch {[add wave *]}] } {}
add wave /glbl/GSR

#add wave sim:/signal_generate_tb/*
#add wave -noupdate -color pink -format Analog-Step -height 30 -max 100 -min -100 -radix unsigned /tb/addra
#更换某个信号的进制
radix signal /tb/addra unsigned
#信号名框的宽度
configure wave -namecolwidth 150

#信号值框的宽度
configure wave -valuecolwidth 92

#信号值右对齐
configure wave -justifyvalue right

#单个信号框宽度(只有框变化,信号高度未变,且放大后无法恢复)
configure wave -rowmargin 4

#标尺单位
configure wave -timelineunits us

#只显示leaf name
config wave -signalnamewidth 1

#显示full name
#config wave -signalnamewidth 0

configure wave -timeline 0
update

#添加分割线来分开不同的组
#add wave -divider {clk}

#显示活动 cursor的时间
#getactivecursortime

#用状态机名代替数字
virtual type {
{6'h0  IDLE}
{6'h1  S1}
{6'h2  S2}
{6'h3  S3}
{6'h4  S4}
{6'h5  S5}
{6'h6  S6}
} fsm_a;

virtual function {(fsm_a)/tb/addra} state
add wave /tb/state

最后,仅使用do文件还不够方便,因为要先打开modelsim,再输入do sim.do语句。在windows新建一个.bat文件,加入一句modelsim -do sim.do(你的do文件名称),完成后只要单击这个.bat文件,就可以自动打开modelsim并完成一系列动作。

21-2-8更新
使用vivado自动生成的do文件,原先的错误出在两个地方,一个是前面的路径,把vlog等之前的路径删掉,按前面写的代码切换路径和编写路径。第二个就是文件夹,像vlib modelsim_lib/work,其实是在windows下有个叫modelsim_lib的文件夹,文件夹下面有个库叫work,单用vlib语句是不能在windows下新建文件夹的,所以报错。如果想实现,需手动在windows下建好对应的文件夹(也许脚本语言有新建文件夹的语句,目前还没找到),然后再使用这个语句。或者直接vlib work 再vlib msim这样子把库都放在一起。vivado自动生成的tb_simulation.do文件就可以不经修改直接使用了。

以后需要掌握的内容:
使用ModelSim自动生成状态机FSM的状态转换图

  • 6
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
使用Vivado进行IP核仿真的步骤如下: 1. 在Vivado中打开项目,并在左侧的IP Integrator窗口中添加所需的IP核。 2. 连接IP核并设置IP核的参数。您可以在IP Integrator中选择IP核并在属性窗口中设置参数。 3. 在设计完成后,保存并生成Bitstream文件。 4. 打开仿真工具(如ModelSim)并创建一个仿真项目。 5. 将IP核仿真文件添加到仿真项目中。您可以使用DDS Compiler仿真代码、仿真参数设置和仿真波形进行仿真。 6. 运行行为级仿真,确保IP核仿真环境中按预期工作。 7. 分析仿真结果并验证IP核的功能。 请注意,您可以参考具体的IP核文档和Vivado用户指南以获取更详细的仿真步骤和参数设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vivado_DDS IP核_设计与仿真](https://blog.csdn.net/weixin_44625313/article/details/125375522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vivado FFT IP核例程](https://download.csdn.net/download/qq_41894385/85356944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vivado调用IP核(乘法器)仿真](https://blog.csdn.net/weixin_41096151/article/details/123832635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sissiyung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值