1vga driver代碼分析大三上_第1頁
1vga driver代碼分析大三上_第2頁
1vga driver代碼分析大三上_第3頁
1vga driver代碼分析大三上_第4頁
1vga driver代碼分析大三上_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1)vga_driver.v代碼分析

a)

#(

//

//

參數(shù)例化列表

VGA_1024_768_60fps_65MHz

HorizontalParameter(Pixel

)

parameter

parameterparameterparameterparameter

H_DISP

H_FRONTH_SYNCH_BACKH_TOTAL

=11'd1024,

11'd24,

=11'd136,

=11'd160,11'd1344,

=

=

//VirticalParameter(Line)

parameter

parameterparameterparameterparameter

)

V_DISP

V_FRONTV_SYNCV_BACKV_TOTAL

=10'd768,

10'd3,

=10'd6,

=10'd29,10'd806

=

=

這樣寫的目的是為了軟件封裝性,能夠在例化的時(shí)候修改法分辨率,同時(shí)電路結(jié)構(gòu)保持不

變。

DISP,F(xiàn)RONT,SYNC,BACK,TOTAL分別為顯示期,消隱前肩,消音期,消隱后肩,總時(shí)間,各自對應(yīng)各自的行場信號。

b)行同步信號設(shè)計(jì)

//

//行同步信號發(fā)生器

reg[10:0]hcnt;

always@(posedgeclk_vgaorbegin

if(!rst_n)hcnt<=0;else

begin

if(hcnt<H_TOTAL-1'b1)

hcnt

else

hcnt

negedgerst_n)

<=hcnt+1'b1;

<=0;

end

end

//

always@(posedgeclk_vgaornegedgerst_n)

begin

if(!rst_n)

vga_hs<=1;

else

begin

if((hcnt>=H_DISP+H_FRONT-1'b1)

&&(hcnt<H_DISP+H_FRONT+H_SYNC-1'b1))

vga_hs<=

0;

else

vga_hs<=

1;

end

end

如上所示,分析代碼可以知道,行同步信號的計(jì)數(shù)狀態(tài)機(jī)按照時(shí)序的劃分,是以下過程:H_DISP,H_FRONT,H_SYNC,H_BACK,這似乎和上述分析的VGA時(shí)序不是完全吻合。但是VGA時(shí)序是一個(gè)循環(huán),順推H_BACK個(gè)時(shí)終域便可以得到以上時(shí)期劃分,但是這樣更方便后續(xù)坐標(biāo)計(jì)數(shù),因?yàn)锽ingo此處這樣設(shè)計(jì),當(dāng)然實(shí)際證明是完全可行的。

注意:(hcnt>=H_DISP+H_FRONT-1'b1)&&(hcnt<H_DISP+H_FRONT+H_SYNC-1'b1)只是因?yàn)楹罄m(xù)坐標(biāo)計(jì)算,就把時(shí)序提前了1個(gè)時(shí)鐘已達(dá)到同步。

c)場同步信號設(shè)計(jì)

同上。

d)數(shù)據(jù)顯示坐標(biāo)以及輸出設(shè)計(jì)

//

assign

vga_xpos

=

(hcnt<H_DISP)?hcnt[9:0]+1'b1:10'd0;

assign

assign

vga_ypos

vga_rgb

=

(vcnt<V_DISP)?vcnt[9:0]+1'b1:10'd0;

=((hcnt<H_DISP)&&(vcnt<V_DISP))?vga_data:16'd0;

這部分很容易理解,在顯示期坐標(biāo)根據(jù)顯示的掃描而改變,在非顯示期,坐標(biāo)置零。

(2)Vga_display.v代碼分析

a)標(biāo)準(zhǔn)色彩定義

//definecolorsRGB--5|6|5

localparam

localparam

RED

GREEN

=16'hF800;

=16'h07E0;

localparam

localparam

BLUE

WHITE

=16'h001F;

=16'hFFFF;

localparam

localparam

BLACK

YELLOW

=16'h0000;

=16'hFFE0;

localparam

localparam

CYAN

ROYAL

=16'hF81F;

=16'h07FF;

定義當(dāng)?shù)氐膮?shù),目的是為了后續(xù)標(biāo)準(zhǔn)色彩調(diào)用的方便,沒有其他作用。

b)根據(jù)固定區(qū)域輸出數(shù)據(jù)

always@(posedgeclkornegedgerst_n)

begin

if(!rst_n)

vga_data<=16'h0;

else

begin

if(vga_xpos>=0&&vga_xpos<(H_DISP/3))

vga_data<=RED;

elseif(vga_xpos>=(H_DISP>>3)*1&&vga_xpos<(H_DISP/3)*2)

vga_data<=GREEN;

else

vga_data<=BLUE;

end

end

如上代碼,根據(jù)xpos坐標(biāo),來輸出固定色彩。由于vga_driver模塊已經(jīng)完全設(shè)計(jì)好接

口,因此vga_display.v模塊就是簡單的根據(jù)區(qū)域,輸出設(shè)計(jì)的顏色。

(3)Vga_ctrl.v代碼分析

同步化解析略。

可控鎖相環(huán)PLL設(shè)計(jì)

本來可空鎖相環(huán)PLL設(shè)計(jì),Bingo想單獨(dú)成章來講述的,但覺得可能別的地方實(shí)際應(yīng)用價(jià)

值不是很大,最后便在此處闡明這樣設(shè)計(jì)的原因。

由于VGA不同分辨率的掃描時(shí)鐘不同,因此分辨率變化的時(shí)候,PLL的輸出時(shí)鐘是必要跟隨著變化。但是Bingo覺得好麻煩,于是想了偷懶的一招:PLLIP定義,無非是用QuartusIIGUI對PLL參數(shù)的設(shè)定,最后生成pll.v這個(gè)文件。而這個(gè)文件相當(dāng)于是鎖相環(huán)的驅(qū)動(dòng)電路,故勢必包含著參數(shù)的定義。實(shí)際如下:

altpll_component.clk0_divide_by=1,

altpll_component.clk0_duty_cycle=50,

altpll_component.clk0_multiply_by=1,

如上圖所示,每次修改參數(shù),這三個(gè)變量會(huì)相應(yīng)的發(fā)生變化。因此,何不把這三個(gè)參數(shù)作

為例化的參數(shù),可以再頂層直接修改代碼來實(shí)現(xiàn)固定頻率的輸出?這樣豈不是很方便?因此設(shè)計(jì)參數(shù)例化接口如下:

#(

parameter

parameterparameter

)

DUTY_CYCLE=50,

DIVIDE_DATA=1,

MULTIPLY_DATA=1

理論上是完全行得通的,這樣設(shè)計(jì)的另一個(gè)好處就是電路的封裝性更好Bingo實(shí)踐證明,

完全可行,因此在此處說明,要學(xué)會(huì)正確的偷懶呵呵。

(4)Vga_design.v頂層文件代碼解析

a)Vga接口定義

//vgainterface

output

output

vga_adv_clk,

vga_blank_n,

output

output

vga_sync_n,

vga_hs,

outputvga_vs,

output[15:0]vga_rgb

如上所示,上面三個(gè)信號線是在使用adv712x視頻轉(zhuǎn)換芯片的時(shí)候才會(huì)出現(xiàn),一般的電阻

模擬電路,或者直接RGB3線驅(qū)動(dòng),可以直接刪除相關(guān)信號以及電路。

b)進(jìn)一步偷懶法則

根據(jù)常用的幾種分辨率,Bingo進(jìn)行了總結(jié),以下三種應(yīng)用較多,因此進(jìn)一步偷懶法則,圍繞他們?nèi)邅恚ú辉谶@三種以內(nèi)的話,自己模仿著再寫一個(gè)):

VGA_640_480_60FPS_25MHz

VGA_800_600_72FPS_50MHz

VGA_1024_768_60FPS_65MHz

Verilog語法也有define的用法,是否還記得C語言中,大工程的調(diào)試經(jīng)常對相關(guān)變量的

注釋,注銷來調(diào)整整個(gè)工程變量的應(yīng)用,因此此處Bingo套用這種思維模式,定義以上三種模式的變量,通過修改注釋define便可以輕松修改全局。具體如下所示:

//

//vgaparameterdefine

//`defineVGA_640_480_60FPS_25MHz

//`defineVGA_800_600_72FPS_50MHz

`defineVGA_1024_768_60FPS_65MHz

`ifdefVGA_640_480_60FPS_25MHz

parameter

DUTY_CYCLE=50;

parameter

parameter

DIVIDE_DATA=2;

MULTIPLY_DATA=1;

parameter

parameter

H_DISP=11'd640;

H_FRONT

=

11'd16;

parameter

parameter

H_SYNC

H_BACK

=11'd96;

=11'd48;

parameter

parameter

H_TOTAL

V_DISP

=

11'd800;

=10'd480;

parameter

parameter

V_FRONT

V_SYNC

=

10'd10;

=10'd2;

parameter

parameter

V_BACK

V_TOTAL

=10'd33;

10'd525;

=

`endif

`ifdefVGA_800_600_72FPS_50MHz

parameterDUTY_CYCLE=50;

parameterDIVIDE_DATA=1;

parameter

parameter

MULTIPLY_DATA=1;

H_DISP

=11'd800;

parameter

parameter

H_FRONT

H_SYNC

=

11'd56;

=11'd120;

parameter

parameter

H_BACK

H_TOTAL

=11'd64;

11'd1040;

=

parameter

parameter

V_DISP

V_FRONT

=10'd600;

10'd37;

=

parameter

parameter

V_SYNC

V_BACK

=10'd6;

=10'd23;

parameter

`endif

V_TOTAL

=

10'd666;

`ifdefVGA_1024_768_60FPS_65MHz

parameter

DUTY_CYCLE=50;

parameter

parameter

DIVIDE_DATA=10;

MULTIPLY_DATA=13;

parameter

parameter

H_DISP

H_FRONT

=11'd1024;

11'd24;

=

parameter

parameter

H_SYNC

H_BACK

=11'd136;

=11'd160;

parameter

parameter

H_TOTAL

V_DISP

=

11'd1344;

=10'd768;

parameter

parameter

V_FRONT

V_SYNC

=

10'd3;

=10'd6;

parameter

parameter

V_BACK

V_TOTAL

=10'd29;

10'd806;

=

`endif

1、彩條

(1)代碼

always@(posedgeclkornegedgerst_n)

begin

if(!rst_n)

vga_data<=16'h0;

else

begin

if(vga_xpos>=0&&vga_xpos<(H_DISP>>3))

vga_data<=RED;

elseif(vga_xpos>=

(H_DISP>>3)*1

&&

vga_xpos

<

(H_DISP>>3)*2)

vga_data<=GREEN;

elseif(vga_xpos>=

(H_DISP>>3)*2

&&

vga_xpos

<

(H_DISP>>3)*3)

vga_data<=BLUE;

elseif(vga_xpos>=

(H_DISP>>3)*3

&&

vga_xpos

<

(H_DISP>>3)*4)

vga_data<=WHITE;

elseif(vga_xpos>=

(H_DISP>>3)*4

&&

vga_xpos

<

(H_DISP>>3)*5)

vga_data<=BLACK;

elseif(vga_xpos>=

(H_DISP>>3)*5

&&

vga_xpos

<

(H_DISP>>3)*6)

vga_data<=YELLOW;

elseif(vga_xpos>=

(H_DISP>>3)*6

&&

vga_xpos

<

(H_DISP>>3)*7)

vga_data<=CYAN;

else//if(vga_xpos>=(H_DISP<<3)*7&&vga_xpos

<(H_DISP<<3)*8)

vga_data<=ROYAL;

end

end

通過簡單的對X坐標(biāo)地址的分割,來得到彩條。

(2)效果圖

2、花型矩陣

(1)代碼

wire[19:0]vga_result=vga_xpos*vga_ypos;

always@(posedgeclkornegedgerst_n)

begin

i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論