首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA实现基于ROM的正弦波发生器

FPGA实现基于ROM的正弦波发生器

软件环境:QuartusII 11.0  操作系统:win7
  芯片型号:CycloneII EP2C5Q208C8
1.总体框图:
    
1.波形数据
  第一步,是获得含有正弦波的数据的ROM初始化文件.mif,方法见《如何生成mif文件》;
  此处生成的波形数据为8bit宽度,128字节深度的数据。
    
2.利用Quartus的LPM功能,定制一个8bit数据宽度,128字节深度的ROM:
  详细步骤说明可以参考《FPGA实现RAM--LPM_RAM》,此处只给出具体配置,为避免冗余,不再详细说明各项含义。
    
    
3.顶层模块的verilog描述
[url=][/url]
module SinGen(    input          clk,     /*clock input*/     input          rst_n,      /*async reset ,active low*/    input          en,        /*enable control,active high*/    output [7:0]   q          /*data output from ROM*/);/***********ROM instance**********************/wire [6:0] addr;ROM1P    ROM1P_inst (    .address ( addr ),    .clock ( clk),    .q ( q)    );/***************address generate***************/reg [6:0] cnt;always@(posedge clk or negedge rst_n)begin    if(!rst_n)        cnt <= 7'd0;    else if(en)        cnt <= cnt+7'd1;    else        cnt<=cnt;        end
assign addr = cnt;
endmodule[url=][/url]

4.波形仿真:
  
  分析:当使能端有效(en==1)时,在每个时钟的上升沿,输出ROM中的正弦波数据;
5.波形实测
  将数据输出端接入到DAC后,可以接入示波器来观察波形;也可以使用QuartusII自带的SignalTap对数据输出端对Q进行采样,来查看波形;这里使用SignalTap捕获的波形如下:
  
  可以看到,数据的确是正弦波吧?使用同样的道理,只要有相应波形的数据,也就是存储器的初始化文件.mif,就可以发生三角波、方波、甚至任意波形!如果您感兴趣,可以添加按键扫描模块,来控制发生想要的波形,制作一台简易波形发生器。
返回列表