晏 龍,鄭建宏
(重慶郵電大學移動通信重點實驗室,重慶 400065)
Camera接口控制器用于控制外部攝像頭模組采集數據,接收攝像頭模組傳輸來的數據,按照固定的格式存入FIFO,提供給DMA讀取,同時輸出行開始信號和幀開始信號,供后續模塊同步[1]。
該Camera接口控制器主要提供以下功能:
1)并行接口支持8 bit,RAW格式數據支持10 bit。
2)支持 ITU-R BT656-4、601協議的接口。
3)支持的數據輸入格式有:RGB 5∶6∶5,RGB 5∶5∶5,RGB 4∶4∶4,YUV 4∶2∶2,RAW,JPEG。
4)支持的數據輸出格式有:RGB 5∶6∶5,YUV 4∶2∶2,RAW,JPEG。
5)可配置的水平和垂直分辨力。
6)拍照功能可支持最大800萬(3264×2448)像素,幀速率為15幀的JPEG壓縮數據輸出或7.5幀數據輸出。
7)支持工作模式:CCIR601和CCIR656標準并行傳輸模式。
8)只支持PCLK的上升沿同步,即在Camera Sensor端需配置成在PCLK下降沿輸出,在輸出1幀過程中,不支持對PCLK的省電模式。
9)攝像頭模組的基準時鐘由系統輸出,外圍需要1個GPIO口作為攝像頭模組的片選信號以支持2個攝像頭模組,對于某些類型的攝像頭模組,還需要1個GPIO口作為快門輸出。
該設計支持CCIR601和CCIR656標準接口。簡單地說ITU-R BT.601是“演播室數字電視編碼參數”標準。ITU-R BT.656則是ITU-R BT.601附件A 中的數字接口標準,用于主要數字視頻設備(包括芯片)之間采用27 MHz并口或243 Mbit/s串行接口的數字傳輸接口標準。
1.1.1 CCIR601 接口模式
CCIR601是并行數據,行場同步有單獨輸出。在采用CCIR601接口方式中,可使用幀信號的電平觸發和邊沿觸發,以滿足不同傳感器的接口需求。每1幀的數據開始由幀同步來控制。即上一幀數據傳完以后,只有等下一個幀同步脈沖到來,才開始。幀同步和行同步的持續時間由垂直幀同步寬度和水平幀同步寬度分別確定。
該接口方式支持幀的2種觸發方式:電平觸發和邊沿觸發,如圖1所示。
1.1.2 CCIR656 接口模式
CCIR656輸出的是串行數據,行場同步信號嵌入在數據流中。

圖2描述了偶數幀的有效行開始和結束同步信號。其中,0xFF 00009D是EAV信號(End of Active Video);0xFF 000080是SAV信號(Start of Active Video);奇數幀的同步信號如下表所述。有效信號在SAV到EAV之間傳輸,EAV到SAV之間是空白,如表1所示。

圖2 CCIR656串行傳輸模式

表1 CCIR656同步識別字
該Camera接口可接收以下幾種從攝像頭模組輸入進來的數據格式:JPEG ,RAW,YUV 4∶2∶2,RGB 5∶6∶5,RGB 5∶5∶5,RGB 4∶4∶4。Camera 接口在接收到從攝像頭模組輸入進來的數據后,將數據按照以下固定格式進行存儲,為后續模塊提供以下幾種數據格式∶RGB 5∶6∶5,YUV 4∶2∶2,RAW,JPEG。
該設計給出的是數據在32位讀取方式下的格式,在接口總線位寬為64 bit時,其讀取方式為在32位位寬模式下的并行排列,即雖然位寬為64 bit,但仍然以32位的位寬為基本單位,唯一的區別在于64位時1次讀取的數據是32位時的2倍。
對于輸入RGB格式,輸出通常為RGB565格式,即1個像素由 R[4:0],G[5:0],B[4:0]共16 bit組成,所以每16 bit的像素點按R,G,B依次從高位到低位存放在FIFO的[15:0]中。
對于輸入RAW格式,輸出也為RAW格式,每次輸入10 bit數據,存放在FIFO 的[15:0]中的[9:0]位,然后下一次數據存放在[31:16]中的[25:16]位。
對于輸入YUV422格式,輸出也為YUV422格式,每16 bit 1個像素點,通常按YVYU(每個色差信號為8 bit)依次從高位到低位存放在FIFO的[31:0]中。
對于輸入JPEG格式,每次輸入8 bit數據,按順序存放在 FIFO 的[7:0],[15:8],[23:16],[31:24]中,其輸出也為JPEG格式。
在設計中,將Camera接口控制器作為APB的Slave掛在APB總線上,ARM處理器通過APB總線來訪問和控制該模塊,具體時序詳見 AMBA Bus Specification[2]。Camera接口控制器內部結構如圖3所示。

圖3 Camera控制器內部結構框圖
接口模塊(APB Interface)實現該Camera控制器與ARM處理器的APB總線相連接。通過該模塊,ARM可以對相應控制器寄存器進行配置,從而實現對該模塊和外設的控制,其讀寫時序按照APB總線讀寫時序。
數據接收控制模塊(Data_in_ctrl)接收從攝像頭模組輸入進來的數據,將輸入數據格式轉化為輸出數據格式,并將數據存儲在輸出FIFO中。
數據輸出控制模塊(Data_out_ctrl)將輸出FIFO中的數據按寄存器讀取或者DMA讀取方式送給ARM或圖像處理模塊,并產生幀、行同步信號。
Data_in_ctrl和Data_out_ctrl模塊實現數據格式轉換存儲和輸出,下面將重點介紹這2個模塊。
數據接收控制模塊根據配置寄存器的配置,對輸入數據進行接收,并按固定格式存儲在輸出FIFO中。在開始接收數據以前,必須先配置接口模塊的配置寄存器(CONF)和輸入尺寸控制寄存器(SIZE)。在輸入尺寸控制寄存器(SIZE)中,需對輸入每幀圖片的行數和列數進行配置(最大可支持800萬(3264×2448)像素),需與攝像頭端配置一致。在配置寄存器(CONF)中,需要根據攝像頭所產生的數據格式,配置輸入數據格式,配置格式與攝像頭模組端一致:將接收到的輸入數據格式轉換成對應的輸出數據格式后,存儲到輸出FIFO中;還需配置幀同步信號極性選擇位、行同步信號極性選擇位,即有效電平為低電平還是高電平,同步信號極性配置與攝像頭模組端一致;還需配置同步方式選擇位,即選擇按照CCIR601方式接收還是按照CCIR656方式,同步方式配置與攝像頭模組端一致:對于CCIR601方式,該設計對輸入幀同步信號(cif_fv_i)、行同步信號(cif_lv_i)進行緩存處理后,采其邊沿進行判斷,所以無論是電平觸發還是邊沿觸發的同步信號,該設計都可滿足;對于CCIR656方式,在檢測到幀、行開始或結束的標志位后,再對本幀、行數據進行接收。以上配置只能在幀間間隔的時候變更,即在1幀數據傳輸過程中不允許改變。在上述配置完成后,再配置主控制寄存器(CIF_CTRL),使能該模塊,開始進行數據的接收、格式轉換和存儲。
數據輸出控制模塊包含1個64×64 bit的異步FIFO,cif_pclk_i時鐘域寫,clk時鐘域讀,讀寫采用乒乓操作,將FIFO分成2部分,一塊寫時,另一塊讀,不允許讀寫操作在同一塊上。在FIFO半滿后,發出滿中斷信號(若中斷使能),同時將狀態位和cif_req信號置位,通知外部讀取32×64 bit的數據。狀態寄存器(status)中指示的是每次讀FIFO剩余的個數,當FIFO為空或者狀態寄存器指示個數為0時,停止讀數。若沒有讀完32×64 bit數據,等待另半塊地址空間滿后即會產生數據溢出。
該模塊提供了2種數據傳輸方式:一種是ARM通過APB總線來讀取,另一種是圖像處理模塊通過DMA接口來讀取。這2種傳輸方式可通過配置寄存器(CONF)來配置。在1幀數據內只允許采用1種傳輸方式,只有在1幀數據結束后才可以配置不同的傳輸方式,否則無效。當FIFO中數據半滿時向DMA發出請求。當圖像DMA響應了該請求后,返回dma_ack信號,同時送出的dma_rd信號為低時,每1個clk時鐘向DMA傳送1個64 bit的數據。在最后一次讀數據時,由于1幀數據不能保證恰好能存滿FIFO,所以最后一次尾巴數據可能不會送出滿狀態,此時需要根據幀結束位來判斷讀取最后一次數據。即操作順序為同時查看FIFO滿和幀結束位,只要其中1個為高即可啟動數據讀操作。不論為DMA讀取還是APB總線讀取,最后一次讀取都需要判斷數據是否結束,在JPEG模式下,需要判斷圖像數據結束標志數據(FFD9);在非JPEG模式下,需要對行同步和列同步信號計數。
該模塊產生幀、行同步信號,供后續模塊使用。幀同步信號(cif_sof)為開始從攝像頭模組模組接收到的信號經過異步時鐘后得到,其實際輸出為當幀同步到來時拉高,一直持續到本幀結束且FIFO讀空才結束。而行同步信號(cif_sol)為當外部模塊讀取FIFO中對應的行首數據時,與輸出數據同步,輸出4個時鐘寬度的同步信號。另外在JPEG模式下,沒有給出行同步信號,此時幀同步信號在拉高后,與其他模式相同,其一直持續到本幀結束且FIFO為空時才結束。
在代碼編寫完成后,編寫了testbench模塊對其進行功能性驗;并用VerilogHDL描述了1個攝像頭模型,用來產生輸入數據且輸入數據格式可配;最后編寫1個數據對比模塊,將攝像頭模型產生的數據和Camera接口控制器接收到的數據進行對比,檢驗數據是否一致,功能是否正確。
當滿足APB總線寫時序后,APB總線對模塊內部接口寄存器進行配置,在將輸入數據格式設置為RGB565、同步方式設置為CCIR601方式、高電平有效、DMA傳輸方式的情況下得到的仿真波形如圖4所示。

圖4 Camera接口控制器仿真波形
圖4中,攝像頭產生的數據和該模塊接收處理后的數據一致,中斷的產生和處理也滿足設計要求。
對各種輸入數據格式進行仿真后,利用綜合工具對其綜合。經過對Script腳本約束的設定,將控制器的時序和面積優化,使其工作頻率滿足手機基帶芯片頻率要求。
最后進行FPGA驗證,結果表明該Camera接口控制器在數據傳輸控制中完全符合手機基帶芯片的要求。
該設計提出的Camera接口控制器可以支持最大像素為800 W,支持RGB,YUV,RAW,JPEG等多種輸入格式,并對這些格式的數據進行存儲,且提供多種數據輸出格式以供后續模塊讀取使用。在經過驗證、綜合和FPGA測試后,確保該設計可進行封裝制造,使得該控制器可作為1個成熟的IP核,可以移植到各種含多媒體的ASIC芯片中去,進行拍照或攝像[3-4]。
[1]王秀芳,張昆,桑圣潔.基于ARM的圖像監控系統的開發[J].科學技術與工程,2011,11(14):3313-3317.
[2]AMBA Specification(REV2.0)[EB/OL].[2011-07-20].http://www.ens.ewi.tudelft.nl/Education/courses/et4351/amba.
[3]夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天大學出版社,2004.
[4]韓杰思,沈建京.采用圖像濾波的多特征JPEG盲檢測[J].電子科技大學學報,2011,40(2):255-260.