使用Modelsim独立仿真Altera及Xilinx IP核

2024-08-28 23:58

本文主要是介绍使用Modelsim独立仿真Altera及Xilinx IP核,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用Modelsim进行仿真非常方便,可以通过.do文件完成一些重复性的界面操作,但是使用Modelsim仿真IP核的时候经常会因为没有库文件的问题而纠结,网上不乏一些相关教程,但是在使用过程中总会遇到这样那样的问题,于是我痛定思痛,决定彻底解决这个问题,为了帮助大家解决相同的烦恼,决定写这篇文档,帮助大家避免走我曾走过的弯路,这也是我的第一篇教程,希望能帮到大家!

1       软件环境:

操作系统 win7 旗舰版 64位

Modelsim SE10.1a

Quartus II13.0sp1 (64-bit)

Vivado 2016

2       思路说明

不管是Altera还是Xilinx的软件都有直接调用Modelsim仿真的功能,但是其缺点在与每次调用时都会重复编译相同的库,耗时较长,而且每次调用后仿真波形都是默认的,需要我们再次手动添加波形,无形中耗费了大量时间。同时Modelsim具有编译快,仿真快的优点,在这里就不多说了。

其实软件在调用Modelsim的时候回生成相应的.do文件,仔细研究生成的文件会发现里面包含了完成Modelsim仿真的几乎所有命令,包括相关库的编译,而我们要做的就是利用该.do文件,在其基础上进行修改,达到我们想要的结果。

3       Quartus下使用Modelsim独立仿真

3.1 设置Quartus中仿真软件及仿真脚本

首先你要有一个自己的要仿真的工程,如果没有,可以参考网上其他资料新建一个最简单的PLL分频的工程,然后打开Quartus II 13.0sp1,设置Modelsim的安装路径。

然后在Setting里设置仿真工具,选择Modelsim,设置仿真用到的testbench,该文件需要自己提前写好。


点击Test Benches->New


先点击Add,根据路径选择你已经写好的testbench,然后根据填写下图中第一和第二行的内容,注意,Test bench name指的是你具体文件的名字,后面要有文件名后缀,我是自己写的,所以是.v,如果用Quartus自动生成的,是.vt,二者没有本质区别,下一行Top level module in test bench 要填写的是你testbench中module的名字,如果注意规范的话,可以把文件名和module名命名成一样的,同时命名中加tb表示其为testbench。


最后,点击Tools Runsimulation tool  RTL simulation,程序会自动调用Modelsim进行仿真,同时编译相关库。

完成以上操作,软件会自动调用Modelsim完成仿真,到这一步,恭喜你已经学会了使用Quartus与Modelsim联合仿真的方法。

3.1 查看Modelsim记录

但是联合仿真并不是我们的目的,下一步我们在Modelsim中查看软件的记录,发现实际上是执行了一个名为sdram_test_run_msim_rtl_verilog.do文件(Modelsim中的脚本文件)。

我们找到并打开该文件,一般该文件位于工程目录下名为Modelsim的仿真文件目录下,可以使用everything搜索找到,内容如下:

该文件的功能实际上是建立库,生成映射,然后编译源文件。

简单分析各语句功能,第2、3行是检测是否有库文件存放的目录,如果没有,新建一个名为Verilog_libs的路径。vlib是新建一个仿真库,vmap将逻辑库映射到实际的物理地址,其后面参数依次为逻辑库和实际库地址,“.”的意思为当前目录,“..”为上一层目录,知道这个可以很好的利用相对路径,如果用过Lunix应该对这个比较熟了。

下面是编译生成的库


接下来要做的就是新建一个工程,然后想办法调用这些自动生成的库,以后就可以摆脱联合仿真,这么做有几点好处1不用每次都编译Altera的库,2 可以直接在Modelsim中进行操作了,而与Quartus没有关系了。3.Modelsim编译.v文件比较快。

也有相关教程教大家一次性编译Altera所有的库文件然后放到指定文件夹备用,本教程方法可以借助软件自动生成的.do文件,省去自己从头编写的麻烦,具体大家可以自己探索。

3.3      新建Modelsim工程

新建工程的方法就不在这累述了,建完之后添加目前的设计文件,可以直接添加Quartus工程下的文件,这样的好处是不用重复复制文件,同时文件只有一个备份,避免在Modelsim调试时做更改而Quartus工程下的文件没有更新,毕竟,最后仿真完成了还是要回到Quartus的。

将sdram_test_run_msim_rtl_verilog.do文件复制的Modelsim工程目录下并打开,翻到红线所示行,之前的代码只留下库映射的语句,其余用#注释掉,这样就不用每次都编译相关库文件了。下面解释下代码具体功能。

vlibrtl_work         建立一个名为rtl_work的库(物理)

vmap workrtl_work       将逻辑库work 映射到物理库rtl_work

vlog-vlog01compat -work work +incdir+E:/99_ZJ_IP/12_sdram_test{E:/99_ZJ_IP/12_sdram_test/sdram_pll.v}     

vlog是编译.v文件的命令,“-”之后表示编译参数,后面是文件的路径,可以不用修改,直接使用,

vsim -t 1ps -Laltera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -Lcycloneive_ver -L rtl_work -L work -voptargs="+acc"  tb_sdram_test

仿真tb_sdram_test,即我们的testbench

add wave *      添加testbench中的所有信号

view structure                  打开structure窗口

view signals     打开wave窗口

run –all 运行,-all表示一直运行至所有信号被调用,可以手动修改运行时间,例如run 3us

至此,就可以愉快的使用Modelsim进行仿真了

4  Vivado下使用Modelsim独立仿真

4.1      编译库

Vivado软件本身自带了编译仿真库的功能,用时较长,只需要执行一次,可以将所有的库编译并存放到指定文件夹,一劳永逸。



4.2设置仿真选项


4.3 运行行为级仿真

4.4 找到自动产生的仿真文件

到此为止,就可以摆脱vivado了

4.5 新建Modelsim工程

新建仿真文件夹,路径与文件夹behav同级,这样.do文件不需要再修改编译文件路径。

拷贝上图中画红线的文件到新建的文件夹中,

修改两个.do文件中的内容合并成一个文件,只保留必要的内容,比如我只保留如下内容:

该文件中的注释是我为了方便大家理解加上去的,实际.do文件的注释符为#,且只能独立成行,不能与命令在同一行。

保存该文件,在Modelsim中新建工程


需要注意的是,需要在此指定拷贝到工程目录下的Modelsim.ini的路径,该路径中包含了编译的库的信息,相当于自动将之前已经编译好的库加入到工程之中,否则会提示找不到相关库文件。

在Modelsim中运行前面编辑好的.do文件就可以进行仿真了。

5 总结

上面采用的方法是核心思想是借助了软件产生的相关文件,主要是.do文件,使用熟练后,可以每次直接新建Modelsim工程,使用自己写好的.do文件在Modelsim下仿真,其中有很多小技巧,大家可以自己探索。

文章如有不足之处,欢迎大家批评指正,也欢迎大家来交流。





这篇关于使用Modelsim独立仿真Altera及Xilinx IP核的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116256

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma