使用FPGA产生sin波

使用FPGA产生sin波

ID:47609926

大小:610.62 KB

页数:11页

时间:2019-10-02

使用FPGA产生sin波_第1页
使用FPGA产生sin波_第2页
使用FPGA产生sin波_第3页
使用FPGA产生sin波_第4页
使用FPGA产生sin波_第5页
资源描述:

《使用FPGA产生sin波》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、使用FPGA产生正弦波看不懂可以加QQ1371947821使用matlab产生正弦波的.mif的rom表工程中,经常要用到正弦表数据。把正弦表数据存入mif文件中,供LPM_ROM初始化用,那么如何得到正弦表数据呢?可以用matlab实现这里介绍两种方式:(一)这个方法只在matlab中生成数据表,需要自己手动的     往mif文件中添加数据1.假设用到的DA芯片为14为,则2^14=163842.一个完整的正弦波为0-2pi3.正弦波ROM的深度为4096(地址总数)4.由于FPGA中不识别负数,加入一个直流分量,加8192则用matlab产生正弦表的函数为:Y=c

2、eil((16384/2-1)*sin(0:pi*2/4096:2*pi)+8192)其中ceil函数描述如下:ceil(x):大于x的最小整数>>ceil([3.12-3.12])ans=4   -3(二)可以直接生成mif文件直接生成mif文件depth=4096;width=14;x=ceil(16384/2*sin(0:pi*2/4096:2*pi)+8192)fid=fopen('d:romdata1.mif','w');%路径fprintf(fid,'depth=%d;',depth);fprintf(fid,'width=%d;',width);

3、fprintf(fid,'address_radix=uns;');fprintf(fid,'data_radix=uns;');fprintf(fid,'ContentBegin');for(k=1:depth)fprintf(fid,'%d:%d;',k-1,x(k));endfprintf(fid,'end;');用上面这段程序最大值会出现16384,在QuartusII中会认为是超出数据范围,所以需要手动的改写为16383把x=ceil(16384/2*sin(0:pi*2/4096:2*pi)+8192)改写为下面语句 x=ceil((1638

4、4/2-1)*sin(0:pi*2/4096:2*pi)+8192)就不存在上述问题了数据量小的话,可以用第一种方法,要是数据量大的话,介意用第二种方法。2使用modelsim仿真FPGA产生正玄波。最简易的sin波发生器Verilog代码:modulesin_top(inputclk_50m,inputrst_n,output[13:0]q);reg[11:0]cnt;wire[11:0]addr;always@(posedgeclk_50mornegedgerst_n)beginif(!rst_n)cnt<=12'd0;elseif(cnt==12'd4095)cn

5、t<=12'd0;elsecnt<=cnt+12'd1;endassignaddr=cnt;sin_romsin_rom_inst(.address(addr),//4096.clock(clk_50m),.q(q)//14bit);Endmodule测试模块:modulesin_tb();regclk_50m;regrst_n;wire[13:0]q;sin_topsin_inst(.clk_50m(clk_50m),.rst_n(rst_n),.q(q));initialbeginclk_50m=0;rst_n=0;#100;rst_n=1;#80000;$stop

6、;endalways#10clk_50m=~clk_50m;endmodule综合:Modelsim仿真:我们修改如下使用FPGA产生正玄波发生器仿真完成。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。