|
1 緒論
隨著電子技術(shù)和集成工藝水平的不斷提高,微處理器的運(yùn)算與控制能力也有了顯著的提升,由于越來(lái)越多的電子產(chǎn)品對(duì)功耗有著苛刻的要求,導(dǎo)致目前微處理器的帶負(fù)載能力比較弱,通常輸出電壓為mV級(jí),這也制約了它們?cè)陲@示應(yīng)用領(lǐng)域的發(fā)展。目前,在數(shù)據(jù)采集和顯示控制領(lǐng)域,F(xiàn)PGA正好彌補(bǔ)了微處理器帶負(fù)載能力弱的缺點(diǎn),且它在VGA(Video Graphics Array)信號(hào)處理中也有著大量的應(yīng)用。
VGA(VideoGraphics Array)是IBM在1987年隨PS/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高、顯示速率快、顏色豐富等優(yōu)點(diǎn),在彩色顯示器領(lǐng)域得到了廣泛的應(yīng)用。不支持熱插拔,不支持音頻傳輸。
Quartus II 是Altera公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。
CycloneIII 系列FPGA是Altera的低成本系列FPGA。Cyclone III FPGA具有一下特性:新的可編程構(gòu)架通過(guò)設(shè)計(jì)實(shí)現(xiàn)低成本,嵌入式存儲(chǔ)資源支持各種存儲(chǔ)器應(yīng)用和數(shù)字信號(hào)處理(DSP)實(shí)施,支持串行、總線和網(wǎng)絡(luò)接口及各種通信協(xié)議,使用PLL管理片內(nèi)和片外系統(tǒng)時(shí)序,支持單端I/O標(biāo)準(zhǔn)和差分I/O技術(shù),支持LVDS信號(hào)等等。
本次課程設(shè)計(jì)是基于FPGA的VGA圖像顯示控制器設(shè)計(jì),采用QuartusII 9.0 軟件工具,并以Altera 公司的CycloneIII 系列FPGA的器EP3C10E144C8為主實(shí)現(xiàn)硬件平臺(tái)的設(shè)計(jì)。該控制器采用Verilog HDL 實(shí)現(xiàn)相關(guān)的控制功能,這大大提升了系統(tǒng)的實(shí)時(shí)性和可靠性,在大規(guī)模嵌入式系統(tǒng)設(shè)計(jì)中具有較高的工程價(jià)值和很好的應(yīng)用前景。
2系統(tǒng)方案設(shè)計(jì)與工作原理
2.1方案設(shè)計(jì)及框圖
本次課程設(shè)計(jì)采用模塊化設(shè)計(jì)方法,我們對(duì)VGA圖像顯示控制器按功能進(jìn)行層次劃分。本次課程設(shè)計(jì)主要由以下模塊組成:圖像數(shù)據(jù)存儲(chǔ)ROM模塊、鎖相環(huán)PLL輸出25MHz時(shí)鐘模塊、分頻模塊、選擇模塊、VGA圖像顯示模塊。2.1設(shè)計(jì)框圖
2.2工作原理
根據(jù)VGA的顯示協(xié)議,可以選擇不同的顯示分辨率。本設(shè)計(jì)選擇的是640 X 480 X 60Hz 的分辨率,相對(duì)應(yīng)時(shí)鐘頻率為25.175MHz。常見的彩色顯示器一般有CRT(陰極射線管)構(gòu)成,彩色是由R、G、B(紅:Red,綠:Green,藍(lán):Blue)三基色組成,用逐行掃描的方式解決圖像顯示。掃描是從屏幕的左上方開始的,從左到右,從上到下,進(jìn)行掃描。每掃完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對(duì)電子束進(jìn)行行消隱,每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行行同步;掃描完所有行,用場(chǎng)同步信號(hào)進(jìn)行場(chǎng)同步,并使掃描回到屏幕的左上方,同時(shí)進(jìn)行場(chǎng)消隱,預(yù)備下一場(chǎng)的掃描。
對(duì)于普通的VGA顯示器,其引出線共含五個(gè)信號(hào):R、G、B是三基色信號(hào);HS是行同步信號(hào);VS是場(chǎng)同步信號(hào)。
根據(jù)相應(yīng)協(xié)議,在VGA時(shí)序控制模塊對(duì)行掃描信號(hào)HS和場(chǎng)掃描信號(hào)VS進(jìn)行相應(yīng)的時(shí)序控制。然后利用四選一模塊從ROM內(nèi)存地址里面取出對(duì)應(yīng)圖片的像素點(diǎn)的三基色數(shù)據(jù),傳輸?shù)腣GA顯示屏。利用分頻模塊和四選一模塊使得圖片進(jìn)行動(dòng)態(tài)顯示。
附錄1:程序
modulevgaV (clk, hs, vs, r, g, b, rgbin, DOUT);
input clk;
output hs,vs;
output r,g,b;
input[2:0]rgbin;
output[11:0]DOUT;
reg[9:0]hcnt,vcnt; reg r,g,b; reghs,vs;
assign DOUT={vcnt[5:0], hcnt[5:0]};
always @ (posedge clk)
begin
if (hcnt<800) hcnt<=hcnt+1;
else hcnt<={10{1'b0}};
end
always @ (posedge clk)
begin
if (hcnt==640+ 8)
begin
if(vcnt<525) vcnt<=vcnt+1;
else vcnt<={10{1'b0}};
end
end
always @ (posedge clk)
begin
if ((hcnt>=640+ 8+ 8) &(hcnt<640+ 8+ 8+ 96)) hs<=1'b0;
else hs<=1'b1;
end
always @ (vcnt)
begin
if ((vcnt>=480+ 8+ 2) &(vcnt<480+8 + 2+ 2)) vs<=1'b0;
else vs<=1'b1;
end
always @ (posedge clk)
begin
if (hcnt<640 & vcnt<480)
begin
r<=rgbin[2];
g<=rgbin[1];
b<=rgbin[0];
end
else begin
r<=1'b0;
g<=1'b0;
b<=1'b0;
end
endendmodule
modulediv(clkin,clkout);
input clkin;
output clkout;
reg[23:0] count;
reg clkout;
parameter N=2000000;
always @(posedge clkin)
if(count<N-1)
count<=count+1;
else
begin
count<=0;
clkout<=~clkout;
end
endmodule
moduleMUX41a(clk,a,b,c,d,y);
input clk;
input [2:0]a;
input [2:0]b;
input [2:0]c;
input [2:0]d;
output [2:0]y;
reg[2:0]Q;
reg[2:0]y;
always@(posedge clk)
begin Q<=Q+1;
end
always@(a or b or c or d or y)
begin
if(Q==3'b000) y<=a;
else if(Q==3'b001) y<=a;
else if(Q==3'b010) y<=b;
else if(Q==3'b011) y<=b;
else if(Q==3'b100) y<=c;
else if(Q==3'b101) y<=c;
else if(Q==3'b110) y<=d;
else if(Q==3'b111) y<=d;
else y<=a;
end
endmodule
|
|