【正点原子FPGA连载】第三十五章高速AD/DA实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)實驗平臺:正點原子新起點V2開發板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609758951113
2)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/thread-300792-1-1.html
3)對正點原子FPGA感興趣的同學可以加群討論:994244016
4)關注正點原子公眾號,獲取最新資料更新
第三十五章高速AD/DA實驗
ADC/DAC(Analog to Digital Converter/ Digital to Analog Converter,即模數轉換器/數模轉換器)是大多數系統中必不可少的組成部件,用于將連續的模擬信號轉換成離散的數字信號,或者將離散的數字信號轉換成連續的模擬信號,它們是連接模電電路和數字電路必不可少的橋梁。在很多場合下,ADC/DAC的轉換速度甚至直接決定了整個系統的運行速度。本章我們將使用高速DA芯片實現數模轉換,產生正弦波模擬電壓信號,并通過高速AD芯片將模擬信號轉換成數字信號。
本章包括以下幾個部分:
3434.1簡介
34.2實驗任務
34.3硬件設計
34.4程序設計
34.5下載驗證
35.1簡介
本章我們使用的AD-DA模塊是正點原子推出的一款高速模數-數模轉換模塊(ATK_HS_AD_DA),高速AD轉換芯片和高速DA轉換芯片都是由ADI公司生產的,分別是AD9280/3PA9280(兩款芯片兼容)和AD9708。
ATK_HS_AD_DA模塊的硬件結構圖如下圖所示。
圖 35.1.1 ATK_HS_AD_DA模塊硬件結構圖
由上可知,AD9708芯片輸出的是一對差分電流信號,為了防止受到噪聲干擾,電路中接入了低通濾波器,然后通過高性能和高帶寬的運放電路,實現差分變單端以及幅度調節等功能,使整個電路性能得到了最大限度的提升,最終輸出的模擬電壓范圍是-5V~+5V。
AD9280芯片的輸入模擬電壓轉換范圍是0V2V,所以電壓輸入端需要先經過電壓衰減電路,使輸入的-5V+5V之間的電壓衰減到0V~2V之間,然后經過AD9280芯片將模擬電壓信號轉換成數字信號。
下面我們分別介紹下這兩個芯片。
AD9708芯片
AD9708是ADI公司(Analog Devices,Inc.,亞德諾半導體技術有限公司)生產的TxDAC系列數模轉換器,具有高性能、低功耗的特點。AD9708的數模轉換位數為8位,最大轉換速度為125MSPS(每秒采樣百萬次Million Samples per Second)。
AD9708的內部功能框圖如下圖所示:
圖 35.1.2 AD9708內部功能框圖
AD9708在時鐘(CLOCK)的驅動下工作,內部集成了+1.2V參考電壓(+1.20V REF)、運算放大器、電流源(CURRENT SOURCE ARRAY)和鎖存器(LATCHES)。兩個電流輸出端IOUTA和IOUTB為一對差分電流,當輸入數據為0(DB7DB0=8’h00)時,IOUTA的輸出電流為0,而IOUTB的輸出電流達到最大,最大值的大小跟參考電壓有關;當輸入數據全為高點平(DB7DB0=8’hff)時,IOUTA的輸出電流達到最大,最大值的大小跟參考電壓有關,而IOUTB的輸出電流為0。
AD9708必須在時鐘的驅動下才能把數據寫入片內的鎖存器中,其觸發方式為上升沿觸發,AD9708的時序圖如下圖所示:
圖 35.1.3 AD9708時序圖
上圖中的DBO-DB7和CLOCK是AD9708的8位輸入數據和為輸入時鐘,IOUTA和IOUTB為AD9708輸出的電流信號。由上圖可知,數據在時鐘的上升沿鎖存,因此我們可以在時鐘的下降沿發送數據。需要注意的是,CLOCK的時鐘頻率越快,AD9708的數模轉換速度越快,AD9708的時鐘頻率最快為125Mhz。
IOUTA和IOUTB為AD9708輸出的一對差分電流信號,通過外部電路低通濾波器與運放電路輸出模擬電壓信號,電壓范圍是-5V至+5V之間。當輸入數據等于0時,AD9708輸出的電壓值為5V;當輸入數據等于255(8’hff)時,AD9708輸出的電壓值為-5V。
AD9708是一款數字信號轉模擬信號的器件,內部沒有集成DDS(Direct Digital Synthesizer,直接數字式頻率合成器)的功能,但是可以通過控制AD9708的輸入數據,使其模擬DDS的功能。例如,我們使用AD9708輸出一個正弦波模擬電壓信號,那么我們只需要將AD9708的輸入數據按照正弦波的波形變化即可,下圖為AD9708的輸入數據和輸出電壓值按照正弦波變化的波形圖。
圖 35.1.4 AD9708正弦波數據(左)、電壓值(右)
由上圖可知,數據在0至255之間按照正弦波的波形變化,最終得到的電壓也會按照正弦波波形變化,當輸入數據重復按照正弦波的波形數據變化時,那么AD9708就可以持續不斷的輸出正弦波的模擬電壓波形。需要注意的是,最終得到的AD9708的輸出電壓變化范圍由其外部電路決定的,當輸入數據為0時,AD9708輸出+5V的電壓;當輸入數據為255時,AD9708輸出-5V的電壓。
由此可以看出,只要輸入的數據控制的得當,AD9708可以輸出任意波形的模擬電壓信號,包括正弦波、方波、鋸齒波、三角波等波形。
在了解完高速DA轉換芯片后,接下來我們介紹下高速AD轉換芯片AD9280。
AD9280芯片
AD9280是ADI公司生產的一款單芯片、8位、32MSPS(Million Samples Per Second,每秒采樣百萬次)模數轉換器,具有高性能、低功耗的特點。
AD9280的內部功能框圖如下圖所示:
圖 35.1.5 AD9280內部功能框圖
AD9280在時鐘(CLK)的驅動下工作,用于控制所有內部轉換的周期;AD9280內置片內采樣保持放大器(SHA),同時采用多級差分流水線架構,保證了32MSPS的數據轉換速率下全溫度范圍內無失碼;AD9280內部集成了可編程的基準源,根據系統需要也可以選擇外部高精度基準滿足系統的要求。
AD9280輸出的數據以二進制格式表示,當輸入的模擬電壓超出量程時,會拉高OTR(out-of-range)信號;當輸入的模擬電壓在量程范圍內時,OTR信號為低電平,因此可以通過OTR信號來判斷輸入的模擬電壓是否在測量范圍內。
AD9280的時序圖如下圖所示:
圖 35.1.6 AD9280時序圖
模擬信號轉換成數字信號并不是當前周期就能轉換完成,從采集模擬信號開始到輸出數據需要經過3個時鐘周期。比如上圖中在時鐘CLK的上升沿沿采集的模擬電壓信號S1,經過3個時鐘周期后(實際上再加上25ns的時間延時),輸出轉換后的數據DATA1。需要注意的是,AD9280芯片的最大轉換速度是32MSPS,即輸入的時鐘最大頻率為32MHz。
AD9280支持輸入的模擬電壓范圍是0V至2V,0V對應輸出的數字信號為0,2V對應輸出的數字信號為255。而AD9708經外部電路后,輸出的電壓范圍是-5V+5V,因此在AD9280的模擬輸入端增加電壓衰減電路,使-5V+5V之間的電壓轉換成0V至2V之間。那么實際上對我們用戶使用來說,當AD9280的模擬輸入接口連接-5V電壓時,AD輸出的數據為0;當AD9280的模擬輸入接口連接+5V電壓時,AD輸出的數據為255。
當AD9280模擬輸入端接-5V至+5V之間變化的正弦波電壓信號時,其轉換后的數據也是成正弦波波形變化,轉換波形如下圖所示:
圖 35.1.7 AD9280正弦波模擬電壓值(左)、數據(右)
由上圖可知,輸入的模擬電壓范圍在-5V至5V之間,按照正弦波波形變化,最終得到的數據也是按照正弦波波形變化。
35.2實驗任務
本節實驗任務是使用新起點開發板及高速AD-DA擴展模塊(ATK_HS_AD_DA模塊)實現數模及模數的轉換。首先FPGA產生正弦波變化的數字信號,經過DA芯片后轉換成模擬信號,將DA的模擬電壓輸出端連接至AD的模擬電壓輸入端,AD芯片將模擬信號轉換成數字信號,然后通過ILA觀察數字信號的波形是否按照正弦波波形變化。
35.3硬件設計
ATK_HS_AD_DA模塊由DA轉換芯片(AD9708)和AD轉換芯片(AD9280)組成。AD9708的原理圖如下圖所示。
圖 35.3.1 AD9708原理圖
由上圖可知,AD9708輸出的一對差分電流信號先經過濾波器,再經過運放電路得到一個單端的模擬電壓信號。圖中右側的W1為滑動變阻器,可以調節輸出的電壓范圍,推薦通過調節滑動變阻器,使輸出的電壓范圍在-5V至+5V之間,從而達到AD轉換芯片的最大轉換范圍。
AD9280的原理圖如下圖所示。
圖 35.3.2 AD9280原理圖
上圖中輸入的模擬信號SMA_IN(VI)經過衰減電路后得到AD_IN2(VO)信號,兩個模擬電壓信號之間的關系是VO=VI/5+1,即當VI=5V時,VO=2V;VI=-5V時,VO=0V。
ATK_HS_AD_DA模塊的實物圖如下圖所示。
圖 35.3.3 ATK-HS-AD-DA模塊實物圖
本實驗中,各端口信號的管腳分配如下表所示。
表 35.3.1 高速AD-DA轉換實驗管腳分配
對應的TCL約束語句如下所示:
set_location_assignment PIN_M2 -to sys_clk set_location_assignment PIN_M1 -to sys_rst_n set_location_assignment PIN_T11 -to da_data[0] set_location_assignment PIN_R10 -to da_data[1] set_location_assignment PIN_G2 -to da_data[2] set_location_assignment PIN_R11 -to da_data[3] set_location_assignment PIN_T13 -to da_data[4] set_location_assignment PIN_R12 -to da_data[5] set_location_assignment PIN_T14 -to da_data[6] set_location_assignment PIN_R13 -to da_data[7] set_location_assignment PIN_N6 -to da_clk set_location_assignment PIN_M8 -to ad_clk set_location_assignment PIN_P8 -to ad_data[7] set_location_assignment PIN_N8 -to ad_data[6] set_location_assignment PIN_L9 -to ad_data[5] set_location_assignment PIN_K9 -to ad_data[4] set_location_assignment PIN_M9 -to ad_data[3] set_location_assignment PIN_L10 -to ad_data[2] set_location_assignment PIN_P9 -to ad_data[1] set_location_assignment PIN_N9 -to ad_data[0] set_location_assignment PIN_P6 -to ad_otr35.4程序設計
根據本章的實驗任務,FPGA需要連續輸出正弦波波形的數據,才能使AD9708連續輸出正弦波波形的模擬電壓,如果通過編寫代碼使用三角函數公式運算的方式輸出正弦波數據,那么程序設計會變得非常復雜。在工程應用中,一般將正弦波波形數據存儲在RAM或者ROM中,由于本次實驗并不需要寫數據到RAM中,因此我們將正弦波波形數據存儲在只讀的ROM中,直接讀取ROM中的數據發送給DA轉換芯片即可。
圖 35.4.1是根據本章實驗任務畫出的系統框圖。ROM里面事先存儲好了正弦波波形的數據,DA數據發送模塊從ROM中讀取數據,將數據和時鐘送到AD9708的輸入數據端口和輸入時鐘端口;AD數據接收模塊給AD9280輸出驅動時鐘信號和使能信號,并采集AD9280輸出模數轉換完成的數據。
高速AD/DA實驗的系統框圖如圖 35.4.1所示:
圖 35.4.1 高速AD/DA系統框圖
頂層模塊的原理圖如下圖所示:
圖 35.4.2 頂層模塊原理圖
FPGA頂層模塊(hs_ad_da)例化了以下三個模塊:DA數據發送模塊(da_wave_send)、ROM波形存儲模塊(rom_256x8b)和AD數據接收模塊(ad_wave_rec)。
DA數據發送模塊(da_wave_send):DA數據發送模塊輸出讀ROM地址,將輸入的ROM數據發送至DA轉換芯片的數據端口。
ROM波形存儲模塊(rom_256x8b):ROM波形存儲模塊由Vivado軟件自帶的Block Memory Generator IP核實現,其存儲的波形數據可以使用波形轉存儲文件的上位機來生成.coe文件。
AD數據接收模塊(ad_wave_rec):AD數據接收模塊輸出AD轉換芯片的驅動時鐘和使能信號,隨后接收AD轉換完成的數據。
頂層模塊的代碼如下:
DA數據發送模塊輸出的讀ROM地址(rd_addr)連接至ROM模塊的地址輸入端,ROM模塊輸出的數據(rd_data)連接至DA數據發送模塊的數據輸入端,從而完成了從ROM中讀取數據的功能。
在代碼的第32行至第36行例化了ROM IP核,我們在前面說過,ROM中存儲的波形數據可以使用上位機波形轉MIF軟件或者Matlab軟件生成,在這里我們介紹一個簡單易用的波形轉MIF工具的使用方法,該工具位于開發板所隨附的資料“6_軟件資料/1_軟件/WaveToMif”目錄下,雙擊“WaveToMif_V1.0.exe”運行軟件。
接下來我們對MIF文件進行設置,直接使用默認的設置即可,點擊“一鍵生成”按鈕,在彈出的界面中選擇MIF文件的存放路徑并輸入文件名。WaveToMif轉換過程中的軟件界面如圖 35.4.3所示:
圖 35.4.3 WaveToMif軟件界面
生成的MIF文件打開界面如下圖所示:
圖 35.4.4 MIF文件打開界面
工程中創建了一個單端口ROM,在調用ROM IP核時,需要設置ROM位寬為8bit,深度為256,如圖 35.4.5所示。
圖 35.4.5 配置ROM位寬及深度
此外,為了保證ROM的讀使能信號拉高到有效數據輸出之間僅存在一個時鐘周期的延時,需要取消寄存端口輸出,如圖 35.4.6紅色方框所示。
圖 35.4.6 取消寄存端口輸出
最后,在“Mem Init”頁點擊“Browse”按鈕,選擇前面生成的初始化文件“dds_256x8b_wave.mif”,如圖 35.4.7所示。注意需要將該MIF文件置于工程目錄下,本工程中的MIF文件位于hs_ad_da/doc/文件夾下。
圖 35.4.7 選擇存儲器初始化文件
DA數據發送模塊的代碼如下:
在代碼的第14行定義了一個參數FREQ_ADJ(頻率調節),可以通過控制頻率調節參數的大小來控制最終輸出正弦波的頻率大小,頻率調節參數的值越小,正弦波頻率越大。頻率調節參數調節正弦波頻率的方法是通過控制讀ROM的速度實現的,頻率調節參數越小,freq_cnt計數到頻率調節參數值的時間越短,讀ROM數據的速度越快,那么正弦波輸出頻率也就越高;反過來,頻率調節參數越大,freq_cnt計數到頻率調節參數值的時間越長,讀ROM數據的速度越慢,那么正弦波輸出頻率也就越低。由于freq_cnt計數器的位寬為8位,計數范圍是0255,所以頻率調節參數FREQ_ADJ支持的調節范圍是0255,可通過修改freq_cnt計數器的位寬來修改FREQ_ADJ支持的調節范圍。
WaveToMif軟件設置ROM深度為256,倍頻系數為1,而輸入時鐘為50Mhz,那么一個完整的正弦波周期長度為25620ns = 5120ns,當FREQ_ADJ的值為0時,即正弦波的最快輸出頻率為1s/5120ns(1s = 1000000000ns) ≈ 195.3Khz。如果把FREQ_ADJ的值設置為5時,一個完整的正弦波周期長度為5120ns(5+1) = 30720ns,頻率約為32.55KHz。也可以在WaveToMif軟件設置中增加倍頻系數或者增加AD的驅動時鐘來提高正弦波輸出頻率。
AD數據接收模塊的代碼如下:
由于AD轉換芯片支持的最大時鐘頻率為32Mhz,而FPGA的系統時鐘頻率為50Mhz,所以需要先對時鐘進行分頻,將分頻后的時鐘作為AD轉換芯片的驅動時鐘(分頻計數見代碼的第16行至第21行)。
圖 35.4.8為AD數據接收模塊采集到的SignalTap波形圖,從圖中可以看出,ad_otr信號固定為低電平,ad_data(輸入的ad數據)為正弦波變化的波形,說明數據采集正確。
圖 35.4.8 AD數據接收模塊采集到的SignalTap波形圖
在這里介紹一下如何將數據設置成波形圖顯示,首先選中SignalTap波形圖中的ad_data,右鍵選擇Bus Display Format,然后選擇Unsigned Line Chart即可。如果要切換成數據顯示的話,同樣選中ad_data,右鍵選擇Bus Display Format,然后選擇Unsigned Decimal就可以了,如下圖所示:
圖 35.4.9 SignalTap波形顯示設置界面
35.5下載驗證
首先將ATK-HS-ADDA模塊插入開發板的P6擴展口位置,插入的時候注意擴展口電源引腳方向和開發板電源引腳方向一致,然后將下載器一端連接電腦,另一端與開發板上對應端口連接,最后連接電源線并打開電源開關。
開發板硬件連接實物圖如圖 35.5.1所示:
圖 35.5.1開發板硬件連接實物圖
接下來我們下載程序,驗證高速AD-DA功能。程序下載完成后,接下來我們使用示波器測量DA輸出通道的波形。首先將示波器帶夾子的一端連接到開發板的GND位置(可使用杜邦線連接至開發板擴展IO的GND管腳),然后將另一端探針插入高速AD-DA模塊DA通道中間的金屬圓圈內,如圖 35.5.2所示;或者直接測試高速AD-DA模塊的TP引腳也可以,如圖圖 35.5.3所示。
圖 35.5.2 DA測量孔位
圖 35.5.3 DA模擬電壓測試點(TP)
此時觀察示波器可以看到正弦波的波形,如果觀察不到波形,可以旋轉ATK-HS-ADDA模塊上的旋鈕來調節輸出的模擬電壓幅值,也可以嘗試按下示波器的“AUTO”,再次觀察示波器波形,示波器的顯示界面如圖 35.5.4所示:
圖 35.5.4 示波器顯示界面
觀察到正弦波波形后,說明DA已經正確輸出模擬電壓波形了,接下來我們來驗證AD的功能,首先使用兩頭都是公頭的杜邦線,將DA輸出通道和AD輸入通道連接起來,杜邦線連接圖如圖 35.5.5所示。
連接然后使用SignalTap觀察ad_data數據的變化(鼠標右擊d_wave_recad_data->“Bus_Display_Format”->“signed Line Chart”,數據即可以波形的形式展示出來)。這里需要注意的是,采樣時鐘使用AD數據接收模塊的sample_clk時鐘,使用其它時鐘可能會造成數據采集錯誤,觀察到的SignalTap波形如圖 35.5.6所示。
圖 35.5.5 AD-DA通道杜邦線連接圖
圖 35.5.6 AD數據SignalTap波形圖
由上圖可知,輸入的ad_data數據為正弦波變化的波形,說明AD-DA實驗驗證成功。
總結
以上是生活随笔為你收集整理的【正点原子FPGA连载】第三十五章高速AD/DA实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DebitCredit for Mac(
- 下一篇: CODEVS——T 1005 生日礼物