zoukankan      html  css  js  c++  java
  • 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描述

    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

    4.波形仿真:

      

      分析:当使能端有效(en==1)时,在每个时钟的上升沿,输出ROM中的正弦波数据;

    5.波形实测

      将数据输出端接入到DAC后,可以接入示波器来观察波形;也可以使用QuartusII自带的SignalTap对数据输出端对Q进行采样,来查看波形;这里使用SignalTap捕获的波形如下:

      

      可以看到,数据的确是正弦波吧?使用同样的道理,只要有相应波形的数据,也就是存储器的初始化文件.mif,就可以发生三角波、方波、甚至任意波形!如果您感兴趣,可以添加按键扫描模块,来控制发生想要的波形,制作一台简易波形发生器。

      同时,通过这个正弦波发生器的制作,您是否对于查找表LUT有更深的体会呢?

  • 相关阅读:
    采用GRE隧道连接不同虚拟机上的mininet网络
    ubuntu下安装Pycharm
    Update to openvswitch 2.3.0
    安装Openvswich 2.3.0
    ubuntu安装git
    解决Vmware Vsphere中虚拟机与本地机复制粘贴问题
    windows下安装python的xlrd和xlwd安装包
    ubuntu 下NetworkX的安装和使用
    大整数乘法 python实现
    推特(Twitter)的Snowflake算法——用于生成唯一ID
  • 原文地址:https://www.cnblogs.com/BitArt/p/2819347.html
Copyright © 2011-2022 走看看