相對於簡單的仿真,複雜的仿真是指由多個文件、甚至調用了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文件
運行之後,沒有錯誤,就出現下面的波形了
進一步用模擬的形式查看一下: