南京郵電大學 王 翔
圖像傳感器按照接口數據傳輸方式可分為并行接口圖像傳感器和串行接口圖像傳感器,LVDS接口的圖像傳感器是串行接口圖像傳感器的一種,可以提供很高的幀率和抗干擾傳輸能力。圖像傳感器的邏輯接口,負責接收傳輸過來的原始圖像數據,并進行解碼、時序同步等操作,輸出相應分辨率的圖像數據,供后續處理或者顯示。字對齊操作是指在高速的LVDS串行數據中找到正確的起始采樣點,它是將LVDS高速串行數據恢復成低速并行數據的重要步驟,也是后續數據處理的前提條件。針對LVDS接口的Python300圖像傳感器邏輯接口設計,提出一種自動對齊算法,能夠自動尋找LVDS數據中的同步碼,完成字節對齊,恢復出正確的數據。仿真并且在ZYNQ平臺上實現自動對齊算法和接口邏輯,實驗表明,自動對齊算法能夠更快速準確地完成LVDS數據的字對齊,CRC校檢無誤,并且通過后續同步通道解碼、重映射等模塊,能夠產生正確視頻格式數據,圖像顯示正常。
引言:機器視覺的不斷成熟與發展,使得其應用面越來越廣泛。圖像采集部分是一個完整可靠機器視覺系統的入口部分,也是關鍵部分(熊曉薇.基于FPGA的視頻圖像處理的研究與實現[D].河北大學,2010)。圖像采集部分包含圖像傳感器,以及連接圖像傳感器的接口邏輯部分。圖像傳感器負責圖像的成像,以及原始圖像輸出(李守政,湯斌,歐紅師,等.一種基于FPGA的CCD圖像傳感器驅動系統設計[J].國外電子測量技術,2014(1):80-84;祝長鋒,肖鐵軍.基于FPGA的視頻圖像采集系統的設計[J].計算機工程與設計,2008,29(17):4404-4407)。很多情況下,原始圖像數據,如RAW格式圖像,并不能夠直接顯示,也不能進行邊緣檢測等后續圖像處理操作,而需要通過邏輯接口部分進行信號轉換、解碼等操作,使之變成常見格式的圖像數據(劉宏,符意德.基于Zynq芯片的圖像處理系統平臺設計[J].計算機與現代化,2015(8):43-47)。
邏輯接口通常有專用電路、單片機/微控制器(MCU)、FPGA等多種實現方式。專用電路速度快但造價高、開發難度大,且適應性窄,當需要更改功能或添加功能時,則需要重新設計電路,制作芯片,不夠靈活。單片機/微控制器處理能力有限,速度與帶寬會是處理高幀率、高分辨率圖像的瓶頸。FPGA設計邏輯接口較為靈活,利用其內部邏輯資源并行處理的優勢,可以實現高帶寬、高分辨率的圖像采集與處理,同時也具有非常大的靈活性,如果需要更改或升級功能,只需要更改代碼,重新綜合實現即可。
常見的圖像傳感器按照圖像數據的輸出方式,可分為并行總線接口傳感器和串行總線接口傳感器。并行總線接口圖像傳感器以并行的方式輸出圖像數據,相同帶寬下時鐘速率要求低。串行總線接口傳感器中,像素數據按照位的形式,依次在總線中傳輸,接收端需要相應處理,將數據恢復成并行形式。
串行數據線可以避免并行數據線在高速信號平行傳輸的線間串擾問題,因此串行數據圖像傳感器可以工作在很高的時鐘頻率。串行接口按照傳輸線可分為單端接口與差分接口,差分接口中每一路信號用一對差分線表示,可以提供更強的抗干擾能力,例如LVDS接口就是典型的差分串行接口。
得益于LVDS接口的高速傳輸特性,因此LVDS圖像傳感器可以提供很高的數據傳輸帶寬,也就提供了很快的傳輸幀率。但相比于并行數據傳輸,LVDS接口數據需要進行字對齊,即找到串并轉換時正確穩定的采樣起始點,才能把高速的串行數據按照特定的位寬恢復出來,供后續模塊處理。對于帶源同步時鐘的LVDS接口,可以直接通過源同步時鐘和配套的解串行模塊完成字對齊操作。而沒有提供源同步時鐘的LVDS接口器件,可以利用同步碼完成字對齊操作。對于這一種方式,通常有兩種方法,第一種是手動對齊,也就是人為的設定相位延遲長度,在LVDS源數據產生之后,通過內部的相位控制模塊,進行相位延遲,等到預設的延時長度到達之后,就將當前位置作為數 據LVDS數據采樣的開始,也就是第一個字的起始位置;第二種方法是使用自動對齊算法,通過該算法,可以自動地在LVDS數據中進行搜索,直至搜索到同步碼,完成字對齊操作。
對于LVDS接口的圖像傳感器,需要設計相匹配的對齊模塊完成正確的字對齊操作,才能保證后續同步通道解碼模塊從原始圖像數據中恢復成幀開始、行開始、圖像數據等信息。這些數據通過CRC校檢無誤后進行重映射,對像素順序重新排列,在按特定分辨率的標準視頻消隱進行同步,輸出圖像幀,傳送到后續模塊(陸佳華,潘祖龍,彭競宇.嵌入式系統軟硬件協同設計實戰指南[M].機械工業出版社2014;李列.FPGA低功耗設計相關技術研究[D].中南大學,2010)。

圖1 邏輯接口整體設計
如圖1所示,整體Python300圖像傳感器邏輯接口由6個部分組成:自動對齊模塊、同步通道解碼模塊、CRC校檢模塊、重映射模塊、fifo模塊、640*480P標準時序產生模塊。
自動對齊模塊完成LVDS入口數據串并轉換操作,自動對齊算法也在該模塊中實現。自動對齊的目的是完成字對齊操作,找到穩定采樣點,從該點進行采樣可以將高速串行信號準確地轉化為并行信號。對于CMOS圖像傳感器Python300,其接口為4路LVDS數據信號加1路LVDS同步信號,這5路信號經過自動對齊模塊成為5路并行信號,送入同步通道解碼模塊。
攝像頭輸出的數據為原始RAW格式數據,其中數據通道與同步通道的數據存在對應關系,同步通道中存在不同的同步碼,每一種同步碼對應數據通道不同的狀態信息,如幀開銷、行開銷、幀開始、行開始、幀結束、行結束、有效像素數據等信息。同步通道解碼就是根據這些同步碼,解析出對應的狀態信息,傳遞給后級模塊。
CRC(循環冗余校檢)校檢模塊用以校檢攝像頭數據的正確性,對于每一路數據通道,該模塊都進行CRC校檢,并輸出校檢結果。重映射模塊將四路數據通道的順序按照傳感器技術手冊中的要求,重新做調整,使像素數據輸出排列正確,不發生偏斜。
整個的邏輯接口目的是輸出640*480P的視頻格式數據,640*480P時序產生模塊產生標準時序,包括行同步、場同步、有效數據信號。該模塊與重映射模塊通過FIFO連接,并將經過重映射之后調整過順序的像素數據同步到標準640*480P的時序下面。

圖2 自動對齊模塊整體設計
同步碼自動對齊算法的目的在于自動地在高速串行數據流中找到相應的同步碼,并且保證在有效數據中突然出現的,與對齊碼相同,但不是對齊碼的數據,不會使自動對齊算法做出錯誤判斷。
整體的自動對齊模塊設計如圖2所示,輸入數據為LVDS信號,輸出數據為解串行并經過對齊后的并行數據以及相應的對齊狀態。內部實現主要由三個模塊組成:串并轉換/相位控制模塊、同步握手模塊、自動對齊算法狀態機模塊。
串并轉換/相位控制模塊接收LVDS信號,并將差分信號轉換為單端信號,隨之經過IODELAY2和ISERDES2進行相位控制和轉并行輸出。而其中相位控制和ISERDES2的位偏移控制來源于自動對齊算法狀態機。
同步握手模塊溝通串并轉換/相位控制模塊和自動對齊算法狀態機模塊,當自動對齊狀態機需要當前數據的時候,即與同步握手模塊建立握手連接,由同步握手模塊向串并轉換/相位控制模塊申請實時解串行的數據,并傳送給自動對齊算法狀態機。自動對齊狀態機在運行自動對齊算法的時候,會根據當前的數據,得出相位偏移和位偏移控制信息,并傳遞給同步握手模塊,而同步握手模塊則將此信息提供給串并轉換/相位控制模塊。
自動對齊狀態機則負責在高速串行的數據流中尋找同步碼,并且需要剔除干擾情況,并保存搜索到正確同步碼時的相位信息和ISERDES2位偏移信息,并提供給串并轉換/相位控制模塊。
同步握手模塊向串并轉換/相位控制模塊申請數據,而自動對齊狀態機通過握手操作從同步握手模塊中得到數據。握手操作是通過req/ack這一對信號線進行操作并完成握手過程的,當握手完成之后,自動對齊狀態機接收到的數據為有效數據。
自動對齊狀態機通過自動對齊算法在高速的串行數據流中尋找同步碼,在尋找過程當中,會根據情況調整對于串并轉換/相位控制模塊的控制信息,即相位偏移和位偏移控制信號。自動對齊狀態機將這些信號提供給同步握手模塊,而同步握手模塊將信號同步給串并轉換/相位控制模塊。同步握手模塊是溝通自動對齊狀態機和串并轉換/相位控制模塊的橋梁,后兩者工作在不同的時鐘頻率上,利用同步通道握手模塊可以同步兩個時鐘域的數據與控制信號,并且減少這兩個模塊直接相連時的耦合性,有利于綜合器綜合出更加合理的電路與布局。
串并轉換/相位控制模塊是整個自動對齊模塊的入口模塊,它接收輸入的LVDS的數據,并將LVDS數據經過差分轉單端、相位延遲、高速串并轉換轉化為并行數據輸出。
IBUFDS部分將LVDS差分信號轉化為單端信號,接著提供給IODelay2模塊。
IODelay2模塊可以將高速串行數據相對于采樣點做相位控制,具體的操作為相位延遲,它可以對輸入數據做0至31拍的相位延遲,每一拍的長度為5ns。具體的延遲拍數由自動對齊狀態機中自動對齊算法調整得出,并通過同步握手模塊同步提供,其目的主要是保證高速串行數據的采樣點能夠穩定在每比特數據的中間位置,避免采樣點在相鄰比特的邊緣位置,導致亞穩態的產生。
經過IDelay2模塊進行相位延遲后的數據輸入至Iserdes2模塊。該部分可以對于高速的串行信號做串并轉換操作,具體的轉換位寬為1:10,即每一路LVDS信號通過Iserdes2都轉化為位寬為10位的并行信號。
Iserdes2的Bit滑動控制信息由自動對齊狀態機提供,并通過同步握手模塊同步給該部分。
在沒有源同步時鐘的LVDS信號當中,通常會存在有大量的同步碼,以供接收器進行搜索同步,完成自對齊操作。

圖3 自動對齊狀態機的工作流程
自動對齊狀態機的工作流程如圖7所示,沿檢測即數據有效性檢測,在串行數據流中,很可能有長串的低電平,而同步碼不為0,所以這些低電平中并不存在有同步碼,對于自動對齊狀態機來說為無效數據,進行沿檢測即保證自動對齊算法狀態機通過同步握手模塊得到的數據不為0。
當數據不為0的時候,自動對齊狀態機完成沿檢測狀態,進入下一個狀態。LVDS數據為高速串行數據流,在每一路通道中,字數據按照比特流的形式依次傳輸,在進行串并轉換的過程當中,使用與數據速率相對應的時鐘,對于串行數據流進行雙邊沿采樣,得到并行數據。不過這些數據可能出現相位誤差,如下所示,時鐘的上升與下降沿可能位于串行比特流的相鄰比特位置,從而導致不能滿足建立時間和保持時間的要求,引起亞穩態的發生:
因此需要通過相位移位來確保采樣位置不會出現在相鄰比特的交界位置。IODelay2模塊可以進行0到31拍的相位延遲,利用此特性設計如下方法找到穩定采樣點,避免采樣在相鄰比特位邊緣位置,發生亞穩態的情況:
a.設定當前點為起始采樣點;
b.從當前點開始,進行相位延遲,范圍從0至31拍;
c.如果一直延遲到31拍,串并轉換后的數據沒有發生變化,那么更新當前采樣點為原采樣點進行相位延遲31拍的位置;
d.如果串并轉換的數據發生改變了,意味著相位延遲使得采樣點從當前比特偏移到了下一個比特,假如剛剛發生數據改變對應的偏移為n,如果n大于32,那么更新當前采樣點為原采樣點進行相位延遲n/2拍的位置;
e.如果n小于12,那么更新當前采樣點為原采樣點延遲n+(31-n)/2拍的位置;
f.如果n介于12到16之間,那么當前采樣點的位置不發生變化。
對于工業CMOS傳感器Python300,其LVDS同步碼為0x3a6,則在行開銷和幀開銷期間,有大量的同步碼,在確定不會發生亞穩態情況的當前采樣點之后,就可以在數據中搜索同步碼,但此時還不能保證從當前采樣點采樣,串并轉換之后的數據就是同步碼0x3a6,還可能是其循環移位的其他數據。所以在采樣點穩定后,在幀開銷和行開銷間,能夠從高速LVDS串行數據中解出的并行數據中找到0x3a6或者其循環移位數據。
a.待找到0x3a6,則直接進入干擾排除過程;
b.如果找到的是0x3a6的循環移位數據,自動對齊狀態機會產生比特位滑動控制信號,通過同步握手模塊傳遞給串并轉換/相位控制模塊中的Iserdes2部分進行比特位滑動,調整采樣點,直至串并轉換得到的數據為0x3a6,隨后進入干擾排除階段。
之所以要進行干擾排除,是因為在有效數據階段,LVDS通道內可能產生和同步碼一致的數據,即0x3a6,為了防止這些數據讓自動對齊狀態機發生誤判,則需要排除這些偶然情況,以免干擾對齊結果。
穩定性檢測部分中,其第一步是數據不變性檢測:因為對于工業CMOS傳感器Python300而言,每一幀前的幀開銷和每一行前的行開銷中會存在有一長串連續的同步碼。所以在之前步驟搜索到了同步碼型0x3a6之后,其后續的數據依然會是同步碼型0x3a6,也就保證了有效像素數據中,偶然出現的,與同步碼型相同的孤立數據不會影響對齊結果。如果之后的數據依然是同步碼型0x3a6,那么通過了數據不變性檢測;
第二步是1比特滑動檢測:該步驟是進一步確定同步碼型的穩定性,即通過Iserdes2使采樣點發生移位,串并轉換得到的數據也會發生比特偏移,在同步通道中,同步碼連續出現,當正確采樣點左移一位,則串并轉換結果為同步碼循環左移一位數據;
第三步是2比特滑動檢測:與第二步類似,該步驟是最終確定當前與同步碼型相同的數據就是同步碼,即通過Iserdes2是采樣點左移2個比特,那么串并轉換得到的數據應該是同步碼循環左移2比特的數據。
如果這三個步驟完成,那么穩定性檢測部分結束,可以認定,同步碼型搜索完成,當前的采樣點就是所需要的對齊起點,自動對齊過程也隨之完成。
為了驗證自動對齊算法的有效性以及整體邏輯接口的功能,在FPGA+ARM架構的ZYNQ平臺上設計自動對齊算法以及邏輯接口。經過仿真、綜合、添加約束、實現之后,使用在線邏輯分析儀(ILA)上板調試,工業CMOS圖像傳感器Python300傳輸數據為4路LVDS的RAW格式圖像,經過自動對齊算法模塊經過設計的步驟,自動在數據當中搜索同步碼型,并且進行相位控制和比特位滑動控制,最終找到穩定采樣點。
設計的邏輯接口工作在6.3MHz時鐘頻率下,如表1所示,通過實驗得到幀開銷長度為793個時鐘周期數,而尋找到同步采樣點需要619個時鐘周期,可以在第一幀圖像開始前完成對齊。

表1 自動對齊算法的時鐘耗費
在穩定采樣點處進行采樣,得到的并行數據為Python300的有效幀數據,與官方提供的幀結構一致,不會發生相位偏移、錯位等情況,后續經過同步通道解碼模塊可以按照幀結構對于數據進行解碼,恢復出有效像素數據和行場同步信息,再經過重映射模塊將4路信號整合成一路,并用標準的640*480P的時序產生模塊進行同步,就可以產生視頻流數據,輸出至顯示器上可以看到穩定清晰的圖像,表明自動對齊算法運行有效、整體邏輯接口也工作正常。

圖4 原始圖像數據經邏輯接口處理得到的清晰圖像
本文提出了一種基于自動對齊算法的Python300圖像傳感器邏輯接口設計,并在ZYNQ平臺上設計了自動對齊算法模塊和整體的邏輯接口。通過實驗,本設計可以很好地找到穩定采樣點,并將LVDS圖像數據進行正確的串并轉換,供后續模塊進行同步解碼和時序同步,并輸出穩定清晰的圖像。本設計對于LVDS接口的攝像頭具有一定通用性,可以自動尋找同步碼型并設置穩定采樣點。另外將設計在ZYNQ平臺中的FPGA上進行了驗證,進一步提高了算法的應用范圍,具有很好的應用前景。