1. 程式人生 > >用MATLAB生成Quartus II下ROM初始化檔案(MIF,HEX)

用MATLAB生成Quartus II下ROM初始化檔案(MIF,HEX)

使用quartus ii 寫DDS模組時需要生成0-0.5pi範圍的正弦查詢表,需要使用ROM核,初始化ROM需要使用.mif檔案或hex檔案。

生成MIF檔案

mif檔案的格式如下:

WIDTH=15;
DEPTH=2048;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENT BEGIN
0:0;
1:25;
2:50;
3:75;
4:101;
5:126;
6:151;
7:176;
8:201;
9:226;
…….
END

使用matlab可以生成這種檔案,程式碼如下:

%生成0-pi/2 的正弦查詢表,儲存為mif格式
depth=2048; %深度 width=15; %位寬 fid1=fopen('sin_coe.mif','wt'); %wt(write tab)是寫換行的意思 fprintf(fid1,'WIDTH=%d;\n',width); fprintf(fid1,'DEPTH=%d;\n',depth); fprintf(fid1,'ADDRESS_RADIX=DEC;\n'); %地址基值 fprintf(fid1,'DATA_RADIX=DEC;\n'); %資料基值 fprintf(fid1,'CONTENT BEGIN\n'
); %開始資料區 for i=0:1:(depth-1) %在[0:depth-1]做depth次迴圈,每次加1 y2=round(sin(i/depth*pi/2)*(2^width-1)); %在[0:0.5*pi]中等間隔取depth個點,計算相應的正弦值 ,擴大浮點值並取整 fprintf(fid1,'%d:%d;\n',i,y2); end fprintf(fid1,'END'); %結束 fclose(fid1);

注意: mif檔案都是ASCⅡ碼,負數應該是用補碼處理,否則負數在mif檔案中會變成0。

由於我生成的是0-0.5pi之間的正弦表,沒有負數,所以沒有遇到這個問題,以後可以研究一下。

生成HEX檔案

只要將生成的mif檔案在quartus ii中開啟,然後另存為hex即可。