1. 程式人生 > >基於FPGA的cmos sensor高速影象採集

基於FPGA的cmos sensor高速影象採集

 我們選用的cmos sensor是安森美半導體公司的python 5000,價格較貴,但是幀率相對較高,能夠提供較高的精度,全景時能出來2592*[email protected]的視訊影象,可以通過降低  解析度     進一步提高幀率。驅動該攝像頭的工作主要分為兩部分,暫存器配置和LVDS解串。

 1,暫存器配置

          PFGA需要給cmos sensor供應時鐘和配置暫存器。有兩種方式提供時鐘,一種是提供72M的單端時鐘,再經過sensor裡PLL倍頻後產生288M;第二種是直接提供288M的單端時鐘; 兩種方式效果一樣,我們提供的72M單端時鐘。

FPGA通過spi介面去配置cmos sensor的暫存器,解析度,幀率以及ROI都可以通過暫存器配置已達到相應的需求。參照安森美        官網提供的文件 NOIP1SN5000A的Figure 20的讀寫時序即可,  需要注意是SPI時鐘應小於10M,  需要配置的暫存器有100多個,     配成的暫存器列表由FAE提供了。

 

   

    配置通常是在上電後立即完成,有一下幾種方式可以檢驗是否將資料成功寫到暫存器中。

 a,  上電後開始計數,記到5--10s後狀態機從IDLE狀態跳轉到configure狀態,即可根據相應的觸發條件在mosi上抓出相應的資料;          配置完成後可以跳到讀狀態,如果配置成功,即可在miso上抓到相應的資料。

  b. 配置完成後讀出相應的暫存器,並把讀出來的資料存到相應的暫存器中,用Chipscope scope抓暫存器的值即可。 在做這個驗證      的時候我遇到了兩個問題。 (1)根據時序圖,讀暫存器的值是在下降沿取樣,需要額外用到一個always語句;(2)第二  個問題比較尷尬了,cmos sensor是插在一個插糟裡的,mosi和mosi分別連線在了FPGA的pin的P端和N端。抓資料發現mosi和 mosi兩個訊號相等,(為何相等原因解釋不清楚,可能跟FPGA結構有關)。即最後抓到的值始終等於要寫進去的值,誤導我以 為配置沒問題,而去除錯後面lvds解串的問題了。  偶然發現其實插糟沒插緊,從LVDS傳過來的資料都是錯誤的。 

 

2. LVDS解串

     驅動高速攝像頭的難點是LVDS解串,python5000以LVDS序列的方式傳輸資料到FPGA端,相對於LVDS並行,     解析LVDS序列的資料需要理解bitslip這個訊號,因此難度相對大一些(之前除錯的時候對這個訊號理解不透徹耽誤了較多時間)。10對LVDS差分資料即8data+1sync+1clk以源同步的形式、288M(雙邊沿取樣)的速度傳輸到FPGA,

由於xilinx_fpga時鐘結構的限制,從cmos sensor過來的差分時鐘不能進到兩個selectio中,重寫了selectio這個模組,模組介面如下,把data和sync資料解析出來。

為了滿足時序,在這個模組裡面可以修改data和clk的延遲以滿足建立時間和保持時間,bitslip也是由為重要,為了產生bitslip訊號,單獨用了一個模組。另外發現加不加時序約束語句影響不大。

  配置相應 的測試模式暫存器,參照下圖,解析出來的8data資料和1syn正確。根據sync資訊,可以將視訊資料的行場訊號提取出來。

後面要做的是資料解析和演算法相關的了,部落格會繼續更新。