




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乙方商鋪?zhàn)赓U合同范本
- 出讓合同范本官網(wǎng)
- 個(gè)人催債合同范本
- 2025年遵義a2貨運(yùn)從業(yè)資格證考試
- 借款合同和抵押合同范例
- 勞務(wù)合同范本保密條款
- 東營市勞動(dòng)合同范本
- 低成本創(chuàng)業(yè)合同范本
- 個(gè)人室內(nèi)植物租賃合同范本
- 棄土場土方外運(yùn)施工方案
- 遼寧省營口市2024-2025學(xué)年七年級上學(xué)期期中語文試題
- 《畫垂線和平行線》(教案)2023-2024學(xué)年數(shù)學(xué)四年級上冊
- GB/T 44770-2024智能火電廠技術(shù)要求
- 經(jīng)典女士剪發(fā)技術(shù)圖解教程
- 2023年護(hù)理人員分層培訓(xùn)、考核計(jì)劃表
- 第二章-高壓開關(guān)電器
- 腫瘤病人的姑息治療和護(hù)理
- 人工智能在人力資源招聘中的創(chuàng)新應(yīng)用
- 靜脈采血的課件
- 三年級數(shù)學(xué)-數(shù)獨(dú)練習(xí)題打印版10組
- DB3502T 051-2019 家政服務(wù)規(guī)范 通 用要求
評論
0/150
提交評論