個(gè)人覺(jué)得易靈思的Trion系列比鈦金系列FPGA,就目前而言,更適合做圖像顯示相關(guān)應(yīng)用,以T35和Ti60為例,主要原因如下表所示:

易靈思如果專(zhuān)注圖像細(xì)分領(lǐng)域,畢竟大部分客戶(hù)還是用DDR和MIPI,因此我覺(jué)得鈦金系列的架構(gòu)真的腦袋被驢踢了,DDR和MIPI用硬核才是正確的選擇!
另外,鈦金系列FPGA相對(duì)推出時(shí)間不夠,目前IP也不成熟。以T35為例,DDR硬核IP在Efinity Interface中直接可以調(diào)用DDR IP并設(shè)定相關(guān)參數(shù),但是鈦金系列Ti60還沒(méi)有包含到工具鏈中,這讓拿不到一手資源的FPGAer就很尷尬,雖然可以理解不集成到IDE中,可以更快的迭代前提不成熟的版本。


如上圖所示,T35F324的FPGA開(kāi)發(fā)板,我都做了快半年了,一直沒(méi)有做一個(gè)基于視頻圖像的像樣點(diǎn)的Demo,甚是慚愧。為了給當(dāng)下煎熬的大家送點(diǎn)福利,我打算分2步走,如下:
DVP相機(jī)+DDR3+LVDS-LCD實(shí)時(shí)顯示系統(tǒng)
MIPI相機(jī)+DDR3+LVDS-LCD實(shí)時(shí)顯示系統(tǒng)
前者更關(guān)注DDR3硬核、LVDS TX,以及進(jìn)行并口相機(jī)的配置與圖像采集,完成實(shí)時(shí)圖像采集、緩存、顯示系統(tǒng);后者則借用1)的基礎(chǔ),更關(guān)注MIPI相機(jī)的開(kāi)發(fā),進(jìn)一步把易靈思FPGA進(jìn)行圖像采集的優(yōu)勢(shì),發(fā)揮一下。
當(dāng)然這過(guò)程肯定還是有不少的坑,有些坑只有自己趟過(guò),才有發(fā)言權(quán)。
言歸正傳,我們開(kāi)始干正事:基于T35的攝像頭采集、存儲(chǔ)、顯示系統(tǒng)的介紹。
首先是FPGA時(shí)鐘網(wǎng)絡(luò)
這里涉及到DDR控制器的時(shí)鐘,LVDS TX的快慢時(shí)鐘,系統(tǒng)時(shí)鐘,以及外設(shè)驅(qū)動(dòng)時(shí)鐘等,大致示意圖如下:

由于Trion的PLL是能輸出3個(gè)時(shí)鐘,因此將2個(gè)PLL都用上了,一個(gè)產(chǎn)生100MHz的系統(tǒng)時(shí)鐘,48/168M的LVDS慢/快時(shí)鐘,另一個(gè)PLL產(chǎn)生DDR的驅(qū)動(dòng)時(shí)鐘400MHz,以及外部傳感器的驅(qū)動(dòng)時(shí)鐘27MHz。另外,還有一個(gè)從傳感器輸入的像素時(shí)鐘74.25MHz,作為視頻流的同步時(shí)鐘。
其次是硬核的配置
這里用到了DDR與LVDS TX硬核。關(guān)于DDR硬核的使用,外部使用的是三星的K4B4G1646E-BYMA,4G 16bit容量。

在Interface中配置DDR控制器相關(guān)參數(shù),如下圖所示:


其實(shí)軟件包含了顆粒的型號(hào),因此配置還是挺簡(jiǎn)單的,對(duì)于用戶(hù)接口,Interface提供的是標(biāo)準(zhǔn)的AXI接口,其他的都是在硬核中,用戶(hù)不需要例化,非常的簡(jiǎn)單。
關(guān)于LVDS TX的使用,主要是PORT的配置,以TX0為例,Interface配置如下圖所示:
?
這里特別需要注意的是,PLL1設(shè)置tx_fastclk時(shí),需要90度響鈴;另外,Efinity的LVDS是LSB的,也就是先發(fā)LSB,這在Interface的說(shuō)明文檔中有解釋?zhuān)缦聢D所示:

另外,在1024*600 LVDS手冊(cè)中,LVDS時(shí)鐘有一定的相位關(guān)系,如下所示,在7bit數(shù)據(jù)傳輸時(shí),時(shí)鐘為1100011:

所以如上這部分代碼,如下所示:

接著是相機(jī)的驅(qū)動(dòng)
目前采用的AR0135是車(chē)規(guī)常用的130萬(wàn)全局曝光黑白相機(jī),成像質(zhì)量非常好,相關(guān)的參數(shù)如下所示:

我曾在《FPGA設(shè)計(jì)技巧與案例開(kāi)發(fā)詳解》一書(shū)中詳細(xì)介紹了如何使用FPGA驅(qū)動(dòng)CMOS攝像頭,因此這里不再描述細(xì)節(jié),給出框圖如下:

這里在進(jìn)行相機(jī)的初始化后,捕獲輸入的并行視頻流數(shù)據(jù);另外為了適配后面1024*600的LVDS LCD,再捕獲數(shù)據(jù)后,直接Crop到1024*600分辨率。接著將數(shù)據(jù)送入AXI讀寫(xiě)模塊,將DVP轉(zhuǎn)成AXI后寫(xiě)入DDR。
最后是視頻流的緩存與顯示
這一步其實(shí)和相機(jī)的數(shù)據(jù)緩存比較類(lèi)似,無(wú)非是用一樣的時(shí)序反著走一遍:即采用AXI從DDR中讀取數(shù)據(jù),轉(zhuǎn)成并口后,送給后續(xù)的LCD驅(qū)動(dòng)模塊,再通過(guò)LVDS送給LCD顯示,框圖如下所示:

最后,匯總整個(gè)時(shí)鐘、DDR、相機(jī)、LCD驅(qū)動(dòng)顯示的框圖,基于T35的攝像頭采集、存儲(chǔ)、顯示系統(tǒng),如下圖所示:

由于該趟的坑,都已經(jīng)趟過(guò)一遍了,這里我們不得不再靜下心來(lái)再分析討論一下,這個(gè)設(shè)計(jì)中遇到的最大的坑——DDR3的AXI接口竟然是Shared Read/Write Address Channel,配置與接口代碼如下所示:

那就意味著,雖然AXI可以做到讀寫(xiě)通道獨(dú)立,但我不能同時(shí)發(fā)起讀命令與寫(xiě)命令。如果AXI讀寫(xiě)通道是完全獨(dú)立的,則我們可以這樣設(shè)計(jì),即讀歸讀,寫(xiě)歸寫(xiě),設(shè)計(jì)相對(duì)簡(jiǎn)單。

但是現(xiàn)在竟然AXI的讀寫(xiě)地址通道是shared,我被驚訝到了,畢竟做了七八年芯片,AXI也是手?jǐn)]過(guò)很多遍,Shared地址通過(guò)的閹割版,還是有點(diǎn)不適應(yīng),畢竟當(dāng)讀寫(xiě)沖突的時(shí)候,必須做仲裁,同時(shí)也需要更大的FIFO,還緩存讀寫(xiě)通道的數(shù)據(jù)。

花了九牛二虎之力,搞定了1280*720@60Hz的AR0135采集,然后裁剪成1024*600后,與1024*600的LCD顯示數(shù)據(jù)仲裁讀寫(xiě)DDR(加入讀寫(xiě)仲裁,且讀數(shù)據(jù)優(yōu)先,),最后得到的效果是這樣的:

這里,我還是不解,易靈思的DDR控制器,如果是買(mǎi)的,那Synopsys應(yīng)該是標(biāo)準(zhǔn)的AXI;或者如果是買(mǎi)的DDR PHY+自研的控制器,那應(yīng)該至少遵循標(biāo)準(zhǔn),為什么會(huì)出一個(gè)閹割版本的AXI接口呢?
百思不得其解,但這也無(wú)法阻礙我們前進(jìn)。在不久的將來(lái),我將寫(xiě)基于易靈思FPGA的MIPI相機(jī)采集顯示開(kāi)發(fā)詳解。
往期精選?
?
?

FPGA技術(shù)江湖廣發(fā)江湖帖
無(wú)廣告純凈模式,給技術(shù)交流一片凈土,從初學(xué)小白到行業(yè)精英業(yè)界大佬等,從軍工領(lǐng)域到民用企業(yè)等,從通信、圖像處理到人工智能等各個(gè)方向應(yīng)有盡有,QQ微信雙選,F(xiàn)PGA技術(shù)江湖打造最純凈最專(zhuān)業(yè)的技術(shù)交流學(xué)習(xí)平臺(tái)。
FPGA技術(shù)江湖微信交流群

加群主微信,備注姓名+公司/學(xué)校+崗位/專(zhuān)業(yè)進(jìn)群
FPGA技術(shù)江湖QQ交流群

備注姓名+公司/學(xué)校+崗位/專(zhuān)業(yè)進(jìn)群
