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文件
在這裏插入圖片描述
運行之後,沒有錯誤,就出現下面的波形了
在這裏插入圖片描述
進一步用模擬的形式查看一下:
在這裏插入圖片描述
在這裏插入圖片描述

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