作者:Hello,Panda
這次分享一個(gè)在Xilinx FPGA實(shí)現(xiàn)MIPI DPHY接口的案例(包括CIS協(xié)議層)。截止目前為止,Xilinx僅在Ultrascale+及其以上版本的FPGA IO可直接支持MIPI 電平輸入,其他的,都需要轉(zhuǎn)換成LVDS來接收。在軟件支持上,Xilinx在高版本的Vivado(Vitis)上開放了MIPI DPHY IP,但是這個(gè)IP可能用起來有諸多的限制,比如說,不可以動(dòng)態(tài)切換Lane速率、比如說必須是Gated的時(shí)鐘、比如說所有時(shí)鐘通道和數(shù)據(jù)Lane的LP信號(hào)都必須接進(jìn)來占用很多IO等等。所以,熊貓君在這里分享手動(dòng)擼代碼的途徑,根據(jù)自己的需求想做成啥樣就啥樣,哪管它格式千奇百怪,另外給大家分享的是,擼這個(gè)代碼不用怕,真的很簡單,熟練一些的三天就成,不太熟練的也就一個(gè)星期,畢竟咱們不需要把協(xié)議棧的每個(gè)邊邊角角都整出來,夠咱用就可以了。好了,不說廢話了,咱們以MIPI DPHY CSI為例預(yù)備開始,搭建一個(gè)MIPI RX攝像頭數(shù)據(jù)的案例!
一、 硬件上的考慮
之前咱不是介紹過,Xilinx低版本的FPGA上并不能直接支持MIPI DPHY電平標(biāo)準(zhǔn),因此不能直接就把攝像頭接到FPGA的Select IO上,咱得想辦法把它變成可以認(rèn)識(shí)的LVDS電平。
1. 速率的考慮
為什么說要考慮速率呢?這里一個(gè)是和FPGA內(nèi)部的資源相關(guān),另外一個(gè)是和信號(hào)完整性相關(guān)。
FPGA內(nèi)部的資源是怎么個(gè)說法呢?因?yàn)槭且玫絊elect IO的Iserdes,因此受IO時(shí)鐘速率的影響,可以布線到IO的最高時(shí)鐘在7系列器件里面是BUIO,可以達(dá)到800MH(Spartan-6的BUFPLL可能低一些,記得好像是600MHz來著的,有需要的可以自行查證),那么就意味著在7系列FPGA上接MIPI進(jìn)來最大的Lane速率只能到1600Mbps。
另外,信號(hào)完整性是怎么一個(gè)說法呢?咱們這個(gè)畢竟是高速信號(hào),對眼圖采樣窗口什么很看重的,這方面Xilinx很有經(jīng)驗(yàn),它給畫了一條線:800Mbps,lane速率低于800Mbps的,可以通過電阻網(wǎng)絡(luò)用很低的成本就把事兒給辦了;但是速度高了可不行,采樣可能就不正確了,那怎么辦呢?就得用專門的level shift芯片將MIPI信號(hào)轉(zhuǎn)成LVDS了。
2. 使用電阻網(wǎng)絡(luò)
這種方法尤其簡單,說白了,對接收端來說尤其簡單,說白了,就是說你MIPI電平的擺幅很低,那好啊,我把終端電阻加大(150Ω,需要注意的是內(nèi)部的DIFF_TERM要False掉)一點(diǎn)兒,可以確保差分終端電阻兩端的電壓夠LVDS的裁決門限就行了,這個(gè)Xilinx還專門有一個(gè)xapp的參考設(shè)計(jì),具體編號(hào)沒有記,有需要可以自行去找DoCNav要。至于低速LP信號(hào),分出來以后要是BANK富裕可以專門搞一個(gè)1.2V的bank,如果不富裕,也可以加一個(gè)輸入阻抗很大的電平轉(zhuǎn)換芯片(比如74LVC1T45)把它轉(zhuǎn)成任意你想要的電平標(biāo)準(zhǔn),比如1.8V、2.5V或3.3V。那么,整個(gè)輸入的網(wǎng)絡(luò)結(jié)構(gòu)就變成了圖1這個(gè)樣子的了。
圖1 電阻網(wǎng)絡(luò)結(jié)構(gòu)圖
至于哪些信號(hào)要接進(jìn)來,如果引腳足夠多,那么所有LP信號(hào)和HS信號(hào)都可以接進(jìn)來,如果不富裕且不需要用到嵌入的低速數(shù)據(jù)的話,因?yàn)樵蹅兊腖ane已知,除了HS信號(hào)外,將lane0的LP信號(hào)接進(jìn)來用于狀態(tài)判斷就行了。
低速的適用于大多數(shù)分辨率/幀率在1080P60及以下的,比如幾乎所有的內(nèi)窺鏡用Sensor,如最常用OV9734;大部分的Sony和安森美的2M監(jiān)控芯片。
3. 使用專門的電平Level shift芯片
因?yàn)榛旧螹IPI還是用于手機(jī)和監(jiān)控類居多,一般的SoC都支持MIPI直接輸入。這方面的電平轉(zhuǎn)換不多,一個(gè)是使用專用芯片,比如說國外的MC20901之類的芯片,另外國內(nèi)的龍迅也有類似的。
另外一種就是采用高速的信號(hào)buffer/repeater芯片轉(zhuǎn)成LVDS信號(hào),TI有很多種這樣的芯片,比如說性能頂尖的DS25BR100(足以滿足2.5Gbps MIPI,帶均衡和加重的),當(dāng)然這個(gè)性能好意味著高價(jià)格,對于速度沒有那么高的應(yīng)用,選稍次一檔的也很香,電路結(jié)構(gòu)和圖1類似,就是把150Ω電阻的位置換成這個(gè)buffer/repeater芯片,輸出就直接是LVDS到FPGA了,標(biāo)標(biāo)準(zhǔn)準(zhǔn)的。
這種方案適合800Mbps~1600Mbps應(yīng)用場景,除了一些極大靶面或者極高幀率的Sensor外,大多數(shù)的一般sensor都包含在內(nèi)了。
4. 超過1.6Gbps怎么辦
還有一種情況,就是必須要用到lane速率超過1.6Gbps,這種情況怎么辦呢?那就得用到高速serdes了GTP、GTH、GTY了,針對這種情況,Xilinx專門出了一個(gè)應(yīng)用指南,這個(gè)比較特殊,熊貓君記得編號(hào)是XAPP1339,名字叫做“Implementing 2.5G MIPI D-PHY Controllers”,前提是FPGA需要帶高速Serdes,成本要高一些,Xilinx官網(wǎng)有參考設(shè)計(jì),在安富利可以買到評(píng)估板,如下圖2所示,本文按下不表。
圖2 安富利使用高速Serdes的參考板
二、 軟件設(shè)計(jì)
這里的軟件設(shè)計(jì)只考慮介紹手?jǐn)]的,對Xilinx官方IP和參考設(shè)計(jì)不做表述。這里面主要的關(guān)鍵點(diǎn)是考慮使用什么樣的時(shí)鐘網(wǎng)絡(luò)拓?fù)洹?/p>
1. 兩種時(shí)鐘拓?fù)涞目剂?/p>
這里面有種時(shí)鐘架構(gòu)可供選擇,各有優(yōu)缺點(diǎn),根據(jù)實(shí)際情況選擇之。
第一種是使用鎖相環(huán)(PLL):這種方案的有點(diǎn)是時(shí)鐘穩(wěn)定、抖動(dòng)小,外部偶爾有個(gè)小毛刺可能影響不大,缺點(diǎn)一個(gè)是需要考慮失鎖的問題,這個(gè)對連續(xù)時(shí)鐘輸出的沒啥影響,但是對Gated時(shí)鐘就比價(jià)致命,如果低功耗間隔太長,重新轉(zhuǎn)到高速模式時(shí)間又太短,很有可能鎖相環(huán)就失鎖了,導(dǎo)致丟掉了HS幀前面的一部分?jǐn)?shù)據(jù)找不到同步頭接收失敗;另一個(gè)是只能支持一種固定速率。因此,在選用這種方案的時(shí)候要特別注意。
第二種方案是直接使用時(shí)鐘BUFER:這種方案無需知道進(jìn)來的時(shí)鐘速率是多少,所以可以很方便的通過配置sensor的寄存器來切換MIPI通道lane速率(這種對大靶面的傳感器應(yīng)用尤為常見,拍照和視頻流采用不同的輸出速率)。缺點(diǎn)是容易受外界干擾,對信號(hào)完整性和干擾屏蔽處理要求較高。
這個(gè)兩種時(shí)鐘方案的結(jié)構(gòu)如下圖3所示。
圖3 兩種時(shí)鐘拓?fù)浣Y(jié)構(gòu)
對MIPI而言,數(shù)據(jù)并串轉(zhuǎn)換的最小單位是字節(jié),DDR采樣方式,因此byte_clk頻率是bit_clk的1/4。
2. 物理層的接收
咱們一般而言不考慮雙向通信和ESCAPE信號(hào)處理,那么MIPI D-PHY物理層的主要工作就是采樣LP狀態(tài)信號(hào)和將高速串行數(shù)據(jù)恢復(fù)成按字節(jié)排序的并行數(shù)據(jù),不管多少個(gè)Lane,方法都一個(gè)樣。這個(gè)工作被稱作解串,只需要用到IDELAY和ISERDES原語就行。MIPI標(biāo)準(zhǔn)默認(rèn)是時(shí)鐘相對數(shù)據(jù)的相位是90°,DDR采樣方式,也就是說,時(shí)鐘的上升沿和下降沿剛好在數(shù)據(jù)的中間,因此在PCB Layout的時(shí)鐘,時(shí)鐘和數(shù)據(jù)最好是需要等長的,這樣保證到達(dá)時(shí)間是一樣的。IDELAY的作用是將PCB布線和內(nèi)部路徑的延時(shí)找回來使之滿足最佳采樣要求,這在直接使用時(shí)鐘BUFER的時(shí)鐘拓?fù)湓O(shè)計(jì)中尤為重要,另外,因每次布局布線后都會(huì)存在一些路徑差異,最好是約束Fixed布線路徑。ISERDES的作用是串轉(zhuǎn)并,將數(shù)據(jù)轉(zhuǎn)為并行的,這里的串并比設(shè)為1:8就好,至于這倆源語怎么用,可以參照Xilinx的Select IO手冊或者參照我上一篇分享文章《Zynq高速串行CMOS接口設(shè)計(jì)與實(shí)現(xiàn)》。
恢復(fù)成字節(jié)數(shù)據(jù)的第二步就是找同步頭B8’H,這里千萬不要用Iserdes自帶的bitslip功能,因?yàn)橥阶置恳粋€(gè)HS幀就一個(gè)字節(jié),而且每一個(gè)HS幀都要搜索同步字節(jié)。一次這里需要手?jǐn)]一小段代碼自己來截取為最好。
3. CSI層的實(shí)現(xiàn)
CSI層主要就是將1lane,或多l(xiāng)ane的數(shù)據(jù)按照協(xié)議規(guī)定解析出來并將圖像數(shù)據(jù)拼接輸出,有的可能會(huì)存在多個(gè)虛擬通道,需要注意一下。MIPI 一般會(huì)分為長短幀,長幀為數(shù)據(jù)幀,一幀一般就是一行數(shù)據(jù);短幀為標(biāo)志幀,用于指示幀行的開始結(jié)束,這個(gè)我們可以根據(jù)自己的Sensor實(shí)現(xiàn)一種就行了,沒有必要像標(biāo)準(zhǔn)那樣把所有的數(shù)據(jù)類型都囊括進(jìn)來。
這里需要注意一下的是,MIPI DPHY和CPHY的長幀的幀頭排列方式不一樣,CPHY是固定的每個(gè)通道都有6個(gè)word的的幀頭信息。但是DPHY的幀頭信息排布和數(shù)據(jù)一樣,都是根據(jù)實(shí)際的通道數(shù)分散到各通道。
CSI層的工作時(shí)鐘可以使用FPGA內(nèi)部的一個(gè)合適時(shí)鐘,不和MIPI的像素時(shí)鐘掛鉤,從CSI層出來的數(shù)據(jù)就是直接的一個(gè)一個(gè)的像素?cái)?shù)據(jù)了。
針對特定的Sensor實(shí)現(xiàn)CSI層,整個(gè)MIPI的接收邏輯框圖如下圖4所示,整個(gè)接收邏輯所占用的Slice資源一般不會(huì)大于1K。
圖4 MIPI DPHY接收邏輯設(shè)計(jì)框圖
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618658 -
信號(hào)完整性
+關(guān)注
關(guān)注
68文章
1445瀏覽量
96764
發(fā)布評(píng)論請先 登錄
0.4 至 2.7 GHz LTE 分集接收模塊,帶 MIPI? RFFE 接口 skyworksinc

正點(diǎn)原子AU15開發(fā)板資料發(fā)布!板載40G QSFP、PCIe3.0x8和FMC LPC等接口,性能強(qiáng)悍!
XILINX XCZU67DR FPGA完整原理圖
RK3588S和RK3588S2差異說明

基于RK3576開發(fā)板的MIPI-DSI使用

基于高云Arora-V 60K FPGA實(shí)現(xiàn)的MIPI CPHY轉(zhuǎn)MIPI DPHY透傳模塊

ZYNQ FPGA的PS端IIC設(shè)備接口使用

高云Arora Ⅴ系列GW5AT-LV60 FPGA:晨熙?家族高性能新星
MIPI2.5G DPHY CSI2DSI demo移植 -v1

利用FPGA實(shí)現(xiàn)USB 2.0通信接口

采用Xilinx FPGA的AFE79xx SPI啟動(dòng)指南

Xilinx 7系列FPGA PCIe Gen3的應(yīng)用接口及特性

基于RK3588J的6路MIPI CSI視頻采集案例分享,多路視頻系統(tǒng)必看!
【技術(shù)分享專欄】MIPI接口與LVDS接口有何區(qū)別?

評(píng)論