相对于简单的仿真,复杂的仿真是指由多个文件、甚至调用了IP核、使用tcl脚本进行的仿真。其实仿真步骤跟图形化的差不多,只不过每一步用脚本写好,然后再在软件里面run一下,主要过程就是:

  1、准备好各种源文件(机械操作)。

  2、修改modelsim工作路径,创建modelsim工程文件(机械操作)。

  3、书写modelsim脚本

  4、运行脚本,执行仿真

  上面的步骤中,最主要的就是第三步了,书写脚本是很重要的。下面我将按照上面的步骤,联合Altera公司(已经被Intel收购)的Quartus II 进行仿真一个IP核,这个IP核是ROM核,仿真出一个正弦波形。

=====================================================================

①为了规范设计,我使用下面的文件管理结构:

        

②根据上面的管理目录,创建文件夹

=====================================================================

然后就开始仿真之旅:

1、准备好源文件

  这一步要用到的是QII软件、matlab软件。

使用过ROM核的都知道,需要一个初始化的文件进行初始化,这里的初始化文件使用matlab和QII生成。

(1)获取ROM核的初始化文件。

  ①打开matlab之后,修改工作路径:

双击matlab选择路径:

  ②创建.m脚本文件,进行编写产生初始化文件的脚本(如.mif文件):

创建:

编写:

脚本文件不解释了,自己好好看一下内容吧,具体可以参考我的另一篇博文:http://www.cnblogs.com/IClearner/p/7273366.html

保存:

,自己修改名字

  ③运行,产生.mif文件

得到了.mif文件

(2)QII产生IP核文件

  ①在进行产生IP核文件中,先进行转换.mif文件,也就是把.mif文件转换成.hex文件,这是因为,初始化ROM的文件有两种,也就是.mif文件和.hex文件。然而modelsim只能读取.hex文件,可是.hex文件的格式没有.mif文件那么简单,因此先产生.mif文件,再通过.hex文件进行转换。

  拷贝.mif文件到quarturs_prj下面的ipcore_dir中:

  打开QII,打开.mif文件:

得到:

另存为.hex文件:

选择成.hex格式,顺便想改个名也是可以的:

然后就得到了.hex文件:

  ②创建工程,生成ROM IP核。

  创建工程忽略,直接记录生成ROM的过程(其实也可以直接生成IP核而不创建工程):

先选verilog文件,再点...进行设置文件名/修改IP核。

这里就要注意了(注意上图),这里有altera_mf文件,这个就是进行仿真ROM核时需要的仿真文件。

OK,ROM IP核就生成了:

  ③创建,设计.v文件和测试脚本文件

2、修改modelsim工作路径,创建modelsim工程文件

所以的源文件都准备好了之后,就开始创建工程文件了

①这里创建工程的路径跟简单使用modelsim的操作差不多,不再详述:关闭工程,改变modelsim工作路径(工作路径选到sim文件夹里面),创建工程之后,弹出这个。

但是到这里的时候就不一样了:不添加任何的文件,直接关闭。

然后进行下面的操作(这些操作都是为了能够得到仿真波形所设置的):

②首先,根据仿真所要的库,进行移植库文件跟.hex文件到sim目录中:

移植仿真需要的库到sim中的altera_lib中:

注:仿真需要的库如果不添加,或者modelsim读取不到,就会有警告或者错误生成,到时候就需要根据提示信息进行修改;

仿真需要的库可以在IP核.v文件中查看,也可以在设置IP核时查看,此外对于复杂的IP核,会有相应的tcl文件进行解释,查看该tcl文件就可以找到需要添加哪些库了:

3、书写modelsim的tcl脚本

上面的.do文件可以参考我的另一篇博文:http://www.cnblogs.com/IClearner/p/7273441.html,主要有三点:

  添加设计的仿真文件、添加库文件、添加设计文件、添加IP核的.v文件

  这一步主要就是添加源文件了,跟图形化界面差不多,也可以用图形化界面进行仿真IP核。(当文件相当多的时候,就建议用脚本了,这里用图形化还是比较方便的,毕竟只有四个文件,但是用图形化的时候,要注意那些初始化文件的位置!!;这里只是作为一个用脚本的示范)

4、在modelsim中进行运行.do文件

运行之后,没有错误,就出现下面的波形了;

进一步用模拟的形式查看一下:

就看到了美美的正弦波了:

最新文章

  1. 各大浏览器内核介绍(Rendering Engine)
  2. 30天React Native从零到IOS/Android双平台发布总结
  3. Nagios学习实践系列——产品介绍篇
  4. 开源代码Window下搭建rtmp流媒体服务器
  5. Python爬虫抓取糗百的图片,并存储在本地文件夹
  6. secure boot(安全启动)下为内核模块签名
  7. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果
  8. JS倒计时——天时分秒
  9. SQL标签
  10. python中字符串\r的奇怪问题
  11. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
  12. python 实现梯度下降
  13. Service的启动与停止、绑定与解绑
  14. Kong for Enterprise | Kong - Open-Source API and Microservice Management Layer
  15. CreateWindow的出错解决
  16. mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
  17. linux下实时查看tomcat运行日志 2017.12.4
  18. C# for Python(Nugut Iron包)
  19. vue----计算与监听属性
  20. 关于thinkphp5URL重写

热门文章

  1. The based of tuning
  2. python web开发-flask中消息闪现flash的应用
  3. 获取DOM节点的几种方式
  4. MYSQL数据库学习十三 使用MySQL常用函数
  5. 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别
  6. spring boot — InputStream
  7. 不安装oracle客户端连接oracle数据库
  8. 一、Python安装与Pycharm使用入门
  9. 原生js封装添加class,删除class
  10. linux系统命令学习-用户管理