高 聰,陳福深,王德勝,劉海洋,劉 怡,劉桂芬
(1.電子科技大學,四川 成都 610054;2.西南技術物理研究所,四川 成都 610041)
自動目標識別、跟蹤技術應用越來越廣泛,對此技術的研究也越來越成熟,并取得了一定的成果。如何判斷識別、跟蹤的效果并便于進行操作,離不開顯示技術。提高存儲容量、降低成本和便于控制成為顯示技術追求的目標。在顯示系統中,由于動態隨機存取存儲器(SDRAM)具有容量大、價格便宜以及訪問速度快的優點,現已逐漸取代速率較慢的靜態隨機存取存儲器(SRAM)而成為顯示控制系統中的主流高速存儲器。
基于FPGA的圖像采集與預處理系統,有很強的動態配置靈活性,具有處理速度快、處理系統通用性與可移植性強的明顯優勢,正得到人們日益廣泛的重視與研究。本文以FPGA為核心,配合DSP,ADV7179,SDRAM等芯片設計而成,其中SDRAM的芯片類型為MT48LC16MA2TG。它的容量為4×8192×512×16 bit,具有功耗低、容量大、集成度高、速度快等優點。
整個系統的結構框圖如圖1所示。

圖1 系統結構圖
在如圖1所示的系統中,從圖像數據模塊發送的數據開始,收到的圖像數據一路是經過Linkport模塊轉化為DSP所要接收的時序模式,而另外一路則是通過串并轉換進行接收,以SRAM_A作為緩存存入SDRAM中,通過乒乓存儲的方式進行地址的轉換,再經過SRAM_B作為緩存,放入ADV7179時序上。這期間需要SDRAM控制器進行完成。由于ADV7179所輸入的是8 bit的圖像數據,顯然需要將接收到的16 bit數據壓縮成8 bit數據,此時DSP把當前圖像像素的最值(最大值最小值)與計算的目標位置分別送入數據壓縮模塊進行數據壓縮和字符疊加模塊進行字符疊加,最后將處理后的數據送入ADV7179芯片,然后送入顯示器進行圖像顯示。
該模塊所發送的為黑白圖像,共包含3種模式:模式1為280(列)×480(行)×16 bit;模式2為390×480×16 bit;模式3為400×480×16 bit。所發送的信號包括場信號、行信號與數據信號。其中對于模式1和模式3,每場都是包含480行數據,而不同的是每行信號對于模式1包含280×16 bit數據,模式3為400×16 bit數據,每行數據分別對應原始圖像的一列數據。而對于模式2,則是每場數據大概1 s,也就是場信號正負跳變的時間間隔為1 s,如果要進行顯示,根據ADV7179的時序特點,每場數據大約要截取390行去顯示,這樣1 s內大概包含有50場數據。這樣如果直接將接收的數據進行輸出顯示,會發現所顯示的視頻對于原視頻圖像有90°的旋轉。而對于每個像素點(16 bit),用 L1D0,L1D1,L1D2 和 L1D3 同時傳輸,傳輸時鐘為108 MHz,那么對于一個像素點,其傳輸的速率時鐘為27 MHz。時序如圖2所示。

圖2 原始輸入數據的時序關系
此模塊的作用是將所接收的數據時序,轉化為DSP所接收的數據時序。DSP所接收的信號主要有時鐘信號、數據信號與中斷信號。中斷信號每場發一次,它主要作用是告訴DSP要接收新的一場數據和提示DSP向FPGA在新的一場中重新發送控制指令,比如說顯示模式、目標位置等。DSP所接收的時鐘為54 MHz,且雙沿出數,這樣傳輸的像素速率仍為27 Mbit/s。數據傳輸特點如圖3所示。

圖3 DSP所接收數據的時序關系
此模塊作用主要有3個:1)給出當前要顯示的圖像模式;2)統計當前接收圖像像素的最值(包括最大值與最小值),并且給出壓縮需要的最大值、最小值;3)通過識別、跟蹤算法,計算當前圖像的目標位置。
此模塊將具有圖2時序特點的 L1D0,L1D1,L1D2,L1D3信號,經過串并轉換,得到并行的16 bit像素值,并且產生每個上升沿對應一個像素的像素時鐘,顯然像素時鐘為27 MHz(108 MHz/4)。
此模塊包含SDRAM兵乓存儲前SRAM_A緩存模塊和存儲后SRAM_B緩存模塊。對于SRAM_A緩存模塊,主要是解決接收像素的時鐘頻率與SDRAM寫入數據的時鐘頻率不協調的問題。根據串并轉換模塊,很顯然接收的數據速率是27 Mbit/s,而SDRAM寫入數據時鐘為12.5 MHz(100 MHz/8)。SRAM_A實現步驟是:當所接收的行信號為高電平時,將輸入的數據寫入SRAM中,當行信號為低電平時,控制SDRAM進行寫入操作,將SRAM_A的數據寫入SDRAM中(見圖4)。顯然對于一行數據的寫入SDRAM時間為上一個行信號的下降沿到下一個行信號的下降沿,兩者的時間間隔為行信號的周期,足夠SDRAM完全把所接收的上一行數據寫入 SDRAM中,所以SDRAM_A所需的空間為所接收到的一行數據量。對于SRAM_B緩存模塊,主要是解決SDRAM讀出的數據速率與送入ADV7179顯示時序的不匹配問題。SDRAM讀出的數據時鐘為11.11 MHz,而送入顯示的時鐘頻率為13.5 MHz(ADV7179對于彩色圖像顯示為27 MHz,對于黑白圖像顯示等效時鐘為13.5 MHz)。SRAM_B模塊采用的是在要顯示的前一行寫入SRAM_B,而在下一行所需要顯示的時序位置進行讀出(見圖5)。顯然,SRAM_B需要的內存為兩行顯示的數據量。


在對圖4與圖5的讀寫時鐘(clock_a為寫時鐘,clock_b為讀時鐘)觀察時,明顯可以看到讀寫時鐘頻率不同。從圖4中可以看到寫操作已結束,讀操作開始,其中寫操作在寫時鐘的上升沿開始寫入。而對于圖5,可以看到讀寫操作可以同時進行,但是寫入的是上一行要顯示的數據,而讀出的是下一行要顯示的數據。由于具有同時性,所以緩存需要兩行數據量,實現SRAM_B內存地址交替進行。
在圖像處理系統中,輸入到FPGA數據的速度和FPGA處理的速度經常不一致或者對圖像做一些旋轉、變換等操作時,就必須對處理數據做一定的緩存,保證數據處理的高速進行。SDRAM控制器與外部接口之間的示意圖如圖6所示。

圖6 SDRAM控制器接口示意圖
SDRAM控制模塊主要包括SDRAM控制器與相應配置模塊。其中SDRAM控制器主要由初始化狀態機與讀寫狀態機組成,狀態轉換關系如圖7所示。

圖7 控制器狀態轉換圖
初始化包括上電、預充電、兩次自刷新以及設置模式寄存器進入空閑狀態。到達空閑狀態時,初始化結束標志信號sys_INIT_DONE由低拉高。當信號sys_INIT_DONE為高時,說明初始化已經完成。但初始化完成并不能代表初始化成功,必須要根據芯片資料,正確設置各參數。這里由于時鐘頻率為100 MHz(tCLK=10 μs),而對于MT48LC 16M16(-75)的芯片,tMRD(模式寄存器下載時間)=2 × tCLK,tRP(預充電周期)=20 μs,tRFC(自刷新周期)=66 μs,tRCD(從激活到讀寫時間)=20 μs,tWR(寫回時間)=17 μs,tDAL(操作結果延時時間)=tWR+tRP=37 μs。
讀狀態轉換:首先根據sys_CYC_END信號判斷上個操作是否結束,若結束sys_CYC_END為高時,拉低sys_ADSn,狀態機從IDLE狀態進入ACT狀態,再將sys_R_Wn置高,讀地址(包括列地址、行地址和bank地址)放入總線,狀態機進入Read A Burst狀態,經過CL和自動預充電時間后,狀態機對進入IDLE狀態,這是sys_CYC_END會重新拉高代表當前讀狀態循環結束,以便進行下步操作。
寫狀態轉換:同樣首先根據sys_CYC_END信號判斷上個操作是否結束,若結束sys_CYC_END為高時,拉低sys_ADSn,狀態機從IDLE狀態進入ACT狀態,再將sys_R_Wn置低,寫地址(包括列地址,行地址,bank地址)放入總線,狀態機進入Write A Burst狀態,經過tWR(數據才會寫到SDRAM存儲空間),后再過預充電tPRE時間,回到IDLE狀態,同樣sys_CYC_END會重新拉高代表當前讀狀態循環結束,以便進行下步操作。
刷新:一般SDRAM對每個存儲器的充放電周期為64 ms,這就代表對于一個存儲器,若中間沒有進行操作時,想保留存儲器所存儲的值,必須進行刷新。預充電其實也是對存儲器的刷新,只不過它是對固定行的刷新,并且時間是隨機的。如果進行刷新,就必須在64 ms內,對所有存儲單元進行刷新。這需要一個自刷新計數器。可以假設要對N行進行刷新,這時刷新的周期是T=64 ms/N,每到T時間,可以發一個刷新請求,對某一行進行刷新,此時地址并不需要給出,它里面有個刷新地址計數器,每次刷新后地址會加1。由于在刷新過程中不能做任何操作,也就是說在發送刷新請求后必須要等到刷新時間結束,才能做其他的操作。從圖8寄存器變量iState的變化中,可以看到初始化狀態機通過控制CS,RAS,CAS,WE,CKE這5個信號,完成了預充電、兩次自刷新、模式寄存器設置等操作。iState為9時,初始化完成接著進入寫狀態。

圖8 初始化狀態機狀態轉換圖(截圖)
從圖9中可以看到,由sys_R_Wn_sdramA為低電平,SDRAM_A處于寫操作,每個寫操作結束后sys_CYS_END_A出現一個上升沿,sys_CYS_END_A會作為SRAM_A的讀時鐘,使SRAM_A讀出的數據q_b放入SDRAM_A的數據線SDRAMA_DQ上,進入下一個寫操作。而sys_R_Wn_sdramB為高電平,則SDRAM_B處于讀操作,同樣每個讀操作結束后sys_CYS_END_B出現一個上升沿,sys_CYS_END_B會作為SRAM_B的寫時鐘信號,將從SDRAM_B中讀出的數據SDRAMB_DQ放入SRAM_B的輸入數據信號data_a上,使SRAM_B進入寫操作。另外還可以觀察到對于寫操作時行地址隨著行信號的變化而改變,而列地址是隨著像素時鐘的改變而變化,相反對于讀操作時列地址隨著行信號的變化而改變,而行地址是隨著像素時鐘的改變而變化,實現了圖像的90°旋轉。

圖9 SDRAM_A和SDRAM_B數據輸入輸出圖(截圖)
電視行場掃描,是通過控制電子束在水平方向從左到右和垂直方向從上到下有規律運動形成的光柵。水平方向的掃描叫行掃描,垂直方向的掃描叫場掃描,合稱“行場掃描”。對于掃描包括消隱、正程、同步信號。消隱信號,時間約12 μs,電平為75%,對應于顯像管熒光屏上電子束從右向左的行掃描逆程,它的作用是消除行逆程期間的回掃線。正程信號,時間約52 μs,其電平處于白色電平與黑色電平之間,對應于顯像管熒光屏上電子束從左向右的掃描時間。視頻信號電平越高圖像越暗,電平越低圖像越亮。同步信號時間約4.7 μs,其電平為100%,脈沖為160 μs。它的作用是使接收機中的場掃描電流與發送端的場掃描電流的頻率和相位一致。
隔行掃描主要應用于電視信號的發送與接收中。它的特點是把25 f/s(幀/秒)的畫面用50 f/s的方法來消除閃爍感,即一面傳送兩次,第一次掃描奇數行,第二次掃描偶數行,因而稱為隔行掃描。采用這一制式的缺點是畫面清晰度稍差,且有輕微的閃爍感。文章所用的ADV7179_HS對應于行掃描信號,高電平代表正程掃描,低電平代表消隱期間。ADV7179_VS對應于場掃描信號,高電平代表場正程期間,低電平代表場消隱期間,下面不再重述。ADV7179_P表示像素點電平高低,值越大代表屏幕上的點越亮,這些信號最終都會通過ADV7179轉化為顯示器所需要的復合模擬信號輸出。其功能實現如下:通過輸入的場信號和13.5 MHz時鐘,產生ADV7179時序。先將20 ms的場信號,轉變為40 ms的場信號,40 ms場信號到時用13.5 MHz時鐘進行計數,當計數結果為864時,行計數加1,在40 ms內不斷重復此過程,分別得到pcount(列計數)和hcount(行計數),再按照圖10時序圖進行設置,即對于行信號ADV7179_HS,90(數值可以稍微小點,數值太大圖像會發生抖動)≤pcount≤809(數值可以稍微大點)時取高,其余取低。FS_VDS7179中,1≤hcount≤312時取低,其余取高。時間關系中,864×T1(13.5 MHz)=64 μs(1行時間),625× T2=40 ms(兩場時間)。屏幕顯示720(列)×576(行)分別對應信號HS_VDS7179和FS_VDS7179。掃描方式為先掃奇場后掃偶場,從奇場到偶場掃描時,低電平時間一定要控制得盡量準確,若兩段之間的低電平較長時,會造成圖像抖動,甚者會使圖像上下分離(奇偶場明顯疊加錯位)。

圖10 配置ADV7179信號采樣圖(截圖)
此模塊的作用主要是根據接收DSP所發送當前圖像像素的最大值、最小值,把16 bit圖像數據壓縮成8 bit圖像數據。壓縮公式如

字符疊加,則是接收DSP所發送目標在當前圖像的位置,在目標位置附近將矩形窗疊加到目標位置周圍,以便人眼觀察。圖10為配置ADV7179信號的采樣圖,從圖上可以看到ADV7179_P是從pcount為97時才開始有數據,與上文設置90≤pcount≤809不符,原因是經過了數據壓縮模塊中的乘法器與除法器的延時。對此,可以將行信號做相應延時,就能夠得到正確的顯示圖像。
圖11是跟蹤模式1圖像大小280(列)×480(行)的視頻輸入輸出圖,可以看到顯示器實時顯示的圖像基本上能夠清晰地反映出原始輸入的場景信息,DSP通過Linkport模塊準確接收了FPGA所發的實時圖像信息,并通過識別匹配算法,實時正確地給出了要識別物的位置信息,FPGA在兩塊SDRAM的配合下進行了準確的顯示。
通過設計一種簡易的SDRAM控制器,利用SDRAM的乒乓存儲結構,在DSP配合和配置ADV7179的時序下,實現了一種針對掃描、跟蹤模式下對280×480,390×480,400×480,560×480的實時視頻顯示。這種低成本、多模式下的顯示系統,不但給人機交互操作帶來很大的便利,而且在軍事上具有一定的應用潛力。文章介紹了各個模塊的時序特點與接口信號之間的連結關系,具有操作簡單、通用性好、便于移植等特點。

圖11 視頻輸入輸出圖
高速、海量存儲器是存儲器的發展方向。SDRAM、專用的 SGRAM(同步圖像 RAM)、DDR SDRAM、QDR SDRAM等存儲器給人們提供了更多的選擇,然而速度越快,操作相對越復雜,成本越高。由于本文設計主要是針對低分辨力的顯示方式,這種簡易的SDRAM控制器能夠非常好地適應視頻實時顯示,不失為一種好的選擇。
[1]WAKERLY J F.數字設計原理與實踐[M].北京:機械工業出版社,2003.
[2]雷明,馬游春.基于FPGA的多通道圖像采集存儲系統設計[J].通信技術,2010,43(4):204-207.
[3]蘇海冰,吳欽章.用SDRAM在高速數據采集和存儲系統中實現海量緩存[J].光學精密工程,2002,10(5):462-465.
[4]卞九輝.基于DSP+FPGA的視頻圖像處理[D].哈爾濱:哈爾濱工程大學,2009.
[5]王衛東.電視原理[M].重慶:重慶大學出版社,2012.