好文档 - 专业文书写作范文服务资料分享网站

FPGA查找表法sin函数的实现

天下 分享 时间: 加入收藏 我要投稿 点赞

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函数的实现

FPGA查找表法sin函数的实现实验一Sin(x)函数的计算一、实验要求1、系统可以根据输入的角度(或弧度)x,显示相应的sin(x)数值,保证角度精度?0.1度。2、编辑测试激励文件,进行相关测试,注意测试的完备性。3、根据DE2板资源,设计下载测试方案,并且完成硬件下载测试。二、实验方案本实验
推荐度:
点击下载文档文档为doc格式
1ixh497hfk7g2499ip734mu7526kg600fs3
领取福利

微信扫码领取福利

微信扫码分享