軟件環境: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有更深的體會呢?