基于流水線結構的DDS多功能信號發(fā)生器設計
第一級流水線經過全加器之后得出運算結果sum[0..7]和進位信號,sum[0..7]作為本級的輸出,它是整個累加結果的最低8位,而進位信號經過一個reg1之后作為下一級全加器的輸入。
第二級流水線的輸入信號是a[8..15],因為上一級共由兩級數據鎖存器構成,所以在做全加運算之前先分別將輸入信號和本級的反饋信號經過2次數據鎖存,然后再與來自上一級的進位信號進行全加運算,運算之后的結果作為本級的輸出sum[8..15],同時產生進位信號參與下一級的運算。第三級與第四級的工作原理同上,系統(tǒng)每增加一級流水線結構,鎖存器也會隨之增加一級。
圖3為在QuartusⅡ環(huán)境下得到的四級流水線仿真波形,時鐘信號的頻率是200 MHz,占空比為50 %,偏移量為0。為觀察方便,輸入控制字a和累加結果sum均用無符號十進制數來表示,且輸入控制字設定為32,由波形圖可見,該系統(tǒng)可以實現(xiàn)32位的相位累加。
3 任意波形發(fā)生器的設計及實現(xiàn)
DDS可以根據ROM中存儲數據的不同產生多種波形。在QuartusⅡ開發(fā)環(huán)境下搭建DDS系統(tǒng)模型需要訂制波形存儲器ROM,根據所需精度的不同,ROM中存儲的采樣點數也不同。當所需波形數據非常簡單時,可以在QuartusⅡ中定制ROM時直接將數據寫入新建的mif文件,然后保存即可,當所需波形數據較為復雜時,可以通過Matlab來自動生成所需波形的幅度數據,然后再通過調用mif文件來達到預期目標。以256個點的正弦波為例加以分析說明。
產生正弦波的Matlab程序如下:
width定義的是位寬,depth是深度,也就是將來生成的mif文件含有多少個存儲單元,在此處,設定了數據寬度為8位,存儲單元數為256,將來在QuartusⅡ中定制ROM時也要相應地將存儲單元數設定為256,根據DDS的基本原理,隨著設計點數的增加,所得的波形數據會更加準確,通過D/A轉化后在示波器上觀測的波形也越精準,但所需ROM的存儲空間將會呈指數增長,所以要根據實際的需要來綜合考慮存儲單元的個數。將上述指令在Matlab環(huán)境中運行之后就能夠得到所需mif文件。
在mif文件生成之后需要將此文件添加進入DDS系統(tǒng)的ROM中,然后進行全局的編譯,編譯通過后就可以進行工程的下載。具體的波形可以通過示波器來分析,或者使用Quartus Ⅱ自帶的嵌入式邏輯分析儀來分析。在使用嵌入式邏輯分析儀分析和觀察時,采樣信號要根據DDS的時鐘信號來確定,待測信號設定為DDS的輸出信號,當工程下載到FPGA芯片后,待測信號通過USB-BLASTER反饋至嵌入式邏輯分析儀中,選擇不同的數據類型,可以觀察到以十進制數據表示的數字信號或者以實際波形表示的模擬信號。
評論