<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 圖像采集壓縮SOC系統在FPGA中的實(shí)現

圖像采集壓縮SOC系統在FPGA中的實(shí)現

作者: 時(shí)間:2007-10-10 來(lái)源:網(wǎng)絡(luò ) 收藏

和處理已經(jīng)成為了現代工業(yè)控制中必不可少的環(huán)節。傳統的方法一般采用的是卡加工控機來(lái)整個(gè)。但隨著(zhù)嵌入式技術(shù)的發(fā)展,芯片的性能大大增強,嵌入式在工業(yè)控制中普及。作為前端的系統此時(shí)就不適宜再以圖像采集卡的形式出現,而應當以更加簡(jiǎn)捷,方便的接口與主系統相連。


本設計使用Alera的了整個(gè)圖像采集系統。整個(gè)系統完成了圖像的采集、和傳輸。系統采用流行的工業(yè)總線(xiàn)CAN做為其傳輸總線(xiàn),不僅接口簡(jiǎn)易,成本低,而且可靠性較高。

系統描述


本設計中圖像采集系統預期的目標是每秒采集2~3幅30萬(wàn)像素(640480)的圖像,后通過(guò)CAN總線(xiàn)進(jìn)行傳輸。按照1:8的比計算,壓縮后每幀數據量大約為0.3Mb,CAN總線(xiàn)峰值傳輸速度是1Mb/s,因此這樣的一個(gè)總體的設計方案是可行的。


根據系統所的功能,決定整個(gè)系統要包括六大模塊,分別是圖像采集及存儲接口、I2C主控制模塊(對SAA7113H進(jìn)行配置)、JPEG編碼器、CAN總線(xiàn)控制器、Wishbone總線(xiàn)和中央控制模塊。圖1為系統的結構框圖。

圖1 系統結構框圖


攝像頭產(chǎn)生的原始模擬圖像數據流首先通過(guò)SAA7113H轉換為數字信號,并攜帶有一定的同步及控制信息,傳入內部異步FIFO內。圖像采集及存儲接口從異步FIFO讀取數據并分析,提取所需要的保存至外部SRAM中,當存滿(mǎn)一幀數據時(shí),便可以進(jìn)行壓縮了。當JPEG編碼模塊壓縮好數據后,便等待CAN總線(xiàn)進(jìn)行傳輸,最后直至整幀數據處理完畢。


整個(gè)系統的實(shí)現大約是60~100萬(wàn)門(mén)左右,因此可以采用Altera CycloneII系列中器件的EP2C20,它擁有2萬(wàn)個(gè)LE,24萬(wàn)左右的存儲單元和52個(gè)乘加單元。系統Fitter之后的結果如表1所示,占用了芯片63%的邏輯資源和12%存儲資源。在這其中,JPEG編碼模塊以及JPEG模塊與Wishbone總線(xiàn)的接口占用了絕大多數部分資源??梢钥闯?,使用EP2C20實(shí)現本文所描述的系統還是非常富余的。

圖2 PCB調試樣板


圖2為最后制成的樣板,這塊樣板上還包括了一些便于調試和其他研發(fā)目的的額外部件,真正產(chǎn)品的PCB板將會(huì )更加小巧。

視頻信號采集及存儲接口


本設計采用Phillips的SAA7113H芯片做模擬視頻信號的采集。它的功能非常強大,最多可同時(shí)采集4路CVBS格式的視頻數據。它通過(guò)VPO口輸出數據,并支持多種視頻格式輸出,同時(shí)在輸出數據流中包含同步信息和場(chǎng)信息,接口比較簡(jiǎn)單。


VPO的數據輸出與27M時(shí)鐘同步的,這與JPEG encoder采用30M內部系統時(shí)鐘處于兩個(gè)時(shí)鐘域。因此,使用異步FIFO進(jìn)行跨時(shí)鐘域的數據傳遞。


數據采集以后便是對其進(jìn)行識別和存儲。從SAA7113H傳出數據的最小單位是一個(gè)掃描行,以0xFF 0x00 0x00為標識,并且在行首尾分別有SAV(start of active video)和EAV(end of active video)字段。SAV和EAV中含有該掃描行是否是有效行,屬于第幾場(chǎng)這樣的信息。JPEG編碼器需要的數據是一整幅圖像,即一個(gè)場(chǎng)對。因此對采集的圖像,需要使用幀解碼(Frame Decoder)子模塊處理原始數據流中的同步信息,垂直掃描消隱信號。


本設計的存儲器件使用了一塊4Mb的SRAM,正好可以保存一副未經(jīng)壓縮的30萬(wàn)像素的圖片。對SRAM存儲和讀取地址的產(chǎn)生應該完全采用不同的方式,在本設計中分別采用兩個(gè)子模塊分別負責這兩項功能。Frame Decoder輸出的數據在存入SRAM時(shí)是按照行的順序逐個(gè)存入,而JPEG encoder在讀取的時(shí)候則應該是按照對像素處理順序――以88塊的方式讀出。整個(gè)讀寫(xiě)由控制狀態(tài)機(Read Write Control)來(lái)進(jìn)行統一控制。視頻采集及存儲接口的結構圖如圖3所示。

圖3 視頻采集及存儲接口模塊

JPEG壓縮模塊


JPEG壓縮標準從1993年提出至今已有14年了,從各個(gè)方面來(lái)看都已經(jīng)非常成熟,并且被廣泛的使用于各個(gè)領(lǐng)域,這也正是本設計采用JPEG壓縮模式的原因之一。JPEG壓縮的過(guò)程包括了88 DCT(離散余弦變換)、Zig-Zag掃描、量化、游程編碼和熵編碼(使用Huffman編碼)五個(gè)主要的過(guò)程。本設計中的JPEG壓縮模塊除了包括這五大部分之外還要有字節分包處理、字節碼處理(主要是插入一些特殊的碼字)、FIFO、wishbone總線(xiàn)接口和配置寄存器等一些功能模塊來(lái)協(xié)調整個(gè)系統的運作。該模塊的結構如圖4所示。

圖4 JPEG壓縮模塊結構圖


Huffman編碼出來(lái)的數據是變長(cháng)碼,它包括了兩部分,即碼字本身和碼字長(cháng)度。在Byte Pack模塊中,根據碼字的長(cháng)度對碼字進(jìn)行適當的移位,然后整理成8位長(cháng)度,送入Byte Code Insetion模塊。該模塊根據碼字的實(shí)際值進(jìn)行判斷,如果當前碼字的值是FF,便在其后插入0x00,如果當前碼字是本幀最后一個(gè)碼字的話(huà),便在其后插入0xFFD9(0xFFD9是JPEG圖像標準中的結束標志)以標示該幀的完結。這樣在接收端中就可以用0xFFD9對數據流中每一幀壓縮的數據進(jìn)行分割。最后處理好的字節流將送入FIFO中,以等待CAN總線(xiàn)空閑。


另外,還有Control Regs模塊,可以使用總控制器通過(guò)Wishbone Bus對其中的功能寄存器進(jìn)行修改,進(jìn)而操控整個(gè)JPEG編碼的過(guò)程。這個(gè)操作必不可少,只有使JPEG編碼具有可控性,才能協(xié)調采集、壓縮、傳輸等環(huán)節的順利進(jìn)行。

系統控制模塊


本系統的大部分功能都采用硬件進(jìn)行實(shí)現,因此,軟件的控制流程就變的非常簡(jiǎn)單,僅僅包括了對各個(gè)模塊進(jìn)行初始化配置和控制協(xié)調各個(gè)模塊。本設計中的控制模塊采用了微碼狀態(tài)機替代了微處理器核,不僅可以節約邏輯成本(包括微碼在內,僅有216個(gè)LE),還提高了運行效率。微碼狀態(tài)機的實(shí)現是根據系統的具體要求,對處理器的體系結構進(jìn)行簡(jiǎn)化,本設計所實(shí)現的微碼狀態(tài)機在功能上相當于一個(gè)只有mov和jump指令的處理器。另外,微碼的使用本身就增加了該模塊的靈活性,想修改整個(gè)系統配置或者工作的過(guò)程的話(huà)并不需要修改模塊的代碼,而只是修改微碼便可以,大大增加了可重用性。整個(gè)系統的控制流程如圖5所示。

圖5 系統工作流程


本設計的系統圖像采集壓縮速度都要大于CAN總線(xiàn)的傳輸速度,因此只有第一次向CAN總線(xiàn)發(fā)送數據時(shí)需要判斷壓縮的數據是否已經(jīng)達到8字節,以后每次當CAN傳輸完上一次壓縮數據時(shí),JPEG encoder已經(jīng)又一次壓縮好8字節數據,等待傳輸了,因此就不必每次都進(jìn)行判斷。

Wishbone總線(xiàn)與開(kāi)源IP


系統中各模塊的互連采用的是比較簡(jiǎn)單的Wishbone總線(xiàn)。Wishbone總線(xiàn)標準是開(kāi)放式總線(xiàn),沒(méi)有任何專(zhuān)利費用,它現在由opencore維護,并且在opencore的網(wǎng)站上有很多由專(zhuān)人維護并且與Wishbone兼容的開(kāi)源IP。本設計中的I2C master和CAN controller就是從opencore上免費獲得的開(kāi)源IP。合理的使用這些軟核,并將其集成于自己的系統中將大大加快整個(gè)設計的進(jìn)程和產(chǎn)品的成本。


在系統中存在1個(gè)主設備(master)和3個(gè)從設備(slave),為每個(gè)slave分配好固定的地址,因此Wishbone總線(xiàn)模塊所做的事情僅僅是進(jìn)行地址譯碼。

系統驗證與仿真


雖然本設計所構建的系統是基于的,但是在上板調試前首先在PC上建立整個(gè)系統的仿真環(huán)境,對系統進(jìn)行充分的驗證,這樣可大大的加速整個(gè)項目的進(jìn)度。本設計中為系統建立的仿真環(huán)境如圖6所示。

圖6 驗證環(huán)境


準備原始數據做為系統圖像源的輸入,并且使用Can Receiver采集系統的輸出,最后和軟件模型生成的JPEG壓縮數據進(jìn)行比對,對錯誤進(jìn)行定位,另外也可在系統中設置監控點(diǎn),輸出數據流,這樣便可知道具體在哪一個(gè)環(huán)節中出現了錯誤。圖7為運行testbench產(chǎn)生的接收數據波形文件。

圖7 數據波形

總結


在本設計中,筆者使用FPGA構建了一個(gè)系統,完成了圖像的采集、壓縮和傳輸功能,很多地方還可以進(jìn)一步的優(yōu)化。本設計的重點(diǎn)在于在FPGA上應用了的設計方法,并實(shí)現了一個(gè)比較簡(jiǎn)單的SOC系統。這樣做繞過(guò)了ASIC設計的高復雜性,高風(fēng)險性和高投入,從而實(shí)現了簡(jiǎn)化最終PCB系統,降低硬件成本的目的,并且對系統的實(shí)現更加靈活,能按照客戶(hù)的愿望定制,修改系統的功能。另外在整個(gè)設計過(guò)程中,盡量的應用可重用的IP軟核,最大限度的加快了開(kāi)發(fā)進(jìn)度和降低了開(kāi)發(fā)費用和成本。


現在,FPGA廠(chǎng)商已推出65nm最新工藝的器件,使集成度進(jìn)一步提高,而功耗和成本又大幅度降低。在這樣的環(huán)境下,相信在不久的將來(lái)FPGA會(huì )不僅僅只作為協(xié)處理器的配角出現,而是更多的出現以FPGA實(shí)現的SOC系統。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>