用芯創造未來 這次有幸調試了國半公司一款雙通道,8位,1.5G(單通道最高3G)采樣率的超高速ADC,芯片型號ADC08D1500。與普通高速芯片不同的是這款芯片的輸出擁有DDR模式。結構框圖如下 兩個1:2DEMUX分別用于I、Q兩路。按采樣時鐘2分頻的速率,每個通道分2路按Dx、DxD輸出,共4路輸出。SDR模式和DDR模式唯一的區別在于上圖的Output Clock Generator模塊,SDR工作在時鐘單邊沿采樣輸出模式,DDR則是時鐘雙邊采樣輸出模式。因此,DDR的輸出時鐘是采樣時鐘的4分頻,這個時鐘在FPGA內部可使用IDDR邏輯資源匹配接收。SDR和DDR模式的時序圖如下 至于該芯片的配置,模擬輸入的處理以及其他走線相關注意,這在datasheet里都有相當詳細的描述,這里就不多說了。我主要想總結下調試這種AD的幾點經驗。這些經驗對高速,高精度AD的調試一樣適用。 一個項目中,尤其是涉及到信號處理的項目,AD的調試都是一個關鍵環節。如何對AD進行測試,如何確定AD調試完成,在FPGA中如何對不同輸出模式的數據進行處理等。這一些系列的問題不光是寫寫代碼這么簡單,更重要的是要會分析數據。硬件設計上還要充分考慮到AD內外時鐘的設計,以及LVPECL、LVDS等差分線耦合方式的設計等。這其中任何一項內容都可以拿來大書特書。我想這也是為什么在研究生電子設計中,專家最關心的是AD部分。針對這款AD芯片在調試過程中遇到的問題,總結下我的解決方法,以及數據分析時用到的一些方法。 經驗1:分析AD輸出數據準確與非,最簡單的方式就是無信號輸入時的噪聲數據是否準確,這可以確定AD有效位數據的準確性。采用二進制反碼觀察最方便,例如8位輸出,噪聲數據只會在127-128之間變化。 錯誤例子:如下圖(看不清點擊網頁查看圖片) 上4路是FPGA的IDDR邏輯同步DDR時鐘輸出的4路I通道數據,下4路則是Q路數據。因為我只保存了查找錯誤時的數據圖片,實際中只要看噪聲的Bus波形就可以確認噪聲電平正確與否。該圖中I路輸出為正弦信號采樣值,Q路則是噪聲值。容易看到,Q路中灰藍兩路的噪聲值正確均為127-128,而紅綠兩路噪聲的低4位有誤碼。 錯誤排查:因為這里已經確定錯誤通路和通路的位數,按照數據流的反方向檢查,首先檢查FPGA接收代碼,從涉及到該位的FIFO → IDDR → IBUFDS ,確定無誤后再到硬件連接,主要是檢查該路的差分對是否接反,以及AD并行數據差分對的走線長度是否出現較大誤差。實時也是如此,底板和采集板DQ[3]差分對的連接P/N接反了,才造成該路的邏輯與正確值反向。 錯誤修改:這種硬件錯誤修改ucf是不行的,map不過。因為FPGA管腳和硬件是一一對應的,修改ucf無濟于事。在IBUFDS中將差分對對調,這也是不行的,因為IBUFDS的輸入又是與FPGA管腳的P/N一一對應。官方說明截圖如下。因此,迫于無奈,只能在后級緩存總將邏輯取反再送進fifo。 經驗2:輸入信號頻率比AD采樣頻率小100倍以上的信號,觀察AD輸出數據頻率的穩定性,也即正弦信號疏密的變化,這可以確定AD采樣時鐘的穩定性。針對高速差分時鐘,在電路板中如果時鐘信號線處理不當或者時鐘驅動器與接收器之間的耦合方式不對,很容易造成終端接收的時鐘不穩定。耦合方式一定要看選用哪個公司時鐘驅動芯片的datasheet,以及該公司提供的時鐘耦合方式專用說明文檔。 錯誤例子:解決了誤碼問題后,輸入頻率為10M的單頻信號,頻率為1G的采樣時鐘由FPGA控制的MAX3674-PLL芯片提供,該時鐘經過時鐘選擇驅動器MC100LVEP14到采集板,連續觀察FPGA內部采集到的數據信息。如下圖 可見,連續抓出的三幅圖片中,正弦信號的頻率在變化。正常情況應該是波形基本不變,或者變化非常細小。這主要是因為給AD的采樣時鐘不穩定造成的,原因如下:1.PLL時鐘配置不正確使其無法鎖定頻率;2.PLL到Clock Driver的時鐘耦合不當;3.Clock Driver到AD的耦合不當;這個問題以后積累到一定程度再展開討論,現在暫且不談。主要是硬件設計之初就要充分考慮到各種耦合方式的兼容,不然后續調試將非常困難。 經驗3:通過正弦信號的遞增、遞減以及緩存通道的先后順序判別信號的先后,進而利用FPGA在線邏輯分析計算出信號的周期,以及單周期內的采樣點數,進一步驗證AD對輸入信號采樣率的準確性。 實例計算分析:頻率為10M的單頻信號,采樣時鐘設置為700M。以Chipscope為例,采用單窗口,2048存儲深度采集AD的I路DDR輸出的正弦信號單周期放大圖如下。(綠、紅、籃、灰→DI_Q2、DI_Q1、DId_Q2、DId_Q1,其中Q1表示時鐘上邊沿,Q2表示時鐘下邊沿) 在FPGA中,利用IDDR邏輯采樣時鐘4分頻同步4通道輸出數據。簡單的解釋就是AD在采樣頻率為F條件下,將I路輸入的模擬信號轉成頻率為F/2,兩路DI,DId交替輸出的數字信號,進入FPGA后,再將DI,DId轉成頻率為F/4,四路DI_Q1(紅),DId_Q1(灰),DI_Q2(籃),DId_Q2(綠)SAME_EDGE_PIPELINED輸出數據。IDDR同邊沿流水輸出的時序同如下: 根據波形圖正弦波形的先后順序,I通道的先后順序依次是灰(DId_Q1)->紅(DI_Q1)->藍(DI_Q2)->綠(DId_Q2),該4通道的時間間隔即為AD采樣間隔。如下圖所示,記錄單周期的采樣點數:17×4=68約等于70這便是與輸入的10M模擬信號在700M采樣時鐘的數字信號。 至于內部PLL+DCM的配置主要是注意PLL和DCM中一些開關特性,別讓內部信號超過了設定范圍就行了。 高速信號的處理更多的還是利用FPGA的固有資源去做,歸根到底就是看官方資料,一字一句理清楚接口上就不會有太大的問題。并不喜歡像很多人把例如PCIe、RapidI/O這些高速傳輸協議說的那么懸乎,其實就是復雜一點,砸錢砸的多一點而已。更喜歡FPGA在信號處理上的應用,可以很直接的把自己設計的算法在上面實現,仿真也很準確實用。至于FPGA的另一大應用領域片上系統,外界吹的多么有優勢,真正用起來還是不容易的,感覺還是不夠完善。在FPGA的三大應用領域中,還是信號處理發展前景最大,真正做到理論與實踐并重的一個領域,一點小小感悟。 |