1? ?項目背景 (源碼下載?技術交流群:544453837)
1.1?AD轉換
?AD轉換就是模數(shù)轉換。顧名思義,就是把模擬信號轉換成數(shù)字信號。主要包括積分型、逐次逼近型、并行比較型/串并行型、Σ-Δ調制型、電容陣列逐次比較型及壓頻變換型。
? ? ? A/D轉換器是用來通過一定的電路將模擬量轉變?yōu)閿?shù)字量。模擬量可以是電壓、電流等電信號,也可以是壓力、溫度、濕度、位移、聲音等非電信號。但在A/D轉換前,輸入到A/D轉換器的輸入信號必須經(jīng)各種傳感器把各種物理量轉換成電壓信號。
? ? ? AD轉換的技術指標,一般有如下幾個:
1.???????1?分辨率(Resolution)?指數(shù)字量變化一個最小量時模擬信號的變化量,定義為滿刻度與2^n的比值。分辨率又稱精度,通常以數(shù)字信號的位數(shù)來表示。
2.???????2?轉換速率(Conversion Rate)是指完成一次從模擬轉換到數(shù)字的AD轉換所需的時間的倒數(shù)。積分型AD的轉換時間是毫秒級屬低速AD,逐次比較型AD是微秒級屬中速AD,全并行/串并行型AD可達到納秒級。采樣時間則是另外一個概念,是指兩次轉換的間隔。為了保證轉換的正確完成,采樣速率?(Sample Rate)必須小于或等于轉換速率。因此有人習慣上將轉換速率在數(shù)值上等同于采樣速率也是可以接受的。常用單位是ksps和Msps,表示每秒采樣千/百萬次(kilo / Million Samples per Second)。
3.???????3?量化誤差?(Quantizing Error)?由于AD的有限分辨率而引起的誤差,即有限分辨率AD的階梯狀轉移特性曲線與無限分辨率AD(理想AD)的轉移特?性曲線(直線)之間的最大偏差。通常是1個或半個最小數(shù)字量的模擬變化量,表示為1LSB、1/2LSB。
4.???????4?偏移誤差(Offset Error)?輸入信號為零時輸出信號不為零的值,可外接電位器調至最小。
5.???????5?滿刻度誤差(Full Scale Error)?滿度輸出時對應的輸入信號與理想輸入信號值之差。
6.???????6?線性度(Linearity)?實際轉換器的轉移函數(shù)與理想直線的最大偏移,不包括以上三種誤差。
? ? ? 其他指標還有:絕對精度(AbsoluteAccuracy)?,相對精度(Relative Accuracy),微分非線性,單調性和無錯碼,總諧波失真(Total Harmonic Distotortion縮寫THD)和積分非線性。
1.2?教學板AD原理圖
? ? ? 明德?lián)P教學板上板載板載32Mhz?轉換速率、8bit高速AD芯片AD9280,滿足各種信號的采集,滿足用戶實現(xiàn)各種常見濾波算法的實現(xiàn)。實際位置如下所示:
上面是AD9280的原理圖。與FPGA相連的信號有:AD_D0~7、AD_OTR、AD_CLK。
1.3??AD9280的控制時序
由時鐘圖可以看出,每個時鐘就可以做AD轉換一次,但會延遲3個時鐘才輸出。例如時序圖中第一個時鐘采集到S1,并對S1進行模數(shù)轉換,經(jīng)過3個時鐘后,輸出DATA1,這個DATA1就是S1所應對的數(shù)字值。
? ? ? 由參數(shù)時序可以看出,時鐘最大是32MHz。
? ? ?由上面時序可以看出,控制AD9280非常簡單,只要給出不超過32MHz的時鐘,然后對其采集就行了。
2? ?設計目標
? ? ? ?本次案例將使用到AD9709和AD9280。其連接示意如下圖所示
其中跳帽就設置成XXX,請下圖所示。如下設置后,AD9709的通道A輸出,就會環(huán)回給AD9280。
? ? ? 本案例是FPGA先產生正弦信號,這個正弦信號輸出給DA通道A,經(jīng)過環(huán)回后,給回AD9280的輸入端,F(xiàn)PGA再采集AD9280的數(shù)據(jù),最后使用signaltap采集數(shù)字信號。
正弦信號的產生方式,與“FIR濾波器的設計”案例一致。正弦信號的頻率受開發(fā)板上的3個撥碼開關控制,用3位信號key表示,一共可以產生8種頻率。
? ? ? 正弦信號的頻率?約等于:?100KHz * (key+1)。
? ? ? 例如,當key等于0時,產生約100KHz的正弦信號;
? ? ?當key等于1時,產生約200KHz的正弦波;
? ? ?當key等于7時,產生約800KHz的正弦波。?
? ? ? FPGA產生25MHz的時鐘給AD9280,也就是采樣率為25M。用這個時鐘作為SIGNALTAP的采樣時鐘,觀察AD9280過來的數(shù)據(jù)波形。
? ? ?上板效果圖如下圖所示。(用signaltap抓取波形)
3? ??設計實現(xiàn)
3.1??頂層信號
? ? ? 新建目錄:D:\mdy_book\ad_prj。在該目錄中,新建一個名為ad_prj.v的文件,并用GVIM打開,開始編寫代碼。
? ? ? 我們要實現(xiàn)的功能,概括起來就是FPGA產生控制AD9709,讓其中的通道A產生正弦波所對應的電壓,同時采集AD9280的數(shù)據(jù)并觀察。為了控制AD9709的通道A,就需要控制AD9709的MODE、SLEEP、CLK1、WRT1、DB7~0P1管腳。為了采集AD9280,那么就需要控制AD9280的CLK、D0~D7管腳。根據(jù)設計目標的要求,整個工程需要以下信號:
1.???????使用clk連接到晶振,表示50M時鐘的輸入。
2.???????使用rst_n連接到按鍵,表示復位信號。
3.???????使用3位信號key,表示三位撥碼開關。
4.???????使用dac_mode信號連接到AD9709的MODE管腳,用來控制其工作模式。
5.???????使用dac_sleep信號連接到AD9709的SLEEP管腳,用來控制其睡眠模式。
6.???????使用dac_clka信號連接到AD9709的CLK1管腳,用來控制通道A的時鐘。
7.???????使用dac_wra信號連接到AD9709的WRT1管腳,用來控制通道A的寫使能。
8.???????使用8位信號dac_da連接到AD9709的DB7~0P1管腳,用來控制通道A的寫數(shù)據(jù)。
9.???????使用ad_clk信號連接到AD9280的CLK管腳,用來作來采樣時鐘。
10.????使用8位ad_in信號連接到AD9280的D7~0管腳,用來采集數(shù)據(jù)。
? ? ? 綜上所述,我們這個工程需要10個信號,時鐘clk,復位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、ad_clk和ad_in,其中dac_da?、ad_in是8位信號,key是3位信號,其他都是1位信號。
?將module的名稱定義為ad_prj,代碼如下:
其中clk、rst_n是1位的輸入信號,dac_da是8位的輸出信號,dac_mode,dac_clka,dac_wra,dac_sleep是1位輸出信號,ad_clk是1位輸出信號,ad_in是8位輸入信號,key是3位輸入信號。
3.2? ??信號設計
? ? ? ?由于正弦信號的產生要求,與“FIR濾波器設計”相同,所以不再詳細描述原因?,F(xiàn)在把相關代碼整理如下。
還有最后一個信號要設計:ad_clk。由設計目標可知,要求是25MHz的時鐘。為了產生時鐘,我們就要用到PLL。
3.3? ??生成PLL IP核
? ? ? ?打開IP核管理工具
? ? ? 打開quartus軟件,然后選擇Tools ->IPcatalog,在右側彈出如下界面
?在搜索框中,填下ALTPLL,就會出現(xiàn)如下界面。
?ALTPLL就是我們需要使用的PLL IP核。雙擊ALTPLL,在彈出的對話框中起個文件名,如vga_pll,記得選擇verilog。然后點OK就可以開始設置參數(shù)了。
? 2.設置IP參數(shù)
上圖中,主要是設置輸入的時鐘頻率,明德?lián)P開發(fā)板輸入時鐘是固定的50MHz,因此可填寫50,注意旁邊的單位是選擇MHz。其他默認,按next。
上圖的option inputs中,全部取消勾選,不需要產生復位信號。上圖中的lock output,全部取消勾選,不需要產生locked指示信號。然后選Next。
?不用做任何更改,直接Next。
不用做任何更改,直接Next。
??增加輸入時鐘,由于我們只有一個輸入時鐘,所以只用inclk0即可,無需增加。直接Next。
不用做任何更改,直接Next。
設置c0的輸出頻率。我們選擇Enter output clock frequest中,直接填入25,單位選擇MHz,就是表示要產生25MHz的時鐘。然后點擊Finish,彈出如下窗口。
? 取消my_pll_bb.v的勾選,然后選擇Finish。QUARTUS就會產生PLL IP的代碼了。
? ? ?稍等片刻,到工程目錄?D:\mdy_book\ad_prj,可以看到生成一個my_pll.v文件,用GVIM打開后,可以看到PLL模塊的模塊輸入輸出接口。其中inclk0是50MHz輸入時鐘,c0是25MHz的輸出時鐘。頂層模塊直接例化就可以使用了。
至此,主體程序已經(jīng)完成。接下來是將module補充完整。
3.4? ?信號定義
? ? ? 接下來定義信號類型。
? ? ? 在“FIR濾波器案例”中已經(jīng)說明了部分信號的說明,現(xiàn)補充如下。
ad_clk是由例化模塊輸出信號,非always產生,可以定義為wire型,只有1位
4? ?綜合與上板
4.1?添加文件到工程
?1.)前面已經(jīng)介紹了新建工程?,F(xiàn)在打開quartus,在Project菜單中選擇Add/Remove File to Project,彈出文件窗口。
點擊右上角的,在彈出來的窗口中,雙擊選擇D:\mdy_book\fir_prj目錄下的fir_prj.v文件。然后記得要點Add,才算正式加到工程。
?點OK關閉本窗口。
4.2??綜合
? ? ?1.點擊右上角藍色三角鍵進行編譯
? ? ?之后等待編譯成功
? ? ?出現(xiàn)上面的界面,就說明編譯綜合成功。
4.3??配置管腳
在菜單欄中,選中Assignments,然后選擇Pin Planner,就會彈出配置管腳的窗口。
在配置窗口中的location一列,可以填寫每個管腳所對應的FPGA管腳號。
按上面配置好每個信號的管腳,其最終效果如下圖。
關閉Pin Planner,軟件自動會保存管腳配置信息。
4.4???再次綜合
?在菜單欄中,選中Processing,然后選擇Start Compilation,開始對整個工程進行編譯和綜合。
出現(xiàn)上面的界面,就說明編譯綜合成功。
4.5? ?連接開發(fā)板
連接示意如上圖所示。將電源接上開發(fā)板;USBBLASTER一端連接到JTAG插口,另一端連到PC的USB接口;將開發(fā)板上的P7接口和P11與示波器的兩個通道相連。最后再將電源打開。
4.6? ?設置SIGNALTAP
?
評論