modelsim的使用(二)复杂仿真

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

  • 准备好各种源文件(机械操作)
  • 修改modelsim工作路径,创建modelsim工程文件(机械操作)
  • 书写modelsim脚本
  • 运行脚本,执行仿真

联合Altera公司(已经被Intel收购)的Quartus II 进行仿真一个IP核,这个IP核是ROM核,仿真出一个正弦波形。
为了规范设计,我使用下面的文件管理结构:
在这里插入图片描述
1、准备好源文件
使用过ROM核的都知道,需要一个初始化的文件进行初始化,这里的初始化文件使用matlab和QII生成。
(1)获取ROM核的初始化文件

  • 打开matlab之后,修改工作路径:
    在这里插入图片描述
  • 创建.m脚本文件,进行编写产生初始化文件的脚本(如.mif文件)
    创建:
    在这里插入图片描述
    编写:
    在这里插入图片描述
    保存:
    在这里插入图片描述
    注:mif文件即memory initialization file,用来配置RAM或ROM中的数据
    生成QuartusII可用的mif文件,有如下几种方式
    (1)利用Quartus自带的mif编辑器
    (2)利用mif软件来生成(无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;)
    (3)用C语言或者matlab语言等来生成,C语言生成代码如下:本代码生成一个正弦波的数据波形,保存在TestMif.mif中。
#include <stdio.h>
#include <math.h>

#define PI 3.141592
#define DEPTH 128     /*数据深度,即存储单元的个数*/
#define WIDTH 8       /*存储单元的宽度*/

int main(void)
{
    int i,temp;
    float s;

    FILE *fp;
    fp = fopen("TestMif.mif","w");   /*文件名随意,但扩展名必须为.mif*/
    if(NULL==fp)
        printf("Can not creat file!\r\n");
    else
    {
        printf("File created successfully!\n");
        /*
        *    生成文件头:注意不要忘了“;”
        */
        fprintf(fp,"DEPTH = %d;\n",DEPTH);
        fprintf(fp,"WIDTH = %d;\n",WIDTH);
        fprintf(fp,"ADDRESS_RADIX = HEX;\n");
        fprintf(fp,"DATA_RADIX = HEX;\n");
        fprintf(fp,"CONTENT\n");
        fprintf(fp,"BEGIN\n");

        /*
        * 以十六进制输出地址和数据
        */
        for(i=0;i<DEPTH;i++)
        {
             /*周期为128个点的正弦波*/ 
            s = sin(PI*i/64);   
            /*将-1~1之间的正弦波的值扩展到0-255之间*/ 
            temp = (int)((s+1)*255/2);
            /*以十六进制输出地址和数据*/
            fprintf(fp,"%x\t:\t%x;\n",i,temp);
        }//end for
        
        fprintf(fp,"END;\n");
        fclose(fp);
    }
}
  • 运行,产生.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文件
在这里插入图片描述

  • 创建工程,生成ROM IP核
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    将之前的hex文件读入
    在这里插入图片描述
    在这里插入图片描述
    这里就要注意了(注意上图),这里有altera_mf文件,这个就是进行仿真ROM核时需要的仿真文件。
    在这里插入图片描述
    OK,ROM IP核就生成了:
    在这里插入图片描述
    之后创建,设计.v文件和测试脚本文件

2、修改modelsim工作路径,创建modelsim工程文件
(1)这里创建工程的路径跟简单使用modelsim的操作差不多,不再详述:关闭工程,改变modelsim工作路径(工作路径选到sim文件夹里面),创建工程之后
在这里插入图片描述
但是到这里的时候就不一样了:不添加任何的文件,直接关闭。
(2)首先,根据仿真所要的库,进行移植库文件跟.hex文件到sim目录中:
在这里插入图片描述
移植仿真需要的库到sim中的altera_lib中:
在这里插入图片描述
注:仿真需要的库如果不添加,或者modelsim读取不到,就会有警告或者错误生成,到时候就需要根据提示信息进行修改;

3、书写modelsim的tcl脚本
在这里插入图片描述
.do文件主要有三点:

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

4、在modelsim中进行运行.do文件
在这里插入图片描述
运行之后,没有错误,就出现下面的波形了
在这里插入图片描述
进一步用模拟的形式查看一下:
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章