基于PCI總線的嵌入式實(shí)時圖像處理系統(tǒng)
DSP完成的功能主要是對從FIFO讀入的數(shù)據(jù)進(jìn)行處理,包括依照程序進(jìn)行識別、特征提取以參數(shù)檢測等。當(dāng)視頻頭采集速度為每秒25幀圖像時,它留給DSP處理的時間最多為每幀40ms,如果考慮系統(tǒng)中一定的延時以及處理后圖像的存儲時間,那么DSP處理一幅圖像時間不能超過30ms,按照C6211的處理速度,在30ms內(nèi)可以處理36M條指令。DSP讀出FIFO中的行數(shù)據(jù)并存入SDRAM,一幀圖像有576行,在最后一行時會收到幀中斷,這時SDRAM中的圖像數(shù)據(jù)總共有1440×576=810KB。讓C6211用36M條指令的時間處理810K的數(shù)據(jù)是綽綽有余。
(2) SDRAM存儲器
HY57V651620B是現(xiàn)代公司發(fā)布的128Mb SDRAM,支持分頁尋址,訪問速度為7.5ns,與DSP系統(tǒng)同步工作,但因?yàn)镈SP工作在150MHz,故系統(tǒng)中SDRAM工作在DSP時鐘的一半或者2/3,即75MHz或者100MHz。當(dāng)工作在100MHz時候,SDRAM在時序上需要一些特殊的控制,不是簡單的與DSP同步。SDRAM主要在系統(tǒng)運(yùn)行過程中存儲臨時數(shù)據(jù)和處理結(jié)果。系統(tǒng)中共有256Mb的存儲空間,其消耗情況視啟動程序和圖像處理程序的大小而定。
(3) FLASH存儲器
AM29LV800B是AMD公司發(fā)布的8Mb FLASH芯片,同樣支持分頁尋址,工作在異步方式。啟動程序固化在FLASH芯片中。當(dāng)系統(tǒng)加電啟動時,F(xiàn)LASH中的程序下載到DSP的SDRAM中運(yùn)行。FLASH具有在線重寫入功能,這對系統(tǒng)啟動程序的修改和升級都帶來了很大的方便。
2.2 視頻解碼模塊
本系統(tǒng)視頻A/D采用的是Philips公司的SAA7111A作為視頻解碼芯片,SAA7111A可以提供四路模擬視頻輸入,具有兩個模擬處理通道,支持四路CVBS模擬信號或二路Y/C模擬信號或(2×CVBS和1×Y/C)。SAA7111A對視頻頭輸入的標(biāo)準(zhǔn)PAL格式的模擬圖像信號進(jìn)行A/D轉(zhuǎn)換,然后輸出符合CCIR601建議格式的4:2:2的16位YUV數(shù)據(jù)到FIFO,其中亮度信號Y為8位、色度信號Cr和Cb合為8位數(shù)據(jù)。FIFO采用的是IDT公司的IDT72V215LB芯片,深度為512×18。按照CCIR601標(biāo)準(zhǔn),YUV圖像分辨率為720×576,那么按行輸出時,SAA7111A輸出數(shù)據(jù)流大小為:720×16=1440bit。因?yàn)镈SP通過32位的SBSRAM接口與FIFO通信,故YUV數(shù)據(jù)寫入FIFO時需要在FIFO之間實(shí)現(xiàn)乒乓切換,這時一行720×16的數(shù)據(jù)在兩片F(xiàn)IFO中存儲變?yōu)?60×32。
2.3 PCI通信模塊
PCI(Peripheral Component Interconnect,外圍組件接口)它既可以作為中間層的總線也可以作為周邊總線系統(tǒng)使用。與其他普通總線規(guī)范相對照,PCI總線為高速I/O設(shè)備提供了更好的支持,比如可以很好的支持圖像適配器、網(wǎng)絡(luò)接口控制器、磁盤控制器等。現(xiàn)行的標(biāo)準(zhǔn)允許在33MHz下使用64根數(shù)據(jù)線,傳輸速率可達(dá)2.12Gbps。并且PCI總線支持線性突發(fā)的數(shù)據(jù)傳輸模式,可確保總線不斷滿載數(shù)據(jù),因此能有效利用總線帶寬。另外,PCI總線還具有低延時的隨機(jī)存取特性,對從總線上的主控寄存器到從屬寄存器的寫延時為60ns。
PCI總線規(guī)范吸引人的地方不僅是其高速度,更在于它適應(yīng)了現(xiàn)代I/O設(shè)備對系統(tǒng)的要求,對PCI擴(kuò)展卡及器件能進(jìn)行全自動配置,并且只需很少的接口邏輯就可以實(shí)現(xiàn)并支持其他總線系統(tǒng)。
TMS320C6211的HPI口不支持PCI總線的無縫接口。本系統(tǒng)中采用TI公司的PCI2040來實(shí)現(xiàn)DSP的HPI與PCI總線的連接。DSP處理后的數(shù)據(jù)經(jīng)HPI口輸出到PCI2040進(jìn)行解碼,然后輸出到PCI總線上。其邏輯結(jié)構(gòu)圖如圖3所示。
在本系統(tǒng)中,PCI2040上存在2種電壓:5V和3.3V,其中3.3V是HPI口電壓,而5V是PCI總線電壓。PCI2040在啟動時需要對其PCI總線寄存器和HPI寄存器參數(shù)進(jìn)行預(yù)加載。系統(tǒng)中PCI解碼模塊包括一塊配置ROM--AT24C08A,屬于EEPROM型ROM,便于對配置參數(shù)的修改和升級。當(dāng)系統(tǒng)啟動時,存儲在AT24C08A的數(shù)據(jù)被下載到PCI2040的寄存器中并進(jìn)行配置。
圖中/HINT[3:0]、/HCS[3:0]、HRDY[3:0]、HRST[3:0]分別與4片DSP中的相應(yīng)信號相連,即PCI2040可以同時與4片DSP接口。
3 PCI總線驅(qū)動實(shí)現(xiàn)方法
在系統(tǒng)軟件方面,基于PCI總線的圖像處理系統(tǒng)面臨的難點(diǎn)頗多,其中難度最大的是PCI驅(qū)動問題。
為闡明如何在Windows操作系統(tǒng)下實(shí)現(xiàn)PCI總線的驅(qū)動,還需了解PCI設(shè)備的配置空間系統(tǒng)。PCI設(shè)備有3種物理存儲空間:配置空間、存儲器空間和I/O空間。配置空間是長度為256字節(jié)的一段連續(xù)空間,空間的定義如圖4。在配置空間中只讀空間有設(shè)備標(biāo)識、供應(yīng)商代碼、修改版本、分類代碼以及頭標(biāo)類型。其中供應(yīng)商代碼用來標(biāo)識設(shè)備供應(yīng)商的代碼;設(shè)備標(biāo)識用來標(biāo)識某一特殊的設(shè)備;修改版本標(biāo)識設(shè)備的版本號;分類代碼用來標(biāo)識設(shè)備的種類;而頭標(biāo)類型用來標(biāo)識頭類型以及是否為多功能設(shè)備。除供應(yīng)商代碼之外,其他字段的值由供應(yīng)商分配。基地址寄存器最重要的功能是分配PCI設(shè)備的系統(tǒng)地址空間。在基地址寄存器中bit0(最低位)用來標(biāo)識存儲器空間還是I/O地址空間,基地址寄存器映射到存儲器空間時bit0為“0”,映射到I/O地址空間時bit0為“1”。
3.1 Windows環(huán)境下驅(qū)動程序
驅(qū)動程序可以理解為一系列控制硬件設(shè)備的函數(shù)。在Windows操作系統(tǒng)中,封裝驅(qū)動程序的方法是制作一個DLL或VxD。當(dāng)硬件是非標(biāo)準(zhǔn)設(shè)備時,必須針對特定的硬件來設(shè)計(jì)Windows環(huán)境下的設(shè)備驅(qū)動程序。
在DOS操作系統(tǒng),對于一個應(yīng)用程序而言它總認(rèn)為自己是唯一運(yùn)行的程序,因此應(yīng)用程序可以直接訪問硬件,獨(dú)占所有的系統(tǒng)內(nèi)存以及系統(tǒng)運(yùn)行時間,當(dāng)然也就不需要設(shè)備驅(qū)動程序。但到了Windows操作系統(tǒng),系統(tǒng)中同時可能有若干個應(yīng)用程序在運(yùn)行,這就使得系統(tǒng)不可能讓它隨意的直接訪問硬件,否則就會引起應(yīng)用程序訪問沖突而導(dǎo)致系統(tǒng)崩潰。為解決這一問題,人們提出將系統(tǒng)的資源虛擬化,讓應(yīng)用程序運(yùn)行在一個虛擬定環(huán)境中的虛擬機(jī)(VM)上,而管理程序和驅(qū)動程序運(yùn)行在實(shí)際機(jī)器上(Ring0級),由它們來處理針對硬件的操作。虛擬資源是硬件(甚至軟件)資源的仿真,當(dāng)系統(tǒng)虛擬了所有或者幾乎所有的程序可以訪問的資源時,它就創(chuàng)造了一個“虛擬機(jī)”(VM)。Windows虛擬機(jī)完全透明的仿真了以下資源和性能:
(1) 可訪問的內(nèi)存空間
(2) I/O操作
(3) 中斷操作
(4) 外圍設(shè)備(顯示器、鍵盤等)
如此以來,Windows應(yīng)用程序在Ring3級(最低級)的保護(hù)模式上運(yùn)行,不能直接訪問硬件,執(zhí)行一個對硬件的操作就會引起一個異常事件,此時處理器切換到Ring0級,并且將控制權(quán)交給相應(yīng)當(dāng)控制器。所有Windows應(yīng)用程序分享一個系統(tǒng)虛擬機(jī)。
評論