現在CMOS傳感器的分辨率越來越大,對應的,對數據傳輸接口的要求也越來越高。根據熊貓君有限的實現和調試經驗,基本上遇到了:
①多通道HiSPi接口:主要是Aptina(現已經被安森美收購),常用的有1080P60的AR0331(3.1M),3664×2748P15的MT9J003,3984×2712P80(開窗輸出最高可達1200fps)的AR1011等;
②多通道LVDS接口:主要有索尼系列、安森美的Python系列、國產如長光辰芯和德國viimagic系列等,至少熊貓君用過的IMX172/IMX122/IMX185/
IMX236、安森美Python全系列和VII9222等都是LVDS輸出;
③MIPI接口:多用于手機,一些監控用的CMOS如Sony IMX185、OV14810等也帶;
④CCIR656:一般低分辨率的會帶CCIR656接口,也有一些廠家的高分攝像頭也帶,比如OV14810;
⑤并行接口:較早設計的CMOS許多都是直接并口輸出,比如Aptina的MT9M031、MT9J003都帶有并口輸出;
熊貓君在這里想討論的是前三種接口的實現,它們是業界應用最廣泛而且對FPGA資源有著共性要求。
無論是HiSPi、LVDS還是MIPI,其核心思想就是要實現將高速串行信號恢復成并行數據。這將會用到XilinxFPGA IOB上的一個重要的資源——ISERDES。
實現串行信號的并行化,光有ISERDES還不行,還需要用到IOBANK上的延時模塊IDELAYCTRL和IOB上的IODELAYE以及相關的相位訓練算法。
1 Xilinx的IO資源
本節對用到的IO資源作簡要的介紹。
1.1 IDELAYCTRL資源
在電壓、溫度等因素變化時,可能會影響到系統的時序,此時IDELAYCTRL模塊就可以連續補償時鐘域內所有個體的delay taps (IDELAY/ODELAY)。如果使用了IOB上的IDELAY或ODELAY資源,那么就必須使用IDELAYCTRL資源。請注意,整個IO BANK里面只有一個IDELAYCTRL。
IDELAYCTRL很重要的一個輸入項就是參考時鐘REFCLK,補償時鐘域內所有模塊的時序參考,這個時鐘必須由BUFG或BUFH驅動。REFCLK必須保證在FIDELAYCTRL_REF+IDELAYCTRL_REF_PRECISION(MHz)ppm才能保證IDELAY/ODELAY的延時分辨率:
(TIDELAYRESOLUTION=1/(32x 2 x FREF))
1.2 IDELAYE2邏輯
IDELAYE2邏輯是一個31抽頭的循環延時補償模塊,對輸入的信號進行指定分辨率的延時,FPGA可以直接訪問。Tap延時分辨率由IDELAYCTRL的參考時鐘提供持續補償。圖(1)是IDELAYE2接口示意圖,表(1)是對這些接口的描述,表(2)是對邏輯參數的描述。
圖(1 )IDELAYE2****接口示意圖。
表(1 )IDELAYE2****接口描述
表(2 )IDELAYE2****邏輯參數描述
以下以VAR_LOAD模式為例說明延時的時序動作,如圖(2)所示。
圖(2 )延時時序動作模型
a)Clock Event 0:
在LD有效前,CNTVALUEOUT輸出為未知值;
b)Clock Event 1:
在C的上升沿采樣到LD有效,此時DATAOUT延時CNTVALUEIN指定的延時Taps,改變tap Setting到Tap2,CNTVALUEOUT更新到新的Tap值;
c)Clock Event 2:
INC和CE有效,此時指定了增量操作,Tap值加1,DATAOUT輸出從Tap2更新到Tap3,CNTVALUEOUT更新到新的Tap值;
d)Clock Event 3
LD有效,DATAOUT輸出延時更新到Tap10,CNTVALUEOUT更新到新的Tap值。
1.3 ISERDESE2邏輯
輸入串轉并邏輯可以看做是OSERDESE2的逆過程,在SDR模式下可支持2-、3-、4-、5-、6-和7-的串并轉換,在DDR模式下可支持2-、4-、6-、8-的串并轉換,級聯DDR模式下還可擴展到10-和14-。每一個ISERDESE2包括:
a)專門的串并轉換器;
b)Bitslip子模塊用于源同步接口;
c)專用的可支持strobe-based的存儲接口。
圖(3)是ISERDESE2的結構示意圖。表(3)是ISERDESE2接口描述,表(4)示ISERDESE2的參數描述。
圖(3 )ISERDESE2****結構示意圖
表(3 ) ISERDESE2
表(4)ISERDESE2的參數描述
(1) 時鐘方案
CLK和CLK_DIV必須是嚴格對齊的時鐘,雖然允許使用BUFIO/BUFR,但任然有可能存在相位問題。圖(5)時采用BUFIO/BUFR的方案。
圖(5 )采用BUFIO/BUFR****的時鐘方案
一般的,根據接口類型的差異,時鐘必須滿足以下的約束:
①networking interface
a)CLK→BUFIO;CLKDIV→BUFR;
b)CLK→MMCM/PLL;CLKDIV→和CLK相同的MMCM/PLL的CLKOUT[0:6]的輸出,使用MMCM時CLK和CLKDIV必須使用相同的驅動BUF;
c)CLK→BUFG;CLKDIV→BUFG。
②MEMORY Interface Type
a)CLK→BUFIO, OCLK→BUFIO,或CLKDIV→BUFR;
b)CLK→MMCM或PLL, OCLK→MMCM,或CLKDIV由同一個MMCM/PLL的CLKOUT[0:6]驅動;
c)CLK→BUFG,CLKDIV→不同的BUFG。
OCLK和CLKDIV的輸入相位必須是嚴格對齊的,CLK和OCLK之間不要求相位關系。From CLK to OCLK的時鐘域必須進行補償。
其他接口類型的時鐘方案參考文檔UG471。
(2) BitSlip子模塊
BitSlip用于調整并行寄存器輸出串行數據的位置。在SDR模式下,每一個BitSlip脈沖讓輸出pattern的數據左移1bit;在DDR模式下,第一個BitSlip右移1bit,第二個BitSlip左移3bit,依次進行,移動規律如圖(6)所示。BitSlip一定是和CLKDIV同步的一個脈沖。
圖(6 )BitSlip****訓練移位規律
在上面所介紹的資源中,IDELAYE2是動態相位對其訓練的神器,ISERDESE2實現串并轉換,其Bitslip功能是實現并行化數據對齊的關鍵。
2 LVDS高速接口實現實例
因為MIPI接口有其完整的物理層協議,因此不在這里講具體實現,本文以Sony的IMX122 CMOS為例,聊一聊高速LVDS(HiSPi類似,只是電平標準有一點區別)接口在Xilinx 7系列FPGA和Zynq SoC上的實現。
2.1 需求分析
以Sony IMX122 CMOS為例,配置在1080P分辨率可輸出30fps。CMOS在初始化完成后輸出兩通道穩定的LVDS數據,LVDS接收模塊在收到配置完成信號后開始工作。因此,這個LVDS接收模塊需要實現:
① CMOS工作在Slave模式下,向CMOS發出參考時鐘(INCK)、行同步(XHS)、幀同步(XVS)信號;
② 接收LVDS數據并將它恢復成為指定的圖像數據格式;
③ 提供測試信息接口。
2.2 IMX122 CMOS輸出特性
本小節簡介IMX122 CMOS的一些特性。
2.2.1 同步時序要求
在Slave模式下需要向CMOS提供周期穩定的XHS和XVS信號,兩者的時序要求如圖7所示。在產生同步時序時需要注意以下要點:
① XVS和XHS必須是穩定的周期性信號;
② XVS和XHS信號的低電平保持時間為4~100個INCK;
③ XHS可以和XVS同時拉低,也可延時一個時鐘周期拉低。
圖7Slave模式下同步時序
2.2.2 輸出數據率
在串行SDR LVDS模式下以12bit模式輸出,數據率為891Mbps,每個通道的數據率為445.5Mbps。
2.2.3 Sync Code格式
在串行輸出模式下,CMOS通過輸出固定的Sync Code來指示圖像的有效幀、行信息,接收器需通過查找這些Sync Code來恢復圖像。IMX122可提供兩種模式的Sync Code,這里配置為SyncCode1,其具體定義如圖8所示。
圖8 IMX122 Sync Code定義
2.2.4 輸出圖像組織形式
IMX122在1080P讀出模式下,輸入參考時鐘INCK是37.125MHz。一幀圖像輸出固定為1125行,每行1100 INCK(29.63μs),有效輸出為1984×1105。圖像輸出的時序如圖9所示,圖10是輸出數據編碼規則。
圖9 IMX122 LVDS模式輸出時序
圖10 IMX122 12-bit 2通道輸出編碼格式
2.3 設計思路和模塊結構
Slave模式下工作的CMOS在XVS和XHS的同步下按照固定時序穩定輸出LVDS圖像數據。LVDS串行數據按照一定的方式進行編碼,接收模塊應先將串行數據解碼恢復成為并行數據,再根據數據的排列方式格式化輸出。因此,整個模塊可以劃分為時序同步、LVDS接收解碼(串轉并)和數據格式化輸出三個部分。整個LVDS接收模塊的結構如圖11所示。
圖11 LVDS接收模塊頂層圖
① CMOS輸入參考時鐘(INCK)為37.125MHz;
② CMOS輸出LVDS數據為445.5MHz SDR型;
③ 時序發生器由74.25MHz發生30fps的XVS、XHS信號;
④ LVDS數據接收解碼模塊將數據恢復為8bit@55.6875MHz并行格式(DATA[7:0]);
⑤ 格式化輸出模塊通過搜索同步頭的狀態確定是否發出bit_slip,并根據CMOS的數據格式和同步信號格式化輸出12bit@74.25MHz像素數據(PIX_DATA[11:0]);
⑥ IDELAYCTRL以Ref_clk為基準對整個IO BANK進行輸入延時控制。
2.3.1 時序同步
同步時序由內部74.25MHz計數產生。按照圖7所示時序即可。
2.3.2 LVDS接收解碼
LVDS接收的主要工作是將串行的數據轉為并行數據并進行自動相位調節,移位寄存器抽頭調整(Bitslip)。Xilinx Artix7系列FPGA提供串轉并模塊ISERDES和IO延時模塊IODELAYE2,ISERDES性能可在415Mb/s~1200Mb/s之間,IODELAYE2的延時參考時鐘可以是200MHz(1tap≈78ps)或300MHz(1tap≈52ps)。
(1)Artix7 FPGA時鐘特性
在Artix7系列器件里,MMCM可驅動BUFIO、BUFR、BUFH和BUFG,PLL只能驅動BUFH和BUFG。ZYNQ-7020采用Artix7 Speed-1器件,時鐘網絡的最高性能如下表5所示。
**表****5 Artix7 Speed-1 **器件時鐘性能
(2)LVDS接收時鐘選擇
①LVDS解碼串行參考時鐘選擇
從表1可以知道,采用BUFG最高時鐘性能為464MHz。IMX122 1080P串行模式下兩通道LVDS每通道的輸出數據率為445.5Mbps(SDR),接近BUFG的極限值,因此這里作一個變通處理,使用222.75MHz時鐘按照DDR****方式對串行數據進行采樣。
②IODELAYE2 延時參考時鐘選擇
延時參考時鐘選擇的原則是在LVDS數據時鐘周期內,可調節的Tap數盡量的多。IMX122輸出的數據周期為2.245ns,調節一個周期采用200MHz參考時鐘需要28taps,采用300MHz參考時鐘需要43個Taps,而IODELAYE2的調節Tap數為0~31,故只能**選擇****200MHz** 的參考時鐘 。
(3)LVDS數據接收模塊時鐘
因CMOS IMX122不輸出LVDS bit時鐘,FPGA使用內部時鐘來接收解碼LVDS數據。如圖12所示,與LVDS相關的時鐘由同一個MMCM產生以保證其相位的一致性。其中:
① 37.125MHz,為CMOS工作參考時鐘;
② 55.6875MHz,提供給IODELAYE2.C、ISERDES2.CLKDIV、補償狀態機及解碼后的字節數據參考時鐘;
③ 74.25MHz,產生30fps的CMOS同步參考時序和12bit像素參考時鐘;
④ 222.75MHz,以DDR模式接收的DDR位參考時鐘;
圖12 LVDS數據接收模塊結構
IMX122輸出兩路LVDS數據,每個通道的接收邏輯相同,對每一通道而言,數據流路徑如下:
a)LVDS差分對通過IBUFDS_DIFF_OUT,得到位數據(記為Master)及與其反相的數據(記為Slave);
b)Master和Slave分別進入各自的IODELAYE2和ISERDES2得到各自的并行數據送到補償算法狀態機進行動態相位調整并反饋各自的延時值到IODELAYE2。根據IMX122的LVDS編碼特點,ISERDES2按照1:8作串并轉換最為合適;
c)數據格式化輸出模塊根據查找Sync Code的情況調整bitslip;
d)補償模塊根據數據調整的情況輸出解碼后的8-bit并行數據。
2.3.3 動態相位補償
動態相位補償原理如下:
① 初始化時,Master數據延時假定設為數據眼圖的中間位置,Slave和Master的延時相隔半個數據周期。
② 在Master和Slave的數據不全為零或不全為壹時啟動動態相位補償算法。相位補償的基本原理是:如果Master和Slave采樣到的數據相同,則說明采樣太靠后,延時減少一個Tap(如圖13[a]);如果Master和Slave采樣到的數據不同,則說明采樣點太靠前,延時增加一個Tap(如圖13[b])。
圖13采樣點延時示意圖
③如果延時Tap值為最小或最大位置時,則交換Master和Slave的的參考關系,同時輸出數據作相應調整;
2.3.4 數據格式化輸出
該模塊的工作是將收到的串轉并數據的基礎上搜索Sync Code、并組織成12-bit的像素數據按照給定時序格式化輸出。
(1)Sync Code搜索
Sync Code搜索采用的策略是,邏輯在不停的查找在一幀數據里是否存在圖3-2所示的的特定數據,如果這些同步碼都能找到,則表示接收邏輯串轉并的輸出位順序正常,不再需要bitslip;若沒有找到全部的同步碼,則在下一幀開始的時候(XVS上升沿)給出一個bitslip脈沖調整輸出,直到找到完整的Sync Code。
兩路LVDS通道分別單獨進行Sync Code搜索,若32次bitslip 后任然沒有找到Sync Code ,則報告CMOS 輸出錯誤 。
(2)格式化輸出
格式化輸出模塊完成將CMOS輸出的數據解碼成12-bit Pixel數據并按照視頻格式時序輸出,結構如圖14所示。
圖14 格式化輸出邏輯結構
對格式化輸出的詳細實現過程這里不贅述。
2.3.5 接收模塊頂層文件描述
IMX122-LVDS接收模塊由4個文件構成,分別是imx122_lvds_rev_v1_0、lvds_data_rx、rev_data_format_v1_0和imx122_slvsyn_timing_v1_0構成,它們的層析結構如圖15所示。
圖15 LVDS接收模塊文件結構
注1:藍色的imx122_slvsyn_timing_v1_0不屬于LVDS接收內容,但CMOS在SLAVE模式下必須由它提供同步信號后才能正常輸出。
評論
查看更多