FPGA查找表法sin函数的实现
实验一 Sin(x)函数的计算 一、实验要求
1、系统可以根据输入的角度(或弧度)x,显示相应的sin(x)数值,保证角度精度?0.1度。
2、编辑测试激励文件,进行相关测试,注意测试的完备性。
3、根据DE2板资源,设计下载测试方案,并且完成硬件下载测试。 二、实验方案
本实验要求用FPGA实现角度(0度~360度)的Sin函数的计算,角度的分辨率小于等于0.1度。考虑到实现的简便性,本实验采用查表法实现Sin函数的计算。首先我们用Matlab计算出Sin函数值,然后生成.mif文件。用Matlab生成的.mif文件在Quartus中配置FPGA的Rom。跟具输入的角度值得到其Sin函数值存储的Rom地址,然后根据地址取出Rom中存储的Sin函数值,最后显示在数码管上,从而实现Sin函数的计算。
三、实验过程及代码 1. Matlab中.mif文件的生成
由于输入的角度值为0度~360度,所以计算出的Sin函数值至少有3600个,但由于Sin函数值的对称性,所以实际上存储在FPGA的Rom中的值只需要900个。因此在Matlab中我们设置depth=1024,在这里我们对Sin函数值做了扩大10000倍后四舍五入取整的处理,以便于在Rom中存储,所以在这里我们设置width=14。Matlab中的程序如下:
clear all; close all;
clc;
t=[0:0.1:90]; %角度 x=pi*t/180; %弧度数 sin_val=sin(x); %sin函数值
fid=fopen('sine.mif','wt'); %以wt格式打开文件sine.mif fprintf(fid,'width=14;\\r\\n'); %设置width=14 fprintf(fid,'depth=1024;\\n'); %设置depth=1024 fprintf(fid,'address_radix=uns;\\n'); fprintf(fid,'data_radix=dec;\\n'); fprintf(fid,'content begin\\n'); for j=1:901 i=j-1;
fprintf(fid,'%d:% d;\\n',i,round(sin_val(j)*10000)); end
fprintf(fid,'end;\\n'); fclose(fid);
然后利用宏功能模块编制LPM_ROM存放上面的数据,取名sin_rom.v,用上面编写的sine.mif初始化这个模块,自动生成的Verilog代码。
2、顶层模块
顶层模块采用Verilog HDL语言编写,保存为sinx.v。输入信号包括一个时钟信号clk,一个复位信号rst_n,一个9位的输入角度的整数部分a,一个4位的输入角度的小数部分b,输出信号包括6个7位的数码管显示信号。由于在Rom中只存储了900个Sin函数值,所以需要对输入的角度进行转换,然后根据转换后的
地址对Rom寻址,得在其函数值,在顶层模块中对得到的函数值进行为的的分离,得到函数值的每一位,用于数码管的显示。代码如下:
module sinx(clk,rst_n,a,b,hex0,hex1,hex2,hex3,hex4,hex5); input clk,rst_n; input [8:0] a; input [3:0] b;
output [6:0] hex0,hex1,hex2,hex3,hex4,hex5; reg [3:0] data1,data2,data3,data4,data5; wire [3:0] data0; wire [13:0] q; wire [9:0] addr; reg [13:0] qr; jiaodu U( .clk(clk), .a(a), .b(b), .addr(addr), .fh(data0) );
sin_rom sin_rom_inst ( .address ( addr ), .clock ( clk ), .q ( q ) );
FPGA查找表法sin函数的实现



