《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的VGA顯示控制器的設(shè)計(jì)
基于FPGA的VGA顯示控制器的設(shè)計(jì)
摘要: 該顯示控制器是基于Xilinx公司的Spartan-IIE系列FPGA XC2S300E-6-PQ208C設(shè)計(jì)實(shí)現(xiàn)的,。此FPGA邏輯資源豐富,其內(nèi)有30萬(wàn)個(gè)系統(tǒng)門(mén),,6912個(gè)邏輯單元(LC),,1536個(gè)可配置邏輯快(CLB),,64Kbit的塊RAM,146個(gè)可用的I/O口,,4個(gè)數(shù)字延遲鎖相環(huán)(DLL),。塊RAM可實(shí)現(xiàn)大量數(shù)據(jù)的內(nèi)部存儲(chǔ),延遲鎖相環(huán)可對(duì)時(shí)鐘進(jìn)行管理,可自動(dòng)調(diào)整并消除輸入時(shí)鐘與FPGA內(nèi)部時(shí)鐘之間的相位偏移,,同時(shí)還可實(shí)現(xiàn)對(duì)時(shí)鐘的分頻,、倍頻和移相。 用于幀緩存的兩個(gè)SDRAM 的型號(hào)為HY57V281620HCST,,此SDRAM 為Hynix公司生產(chǎn)的高速存儲(chǔ)器,,其內(nèi)有四個(gè)Bank,,每個(gè)Bank的存儲(chǔ)空間為2M×16bit,,可應(yīng)用于需存儲(chǔ)大量數(shù)據(jù)的場(chǎng)合。
關(guān)鍵詞: FPGA VGA顯示控制器 Spartan-II
Abstract:
Key words :

    隨著CCD(電荷耦合器件)和CMOS(互補(bǔ)金屬氧化物半導(dǎo)體)圖像傳感器制造工藝的發(fā)展,,圖像傳感器的分辨率越來(lái)越高,,如果要實(shí)時(shí)顯示圖像傳感器采集到的圖像,則要求圖像處理芯片有較高的運(yùn)行速度,,但由于需要處理的數(shù)據(jù)量太大,,一般的數(shù)字信號(hào)處理器很難直接輸出分辨率為1024×768,幀頻為60 Hz的標(biāo)準(zhǔn)XGA信號(hào),。這就需要對(duì)DSP輸出的圖像數(shù)據(jù)進(jìn)行處理,,使圖像能夠在VGA顯示器上實(shí)時(shí)顯示。市場(chǎng)上雖然也有一些專(zhuān)門(mén)圖像處理芯片,,但其價(jià)格昂貴,,且應(yīng)用于特殊場(chǎng)合。本文設(shè)計(jì)的顯示控制器可以達(dá)到提升幀頻的功能,,可使輸入分辨率為1024×768,,幀頻為7.5HZ的YCbCr(4:2:2)圖像信號(hào)提升到幀頻為60HZ,并通過(guò)色空間轉(zhuǎn)換,,將YCbCr(4:2:2)圖像信號(hào)轉(zhuǎn)換成RGB格式的標(biāo)準(zhǔn)XGA信號(hào),,同時(shí)產(chǎn)生符合VESA標(biāo)準(zhǔn)的XGA格式的行、場(chǎng)同步信號(hào),,輸出信號(hào)經(jīng)D/A轉(zhuǎn)換后可直接輸出到VGA接口,,從而可使圖像傳感器采集到的圖像數(shù)據(jù)能夠在VGA顯示器上實(shí)時(shí)顯示。
    隨著微電子技術(shù)及其制造工藝的發(fā)展,,可編程邏輯器件的邏輯門(mén)密度越來(lái)越高,,功能也越來(lái)越強(qiáng),由于FPGA" title="FPGA">FPGA器件的可并行處理能力及其可重復(fù)在系統(tǒng)編程的靈活性,,其應(yīng)用越來(lái)越廣泛,。隨著微處理器、專(zhuān)用邏輯器件,、以及DSP算法以IP核的形式嵌入到FPGA中,,F(xiàn)PGA可實(shí)現(xiàn)的功能越來(lái)越強(qiáng),F(xiàn)PGA在現(xiàn)代電子系統(tǒng)設(shè)計(jì)中正發(fā)揮著越來(lái)越重要的作用。本文設(shè)計(jì)的顯示控制器就是用VHDL語(yǔ)言描述,,基于FPGA而實(shí)現(xiàn)的,。該系統(tǒng)硬件框圖如圖1所示。
 
 
圖1 系統(tǒng)硬件框圖

1 顯示控制器的設(shè)計(jì)
1.1 工作原理
    圖像傳感器采集到的原始圖像數(shù)據(jù),,經(jīng)過(guò)A/D轉(zhuǎn)換及DSP處理后,,生成每秒7.5幀的圖像數(shù)據(jù),該數(shù)據(jù)是分辨率為1024×768的YCbCr(4:2:2)格式的16位圖像數(shù)據(jù),。DSP輸出到FPGA的信號(hào)有象素時(shí)鐘,,行、場(chǎng)參考,,圖像數(shù)據(jù),。FPGA在輸入的行、場(chǎng)參考都有效時(shí),,在輸入象素時(shí)鐘的同步下,,接收?qǐng)D像數(shù)據(jù),并送入到SDRAM中,, 同時(shí)從另一個(gè)SDRAM 中讀取數(shù)據(jù),,并通過(guò)色空間轉(zhuǎn)換,將YCbCr(4:2:2)信號(hào)轉(zhuǎn)換成RGB信號(hào),。當(dāng)SDRAM 中寫(xiě)滿(mǎn)一幀圖像數(shù)據(jù)時(shí),,控制器對(duì)兩個(gè)SDRAM進(jìn)行讀、寫(xiě)切換,。由于寫(xiě)數(shù)據(jù)速率小于讀數(shù)據(jù)速率,,所以在往一個(gè)SDRAM寫(xiě)滿(mǎn)一幀圖像數(shù)據(jù)的時(shí)間內(nèi),控制器能夠連續(xù)多次從另一個(gè)SDRAM中讀出另一幀圖像數(shù)據(jù),,從而實(shí)現(xiàn)了提高幀頻的目的,。FPGA輸出的RGB格式數(shù)據(jù)經(jīng)D/A轉(zhuǎn)換后,將數(shù)據(jù)轉(zhuǎn)換成模擬信號(hào),,配合行,、場(chǎng)同步信號(hào)可使其在VGA顯示器上顯示。外部晶振輸入32.5MHZ的時(shí)鐘,,該時(shí)鐘在FPGA內(nèi)經(jīng)時(shí)鐘鎖相環(huán)倍頻后產(chǎn)生65MHZ的主時(shí)鐘,,用于對(duì)兩個(gè)SDRAM進(jìn)行讀寫(xiě)和用來(lái)產(chǎn)生符合VESA標(biāo)準(zhǔn)的XGA格式的行、場(chǎng)同步信號(hào),。

1.2 控制器的內(nèi)部模塊介紹
    本設(shè)計(jì)采用模塊化設(shè)計(jì)原則,,按照現(xiàn)代EDA工程常用的“自頂向下“的設(shè)計(jì)思想,進(jìn)行功能分離并按層次設(shè)計(jì),,用VHDL語(yǔ)言實(shí)現(xiàn)每個(gè)模塊的功能,。該顯示控制器主要由以下七個(gè)功能模塊組成:

  1. 用于從DSP接收數(shù)據(jù)的輸入緩沖模塊
  2. 用于對(duì)兩個(gè)SDRAM進(jìn)行讀寫(xiě)切換的主控制器模塊
  3. SDRAM1的控制器模塊
  4. SDRAM2的控制器模塊
  5. 用于產(chǎn)生標(biāo)準(zhǔn)XGA格式的時(shí)序發(fā)生器模塊
  6. 用于從SDRAM中讀取數(shù)據(jù)并配合行,、場(chǎng)同步輸出數(shù)據(jù)的輸出緩沖模塊
  7. 用于將YCbCr(4:2:2)轉(zhuǎn)換成RGB格式的色空間轉(zhuǎn)換模塊。

    該顯示控制器的內(nèi)部結(jié)構(gòu)如圖2所示,。上電后,,顯示控制器首先對(duì)兩片SDRAM進(jìn)行初始化,初始化結(jié)束后,,其它模塊才開(kāi)始工作,。下面將詳細(xì)介紹各個(gè)模塊的功能及設(shè)計(jì)思想。
 
圖2 顯示控制器的內(nèi)部結(jié)構(gòu)
1.2.1 數(shù)據(jù)輸入緩沖模塊
    數(shù)據(jù)輸入緩沖模塊為深度為1024,、寬度為16bit的異步FIFO (先進(jìn)先出),,寫(xiě)時(shí)鐘為DSP輸出的12MHZ的象素時(shí)鐘,讀時(shí)鐘為經(jīng)時(shí)鐘鎖相環(huán)倍頻后的65MHZ的主時(shí)鐘,,通過(guò)場(chǎng)下降沿檢測(cè),,來(lái)確保從一幀開(kāi)始時(shí)接收數(shù)據(jù)。當(dāng)輸入的原始圖像數(shù)據(jù)的行,、場(chǎng)參考信號(hào)都有效時(shí),該FIFO的寫(xiě)使能有效,,在輸入象素時(shí)鐘的同步下,,開(kāi)始接收數(shù)據(jù),寫(xiě)地址計(jì)數(shù)器為0到1023的循環(huán)計(jì)數(shù)器,,當(dāng)其計(jì)數(shù)到511或1023時(shí),,給主控制器發(fā)讀信號(hào),主控制器隨后產(chǎn)生FIFO的讀使能信號(hào),,使讀使能信號(hào)在連續(xù)的512個(gè)讀時(shí)鐘周期內(nèi)一直有效,,即可連續(xù)讀出512個(gè)數(shù)據(jù)。由于讀時(shí)鐘頻率大于寫(xiě)時(shí)鐘頻率,,所以不會(huì)產(chǎn)生數(shù)據(jù)寫(xiě)滿(mǎn)溢出的現(xiàn)象,。

1.2.2 主控制器模塊
    該模塊為顯示控制器的主要控制部分,通過(guò)對(duì)輸入緩沖的讀請(qǐng)求信號(hào)和輸出緩沖的寫(xiě)請(qǐng)求信號(hào)處理,,來(lái)實(shí)現(xiàn)對(duì)兩個(gè)SDRAM的讀,、寫(xiě)切換。上電后,,該模塊接收從輸入緩沖中讀出的數(shù)據(jù)并將其寫(xiě)入到SDRAM 1中,,同時(shí)從SDRAM2中讀出數(shù)據(jù),送入到輸出緩沖中,,當(dāng)然最初讀出的數(shù)據(jù)為無(wú)效數(shù)據(jù),。當(dāng)SDRAM1中寫(xiě)滿(mǎn)一幀圖像數(shù)據(jù),即1024×768個(gè)有效數(shù)據(jù)后,,該模塊對(duì)兩個(gè)SDRAM進(jìn)行讀,、寫(xiě)切換,,即將接收數(shù)據(jù)寫(xiě)入到SDRAM2中,同時(shí)從SDRAM 1中讀出數(shù)據(jù),,一直按此規(guī)則進(jìn)行讀,、寫(xiě)切換。兩個(gè)SDRAM的讀,、寫(xiě)地址發(fā)生器靠主控制器內(nèi)部的計(jì)數(shù)器來(lái)實(shí)現(xiàn),。

1.2.3 SDRAM控制器模塊
    該模塊首先完成對(duì)SDRAM 的初始化,初始化過(guò)程為:上電后等待200 us,,然后對(duì)所有BANK發(fā)預(yù)充命令,,接著發(fā)出八個(gè)自動(dòng)刷新命令,然后進(jìn)行模式設(shè)置,,模式設(shè)置時(shí)將SDRAM設(shè)置成連續(xù)的全頁(yè)并發(fā)模式,,即512并發(fā)。
    初始化結(jié)束后,,SDRAM進(jìn)入正常工作狀態(tài),,準(zhǔn)備接收讀、寫(xiě)命令,。當(dāng)SDRAM在空閑狀態(tài)下,,為保持其數(shù)據(jù)不丟失,必須對(duì)其進(jìn)行定時(shí)刷新,,一般要求64ms內(nèi)刷新4096次,,通常根據(jù)時(shí)鐘頻率,用計(jì)數(shù)器計(jì)時(shí)鐘脈沖到15.625 us時(shí),,發(fā)自動(dòng)刷新命令,,但是當(dāng)SDRAM在進(jìn)行讀、寫(xiě)進(jìn)發(fā)時(shí),,自動(dòng)刷新命令會(huì)打斷讀,、寫(xiě),從而造成數(shù)據(jù)丟失,。該設(shè)計(jì)中,,由于在64ms內(nèi)對(duì)SDRAM至少進(jìn)行4096次讀、寫(xiě)操作,,所以可以不必對(duì)其進(jìn)行刷新,。
    由于SDRAM被設(shè)置成全頁(yè)并發(fā),預(yù)充命令可停止并發(fā),,所以當(dāng)SDRAM讀,、寫(xiě)到511時(shí),發(fā)出預(yù)充命令,,來(lái)停止并發(fā),,同時(shí)關(guān)閉當(dāng)前行,,為下一次讀、寫(xiě)作好準(zhǔn)備,。SDRAM初始化后,,其狀態(tài)轉(zhuǎn)移圖如圖3所示。
 
圖3 SDRAM初始化后的狀態(tài)轉(zhuǎn)移圖

1.2.4 時(shí)序發(fā)生器模塊
    該模塊為輸出行,、場(chǎng)同步產(chǎn)生模塊,,利用FPGA內(nèi)部時(shí)鐘鎖相環(huán)倍頻后的65MHZ的主時(shí)鐘產(chǎn)生符合VESA標(biāo)準(zhǔn)的分辨率為1024×768、幀頻為60HZ的標(biāo)準(zhǔn)XGA格式的行,、場(chǎng)同步信號(hào),,同時(shí)在行、場(chǎng)參考信號(hào)都有效時(shí)產(chǎn)生一個(gè)信號(hào)給輸出緩沖模塊,,作為輸出緩沖的讀使能信號(hào),。根據(jù)VESA標(biāo)準(zhǔn),分辨率為1024×768,、幀頻為60HZ的標(biāo)準(zhǔn)XGA信號(hào)的象素時(shí)鐘為65MHZ,,行同步信號(hào)的有效時(shí)間相當(dāng)于1024個(gè)象素時(shí)鐘周期,同步頭寬度相當(dāng)于136個(gè)象素時(shí)鐘周期,,前肩寬度為相當(dāng)于26個(gè)象素時(shí)鐘周期,,后肩寬度為相當(dāng)于162個(gè)象素時(shí)鐘周期。場(chǎng)同步信號(hào)的有效時(shí)間相當(dāng)于768個(gè)行周期長(zhǎng)度,,同步頭為6個(gè)行周期長(zhǎng)度,前肩為3個(gè)行周期長(zhǎng)度,,后肩為29個(gè)行周期長(zhǎng)度,。根據(jù)此標(biāo)準(zhǔn),當(dāng)行,、場(chǎng)參考信號(hào)都有效時(shí),,一幅圖像可輸出1024×768個(gè)有效數(shù)據(jù)。該模塊的時(shí)序仿真波形如圖4所示,。

1.2.5 輸出緩沖模塊
    該模塊為深度為1024,、寬度為16bit的異步FIFO(先進(jìn)先出),寫(xiě)時(shí)鐘和讀時(shí)鐘同為65MHZ的主時(shí)鐘,,SDRAM初始化結(jié)束后,,該模塊先從SDRAM2中讀出1024個(gè)數(shù)據(jù),然后才使時(shí)序發(fā)生器模塊開(kāi)始工作,,當(dāng)讀使能有效時(shí),,在讀時(shí)鐘同步下,讀地址計(jì)數(shù)器從0到1023循環(huán)計(jì)數(shù),,當(dāng)計(jì)數(shù)器計(jì)到100或700時(shí),,該模塊向主控制器模塊發(fā)寫(xiě)請(qǐng)求命令,,從而每次可從SDRAM中連續(xù)讀出512個(gè)數(shù)據(jù),由于在輸出行,、場(chǎng)消隱期間,,讀使能信號(hào)無(wú)效,所以,,不會(huì)產(chǎn)生讀空現(xiàn)象,。

1.2.6 色空間轉(zhuǎn)換模塊
    輸出緩沖模塊輸出YCbCr(4:2:2)格式的信號(hào),其輸出順序如表1所示,。本設(shè)計(jì)采用臨近插值法,,插值后的YCbCr格式如表2所示。

表1 YCbCr(4:2:2)圖像格式
Y0Cb0 Y1Cr0 Y2Cb2 Y3Cr2 Y4Cb4 Y5Cr4 ……


  

表2 插值后的YCbCr圖像格式
Y0Cb0Cr0 Y1Cb2Cr0 Y2Cb2Cr2 Y3Cb4Cr2 Y4Cb4Cr2 ……

    YCbCr色空間到RGB色空間的轉(zhuǎn)換公式為:
 
其中Y的范圍是(16,,235),,Cb、Cr的范圍是(16,,240),,為了防止相減后為負(fù)出現(xiàn)溢出,對(duì)轉(zhuǎn)換公式變形得:


 
    用VHDL語(yǔ)言描述小數(shù)乘法時(shí),,通常是將小數(shù)擴(kuò)大2的整數(shù)冪次方倍后,,取整進(jìn)行乘法運(yùn)算,然后將結(jié)果進(jìn)行移位操作,。當(dāng)需要對(duì)運(yùn)算結(jié)果進(jìn)行四舍五入時(shí),,可以在運(yùn)算時(shí)加0.5,然后對(duì)運(yùn)算結(jié)果取整,。下面將對(duì)R的運(yùn)算過(guò)程進(jìn)行描述,,運(yùn)算精度取11位。
R=(1.164Y+1.596Cr)-222.912+0.5
= (1.164Y+1.596Cr)-222.412
= (1/211) [(2384Y+3296Cr)-455499]
    將方括號(hào)中的運(yùn)算結(jié)果右移11位,,即可得到R的值,。Cb、Cr的運(yùn)算過(guò)程與此類(lèi)似,。
    色空間轉(zhuǎn)換模塊輸出24bit RGB(8:8:8)信號(hào),,該信號(hào)經(jīng)D/A轉(zhuǎn)換后,配合時(shí)序發(fā)生器模塊產(chǎn)生的行,、場(chǎng)同步信號(hào),,即可在VGA顯示器上顯示。
    色空間轉(zhuǎn)換模塊之所以放在輸出緩沖模塊后,,主要是為了減少輸入緩沖和輸出緩沖模塊中的先進(jìn)先出及SDRAM的存儲(chǔ)空間,,如在相同精度下,SDRAM存儲(chǔ)一幀圖像將會(huì)占用1024×768×24bit的存儲(chǔ)空間,,色空間轉(zhuǎn)換模塊放在輸出緩沖模塊后,,將會(huì)減少1/3的存儲(chǔ)空間,。

 

2 顯示控制器的硬件實(shí)現(xiàn)
    該顯示控制器是基于Xilinx公司的Spartan-II" title="Spartan-II">Spartan-IIE系列FPGA XC2S300E-6-PQ208C設(shè)計(jì)實(shí)現(xiàn)的。此FPGA邏輯資源豐富,,其內(nèi)有30萬(wàn)個(gè)系統(tǒng)門(mén),,6912個(gè)邏輯單元(LC),1536個(gè)可配置邏輯快(CLB),,64Kbit的塊RAM,,146個(gè)可用的I/O口,4個(gè)數(shù)字延遲鎖相環(huán)(DLL),。塊RAM可實(shí)現(xiàn)大量數(shù)據(jù)的內(nèi)部存儲(chǔ),,延遲鎖相環(huán)可對(duì)時(shí)鐘進(jìn)行管理,可自動(dòng)調(diào)整并消除輸入時(shí)鐘與FPGA內(nèi)部時(shí)鐘之間的相位偏移,,同時(shí)還可實(shí)現(xiàn)對(duì)時(shí)鐘的分頻,、倍頻和移相。
    用于幀緩存的兩個(gè)SDRAM 的型號(hào)為HY57V281620HCST,,此SDRAM 為Hynix公司生產(chǎn)的高速存儲(chǔ)器,,其內(nèi)有四個(gè)Bank,每個(gè)Bank的存儲(chǔ)空間為2M×16bit,,可應(yīng)用于需存儲(chǔ)大量數(shù)據(jù)的場(chǎng)合,。

3 結(jié)論與展望
    本文設(shè)計(jì)的顯示控制器具有很強(qiáng)的靈活性,當(dāng)輸入圖像格式改變時(shí),,只需在色空間轉(zhuǎn)換模塊做相應(yīng)修改,,便可實(shí)現(xiàn)不同格式圖像的VGA顯示?;谠擄@示控制器而研發(fā)的高分辨率監(jiān)控?cái)z像機(jī),、數(shù)字視頻展臺(tái)等產(chǎn)品可廣泛應(yīng)用在教育、銀行,、煤礦、交通,、醫(yī)療等領(lǐng)域,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。