隨著CCD(電荷耦合器件)和CMOS(互補金屬氧化物半導(dǎo)體)圖像傳感器制造工藝的發(fā)展,,圖像傳感器的分辨率越來越高,,如果要實時顯示圖像傳感器采集到的圖像,則要求圖像處理芯片有較高的運行速度,但由于需要處理的數(shù)據(jù)量太大,,一般的數(shù)字信號處理器很難直接輸出分辨率為1024×768,,幀頻為60 Hz的標(biāo)準(zhǔn)XGA信號。這就需要對DSP輸出的圖像數(shù)據(jù)進行處理,,使圖像能夠在VGA顯示器上實時顯示,。市場上雖然也有一些專門圖像處理芯片,但其價格昂貴,,且應(yīng)用于特殊場合,。本文設(shè)計的顯示控制器可以達到提升幀頻的功能,可使輸入分辨率為1024×768,,幀頻為7.5HZ的YCbCr(4:2:2)圖像信號提升到幀頻為60HZ,,并通過色空間轉(zhuǎn)換,將YCbCr(4:2:2)圖像信號轉(zhuǎn)換成RGB格式的標(biāo)準(zhǔn)XGA信號,,同時產(chǎn)生符合VESA標(biāo)準(zhǔn)的XGA格式的行,、場同步信號,輸出信號經(jīng)D/A轉(zhuǎn)換后可直接輸出到VGA接口,,從而可使圖像傳感器采集到的圖像數(shù)據(jù)能夠在VGA顯示器上實時顯示,。
隨著微電子技術(shù)及其制造工藝的發(fā)展,可編程邏輯器件的邏輯門密度越來越高,,功能也越來越強,,由于FPGA" title="FPGA">FPGA器件的可并行處理能力及其可重復(fù)在系統(tǒng)編程的靈活性,其應(yīng)用越來越廣泛,。隨著微處理器,、專用邏輯器件、以及DSP算法以IP核的形式嵌入到FPGA中,,F(xiàn)PGA可實現(xiàn)的功能越來越強,,F(xiàn)PGA在現(xiàn)代電子系統(tǒng)設(shè)計中正發(fā)揮著越來越重要的作用。本文設(shè)計的顯示控制器就是用VHDL語言描述,,基于FPGA而實現(xiàn)的,。該系統(tǒng)硬件框圖如圖1所示。
圖1 系統(tǒng)硬件框圖
1 顯示控制器的設(shè)計
1.1 工作原理
圖像傳感器采集到的原始圖像數(shù)據(jù),,經(jīng)過A/D轉(zhuǎn)換及DSP處理后,,生成每秒7.5幀的圖像數(shù)據(jù),該數(shù)據(jù)是分辨率為1024×768的YCbCr(4:2:2)格式的16位圖像數(shù)據(jù),。DSP輸出到FPGA的信號有象素時鐘,,行、場參考,,圖像數(shù)據(jù),。FPGA在輸入的行,、場參考都有效時,在輸入象素時鐘的同步下,,接收圖像數(shù)據(jù),,并送入到SDRAM中, 同時從另一個SDRAM 中讀取數(shù)據(jù),,并通過色空間轉(zhuǎn)換,,將YCbCr(4:2:2)信號轉(zhuǎn)換成RGB信號。當(dāng)SDRAM 中寫滿一幀圖像數(shù)據(jù)時,,控制器對兩個SDRAM進行讀,、寫切換。由于寫數(shù)據(jù)速率小于讀數(shù)據(jù)速率,,所以在往一個SDRAM寫滿一幀圖像數(shù)據(jù)的時間內(nèi),,控制器能夠連續(xù)多次從另一個SDRAM中讀出另一幀圖像數(shù)據(jù),從而實現(xiàn)了提高幀頻的目的,。FPGA輸出的RGB格式數(shù)據(jù)經(jīng)D/A轉(zhuǎn)換后,,將數(shù)據(jù)轉(zhuǎn)換成模擬信號,配合行,、場同步信號可使其在VGA顯示器上顯示,。外部晶振輸入32.5MHZ的時鐘,該時鐘在FPGA內(nèi)經(jīng)時鐘鎖相環(huán)倍頻后產(chǎn)生65MHZ的主時鐘,,用于對兩個SDRAM進行讀寫和用來產(chǎn)生符合VESA標(biāo)準(zhǔn)的XGA格式的行,、場同步信號。
1.2 控制器的內(nèi)部模塊介紹
本設(shè)計采用模塊化設(shè)計原則,,按照現(xiàn)代EDA工程常用的“自頂向下“的設(shè)計思想,,進行功能分離并按層次設(shè)計,用VHDL語言實現(xiàn)每個模塊的功能,。該顯示控制器主要由以下七個功能模塊組成:
- 用于從DSP接收數(shù)據(jù)的輸入緩沖模塊
- 用于對兩個SDRAM進行讀寫切換的主控制器模塊
- SDRAM1的控制器模塊
- SDRAM2的控制器模塊
- 用于產(chǎn)生標(biāo)準(zhǔn)XGA格式的時序發(fā)生器模塊
- 用于從SDRAM中讀取數(shù)據(jù)并配合行,、場同步輸出數(shù)據(jù)的輸出緩沖模塊
- 用于將YCbCr(4:2:2)轉(zhuǎn)換成RGB格式的色空間轉(zhuǎn)換模塊,。
該顯示控制器的內(nèi)部結(jié)構(gòu)如圖2所示,。上電后,顯示控制器首先對兩片SDRAM進行初始化,,初始化結(jié)束后,,其它模塊才開始工作。下面將詳細介紹各個模塊的功能及設(shè)計思想,。
圖2 顯示控制器的內(nèi)部結(jié)構(gòu)
1.2.1 數(shù)據(jù)輸入緩沖模塊
數(shù)據(jù)輸入緩沖模塊為深度為1024,、寬度為16bit的異步FIFO (先進先出),寫時鐘為DSP輸出的12MHZ的象素時鐘,,讀時鐘為經(jīng)時鐘鎖相環(huán)倍頻后的65MHZ的主時鐘,,通過場下降沿檢測,,來確保從一幀開始時接收數(shù)據(jù)。當(dāng)輸入的原始圖像數(shù)據(jù)的行,、場參考信號都有效時,,該FIFO的寫使能有效,在輸入象素時鐘的同步下,,開始接收數(shù)據(jù),,寫地址計數(shù)器為0到1023的循環(huán)計數(shù)器,當(dāng)其計數(shù)到511或1023時,,給主控制器發(fā)讀信號,,主控制器隨后產(chǎn)生FIFO的讀使能信號,使讀使能信號在連續(xù)的512個讀時鐘周期內(nèi)一直有效,,即可連續(xù)讀出512個數(shù)據(jù),。由于讀時鐘頻率大于寫時鐘頻率,所以不會產(chǎn)生數(shù)據(jù)寫滿溢出的現(xiàn)象,。
1.2.2 主控制器模塊
該模塊為顯示控制器的主要控制部分,,通過對輸入緩沖的讀請求信號和輸出緩沖的寫請求信號處理,來實現(xiàn)對兩個SDRAM的讀,、寫切換,。上電后,該模塊接收從輸入緩沖中讀出的數(shù)據(jù)并將其寫入到SDRAM 1中,,同時從SDRAM2中讀出數(shù)據(jù),,送入到輸出緩沖中,當(dāng)然最初讀出的數(shù)據(jù)為無效數(shù)據(jù),。當(dāng)SDRAM1中寫滿一幀圖像數(shù)據(jù),,即1024×768個有效數(shù)據(jù)后,該模塊對兩個SDRAM進行讀,、寫切換,,即將接收數(shù)據(jù)寫入到SDRAM2中,同時從SDRAM 1中讀出數(shù)據(jù),,一直按此規(guī)則進行讀,、寫切換。兩個SDRAM的讀,、寫地址發(fā)生器靠主控制器內(nèi)部的計數(shù)器來實現(xiàn),。
1.2.3 SDRAM控制器模塊
該模塊首先完成對SDRAM 的初始化,初始化過程為:上電后等待200 us,,然后對所有BANK發(fā)預(yù)充命令,,接著發(fā)出八個自動刷新命令,然后進行模式設(shè)置,,模式設(shè)置時將SDRAM設(shè)置成連續(xù)的全頁并發(fā)模式,,即512并發(fā),。
初始化結(jié)束后,SDRAM進入正常工作狀態(tài),,準(zhǔn)備接收讀,、寫命令。當(dāng)SDRAM在空閑狀態(tài)下,,為保持其數(shù)據(jù)不丟失,,必須對其進行定時刷新,一般要求64ms內(nèi)刷新4096次,,通常根據(jù)時鐘頻率,,用計數(shù)器計時鐘脈沖到15.625 us時,發(fā)自動刷新命令,,但是當(dāng)SDRAM在進行讀,、寫進發(fā)時,自動刷新命令會打斷讀,、寫,,從而造成數(shù)據(jù)丟失。該設(shè)計中,,由于在64ms內(nèi)對SDRAM至少進行4096次讀,、寫操作,所以可以不必對其進行刷新,。
由于SDRAM被設(shè)置成全頁并發(fā),,預(yù)充命令可停止并發(fā),所以當(dāng)SDRAM讀,、寫到511時,,發(fā)出預(yù)充命令,來停止并發(fā),,同時關(guān)閉當(dāng)前行,,為下一次讀、寫作好準(zhǔn)備,。SDRAM初始化后,,其狀態(tài)轉(zhuǎn)移圖如圖3所示。
圖3 SDRAM初始化后的狀態(tài)轉(zhuǎn)移圖
1.2.4 時序發(fā)生器模塊
該模塊為輸出行,、場同步產(chǎn)生模塊,,利用FPGA內(nèi)部時鐘鎖相環(huán)倍頻后的65MHZ的主時鐘產(chǎn)生符合VESA標(biāo)準(zhǔn)的分辨率為1024×768,、幀頻為60HZ的標(biāo)準(zhǔn)XGA格式的行,、場同步信號,同時在行,、場參考信號都有效時產(chǎn)生一個信號給輸出緩沖模塊,,作為輸出緩沖的讀使能信號,。根據(jù)VESA標(biāo)準(zhǔn),分辨率為1024×768,、幀頻為60HZ的標(biāo)準(zhǔn)XGA信號的象素時鐘為65MHZ,,行同步信號的有效時間相當(dāng)于1024個象素時鐘周期,同步頭寬度相當(dāng)于136個象素時鐘周期,,前肩寬度為相當(dāng)于26個象素時鐘周期,,后肩寬度為相當(dāng)于162個象素時鐘周期。場同步信號的有效時間相當(dāng)于768個行周期長度,,同步頭為6個行周期長度,,前肩為3個行周期長度,后肩為29個行周期長度,。根據(jù)此標(biāo)準(zhǔn),,當(dāng)行、場參考信號都有效時,,一幅圖像可輸出1024×768個有效數(shù)據(jù),。該模塊的時序仿真波形如圖4所示。
1.2.5 輸出緩沖模塊
該模塊為深度為1024,、寬度為16bit的異步FIFO(先進先出),,寫時鐘和讀時鐘同為65MHZ的主時鐘,SDRAM初始化結(jié)束后,,該模塊先從SDRAM2中讀出1024個數(shù)據(jù),,然后才使時序發(fā)生器模塊開始工作,當(dāng)讀使能有效時,,在讀時鐘同步下,,讀地址計數(shù)器從0到1023循環(huán)計數(shù),當(dāng)計數(shù)器計到100或700時,,該模塊向主控制器模塊發(fā)寫請求命令,,從而每次可從SDRAM中連續(xù)讀出512個數(shù)據(jù),由于在輸出行,、場消隱期間,,讀使能信號無效,所以,,不會產(chǎn)生讀空現(xiàn)象,。
1.2.6 色空間轉(zhuǎn)換模塊
輸出緩沖模塊輸出YCbCr(4:2:2)格式的信號,其輸出順序如表1所示,。本設(shè)計采用臨近插值法,,插值后的YCbCr格式如表2所示。
Y0Cb0 | Y1Cr0 | Y2Cb2 | Y3Cr2 | Y4Cb4 | Y5Cr4 | …… |
Y0Cb0Cr0 | Y1Cb2Cr0 | Y2Cb2Cr2 | Y3Cb4Cr2 | Y4Cb4Cr2 | …… |
YCbCr色空間到RGB色空間的轉(zhuǎn)換公式為:
其中Y的范圍是(16,,235),,Cb,、Cr的范圍是(16,240),,為了防止相減后為負出現(xiàn)溢出,,對轉(zhuǎn)換公式變形得:
用VHDL語言描述小數(shù)乘法時,通常是將小數(shù)擴大2的整數(shù)冪次方倍后,,取整進行乘法運算,,然后將結(jié)果進行移位操作。當(dāng)需要對運算結(jié)果進行四舍五入時,,可以在運算時加0.5,,然后對運算結(jié)果取整。下面將對R的運算過程進行描述,,運算精度取11位,。
R=(1.164Y+1.596Cr)-222.912+0.5
= (1.164Y+1.596Cr)-222.412
= (1/211) [(2384Y+3296Cr)-455499]
將方括號中的運算結(jié)果右移11位,即可得到R的值,。Cb,、Cr的運算過程與此類似。
色空間轉(zhuǎn)換模塊輸出24bit RGB(8:8:8)信號,,該信號經(jīng)D/A轉(zhuǎn)換后,,配合時序發(fā)生器模塊產(chǎn)生的行、場同步信號,,即可在VGA顯示器上顯示,。
色空間轉(zhuǎn)換模塊之所以放在輸出緩沖模塊后,主要是為了減少輸入緩沖和輸出緩沖模塊中的先進先出及SDRAM的存儲空間,,如在相同精度下,,SDRAM存儲一幀圖像將會占用1024×768×24bit的存儲空間,色空間轉(zhuǎn)換模塊放在輸出緩沖模塊后,,將會減少1/3的存儲空間,。
2 顯示控制器的硬件實現(xiàn)
該顯示控制器是基于Xilinx公司的Spartan-II" title="Spartan-II">Spartan-IIE系列FPGA XC2S300E-6-PQ208C設(shè)計實現(xiàn)的。此FPGA邏輯資源豐富,,其內(nèi)有30萬個系統(tǒng)門,,6912個邏輯單元(LC),1536個可配置邏輯快(CLB),,64Kbit的塊RAM,,146個可用的I/O口,4個數(shù)字延遲鎖相環(huán)(DLL),。塊RAM可實現(xiàn)大量數(shù)據(jù)的內(nèi)部存儲,,延遲鎖相環(huán)可對時鐘進行管理,可自動調(diào)整并消除輸入時鐘與FPGA內(nèi)部時鐘之間的相位偏移,同時還可實現(xiàn)對時鐘的分頻,、倍頻和移相,。
用于幀緩存的兩個SDRAM 的型號為HY57V281620HCST,,此SDRAM 為Hynix公司生產(chǎn)的高速存儲器,,其內(nèi)有四個Bank,每個Bank的存儲空間為2M×16bit,,可應(yīng)用于需存儲大量數(shù)據(jù)的場合,。
3 結(jié)論與展望
本文設(shè)計的顯示控制器具有很強的靈活性,當(dāng)輸入圖像格式改變時,,只需在色空間轉(zhuǎn)換模塊做相應(yīng)修改,,便可實現(xiàn)不同格式圖像的VGA顯示?;谠擄@示控制器而研發(fā)的高分辨率監(jiān)控攝像機,、數(shù)字視頻展臺等產(chǎn)品可廣泛應(yīng)用在教育、銀行,、煤礦,、交通、醫(yī)療等領(lǐng)域,。