MATLAB 生成 Verilog調用MIF 文件教程一

一.背景
使用Verilog的內核RAM完成特殊函數的硬件設計,比如使用Sin(x)函數的Verilog設計。設計模塊目的是在FPGA實現複雜的運算。
二.方法
Sin(x)在FPGA中的計算主要依靠的是查表法實現。查表法是快速高效的計算器計算方式,軟件實現簡單,該方法在要求實時高速的嵌入式芯片軟件開發過程中經常使用。
查表法實現Sin(x)函數的計算,根本問題是解決表中每個數據的計算,這裏,採樣Sin(x)的0°~90°查表,其他三象限是相同的方式。只採樣0-90°可以節省FPGA的RAM資源。PS:FPGA的RAM資源非常有效,不像RAM、DSP芯片。
三.過程
1) MATLAB生產表數據,文件格式是MIF
源代碼如下:
clear all;
clc;

gAngle = 0:0.1:90 ;
gAngle = gAnglepi/180;
gSinValueQ16 = int32( (2^16-1)
(sin(gAngle)) );
% 下面MIF的文件格式要要求,必須按照下面方式寫
gMifHandle = fopen( ‘SinMifFile.mif’, ‘w’);
fprintf( gMifHandle ,‘Depth = %d ;\n’, 901 );
fprintf( gMifHandle ,‘Width = %d ;\n’, 16 );
fprintf( gMifHandle ,’%s\n’,‘ADDRESS_RADIX = DEC;’);
fprintf( gMifHandle,’%s\n’,‘DATA_RADIX = DEC;’);
fprintf( gMifHandle,’%s\n’,‘CONTENT’);
fprintf( gMifHandle,‘BEGIN\n’);
%將表格數據寫入 第一列是索引Index(0~900) 第二列是數值 Value
for i=1:length(gAngle)
fprintf( gMifHandle,’%d:%d;\n’,(i-1),gSinValueQ16(i));
end
%MIF文件寫完成
fprintf( gMifHandle,‘END\n’);

  1. Verilog 實現
    參考調用:IP RAM 內核使用方法;

四.ModelSim仿真
1)仿真Verilog代碼
`timescale 1 ps/ 1 ps
module TEST_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg [9:0] gAddr;
reg sys_clk;
// wires
wire [15:0] qOutData;

TEST i1 (
.gAddr(gAddr),
.qOutData(qOutData),
.sys_clk(sys_clk)
);
initial
begin
gAddr = 16’d0000;
sys_clk = 1’b1 ;
$display(“Running testbench”);
end
always #5 sys_clk = ~sys_clk ;
initial
begin
#20 gAddr = 16’d1 ;
#25 gAddr = 16’d2 ;
#30 gAddr = 16’d3 ;
#35 gAddr = 16’d4 ;
#40 gAddr = 16’d5 ;
#45 gAddr = 16’d800 ;
#50 gAddr = 16’d801 ;
#55 gAddr = 16’d901 ;
#60 $finish;
end
endmodule

  1. 仿真結果如下
    在這裏插入圖片描述

撰寫人:w3022
郵箱:[email protected]

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