MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列
- 系統框圖
基於FPGA的DDS信號發生器系統框圖如下圖所示,採取查表法。
(1)對一個完整週期的波形進行採樣,將採樣點存在ROM中;
(2)依次給出ROM的訪問地址,即可輸出一個完整的波形;
(3)通過設置不同的頻率控制字可以讓ROM的訪問地址以不同的步進值訪問,這樣起到改變輸出波形的頻率的作用;
(4)通過設置不同的相位控制字可以讓ROM的訪問時的初始地址改變,這樣起到改變輸出波形初始相位的作用。
- DDS產生固定頻率和固定相位的正弦信號
首先產生固定頻率和相位的正弦信號,一個週期採樣 256 點,數據位寬爲 8 位,需要:
(1)在 ROM 中存儲波形,ROM 設置參數:單口ROM,數據深度 256,數據位寬 8 位,輸出後可以接 8 位的 DAC 數模轉換模塊;
(2)使用一個計數器產生ROM的地址,計數器輸出位寬8位;
(3)使用100 MHz的時鐘,時鐘週期爲 10 ns,每個時鐘輸出一個正弦波的採樣點,一個正弦波週期有 256 個點,需要 256 個時鐘週期,即 2560 ns,這樣,輸出的正弦波的頻率爲 100 MHz / 256 = 390.625 KHz。
Quartus ii 實現 8 位計數器教程——Verilog實現8位計數器
這樣設置後,即可產生一個標準正弦波,其參數爲:
(1)幅值由DAC決定,DAC選定後賦值即固定(比如 0 ~ 5V),不可通過FPGA調幅,後級可以通過 VGA(壓控放大器)等調幅;
(2)頻率爲 390.625 KHz,不可調頻;
(3)初始相位爲0。
- 設計過程
(1)獲取sin波形的抽樣點
使用Guagle_wave工具,查看->全局參數,設置全局參數如下
設定波形->正弦波,文件->保存,將256個採樣點保存爲sin.mif文件。mif文件是quartus軟件中ROM的存儲文件,內容包含存儲的數據和該數據在ROM中對應的地址。
(2)ROM存儲波形
(3)計數器產生地址
Quartus ii 實現 8 位計數器教程——Verilog實現8位計數器
module count(
clk,
rst_n,
count_out
);
input clk;
input rst_n;
output reg [7:0] count_out;
always @ ( posedge clk or negedge rst_n )
begin
if( !rst_n ) begin
count_out <= 8'b0;
end
else begin
count_out <= count_out + 1'b1;
end
end
endmodule
(4)例化頂層文件
4.仿真結果
使用modelsim仿真分析,編寫test bench。
在仿真的時候,無法以BDF原理圖模式做頂層文件去調用(開發板實物可以,仿真還是要用verilog去例化),這時候需要新建一個 Verilog 文件,並設置爲頂層文件。
MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列
2017年全國大學生電子設計競賽綜合測評題目解析——Multisim仿真
Verilog學習筆記——有符號數的乘法和加法
歡迎關注:FPGA探索者