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有更深的體會呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM