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