加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • VGA驅(qū)動(dòng)設(shè)計(jì)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-VGA驅(qū)動(dòng)設(shè)計(jì)

2023/10/26
2140
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

作者:李西銳??校對(duì):陸輝

大俠好,歡迎來(lái)到FPGA技術(shù)江湖。本系列將帶來(lái)FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開(kāi)始,最詳細(xì)操作步驟,最直白的言語(yǔ)描述,手把手的“傻瓜式”講解,讓電子、信息、通信類(lèi)專(zhuān)業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開(kāi)發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。

系統(tǒng)性的掌握技術(shù)開(kāi)發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來(lái)Vivado系列,VGA驅(qū)動(dòng)設(shè)計(jì)。話(huà)不多說(shuō),上貨。

VGA驅(qū)動(dòng)設(shè)計(jì)

VGA(Video Graphics Array)視頻圖形陣列是IBM于1987年提出的一個(gè)使用模擬信號(hào)的電腦顯示標(biāo)準(zhǔn)。VGA接口即電腦采用VGA標(biāo)準(zhǔn)輸出數(shù)據(jù)的專(zhuān)用接口。VGA接口共有15針,分成3排,每排5個(gè)孔,顯卡上應(yīng)用最為廣泛的接口類(lèi)型,絕大多數(shù)顯卡都帶有此種接口。它傳輸紅、綠、藍(lán)模擬信號(hào)以及同步信號(hào)(水平和垂直信號(hào))。

VGA作為視頻接口,具有分辨率高、顯示速度快、顏色豐富等優(yōu)點(diǎn)。隨著電子產(chǎn)品以及視頻圖像處理技術(shù)的發(fā)展,VGA接口應(yīng)用越來(lái)越廣泛。

首先我們先來(lái)看一下VGA接口,在我們的接口中,有很多針腳,我們?cè)隍?qū)動(dòng)之前,首先要了解每一個(gè)針腳的作用。接口原理圖如下:

如圖,我們可以看出在這15個(gè)針腳中,只有5個(gè)針腳需要我們?nèi)ヲ?qū)動(dòng),其他的針腳要么是電源或者地,要么就沒(méi)有接。所以,在我們驅(qū)動(dòng)時(shí),只需要驅(qū)動(dòng)這5個(gè)針腳即可。

首先我們?cè)隍?qū)動(dòng)之前,需要了解一下視頻顯示的掃描方式。平時(shí)大家看到的圖片是由一個(gè)一個(gè)的像素點(diǎn)構(gòu)成的,顯示器顯示時(shí)也是如此,一個(gè)點(diǎn)一個(gè)點(diǎn)的顯示。在掃描顯示時(shí),有兩種掃描方式:隔行掃描和逐行掃描。第一種掃描方式控制復(fù)雜,而且圖像閃爍,人眼易疲勞,所以現(xiàn)在很少使用,基本上主流的掃描方式都是逐行掃描。逐行掃描是從左上角第一個(gè)點(diǎn)開(kāi)始一行一行的進(jìn)行掃描,直至最后一個(gè)點(diǎn)。在掃描時(shí)就需要我們確定掃描位置然后進(jìn)行時(shí)序約束。vga_hs和vga_vs這兩個(gè)信號(hào)為行列同步信號(hào),用來(lái)同步掃描的。在時(shí)序上,要求在a段必須為低電平。

行時(shí)序每拉低一次即為一行的開(kāi)始,場(chǎng)時(shí)序每拉低一次即為一幀圖片的開(kāi)始。

另外,在了解完掃描的問(wèn)題之后,還有一個(gè)問(wèn)題需要解決,那就是我們?cè)趻呙璧斤@示區(qū)域時(shí),要給出顏色數(shù)據(jù),使得屏幕顯示出我們想看到的顏色。VGA 顯示器上每一個(gè)像素點(diǎn)可以很多種顏色,由R、G、B 三種顏色構(gòu)成。如果每個(gè)像素點(diǎn)采用3 位二進(jìn)制數(shù)表示,即R 用1bit 表示,G 用1bit 表示,B 用1bit 表示,則此像素點(diǎn)一共可以顯示8種顏色;如果每個(gè)像素點(diǎn)采用8 位二進(jìn)制數(shù)表示,即R 用3bit 表示,G 用3bit 表示,B 用2bit 表示,則此像素點(diǎn)一共可以顯示256 種顏色。此次實(shí)驗(yàn),采用RGB332 的進(jìn)行表示。

在進(jìn)行掃描時(shí),不同的分辨率對(duì)應(yīng)不同的掃描時(shí)鐘,下圖為各個(gè)常用分辨率的時(shí)序參數(shù)。

此次實(shí)驗(yàn),我們選擇分辨率為640*480,那么我們需要提供一個(gè)25Mhz的時(shí)鐘,這個(gè)時(shí)鐘我們可以通過(guò)鎖相環(huán)輸出,代碼如下:

1   module vga_ctrl (2 3     input     wire                  clk,4     input     wire                  rst_n,5     6     output    reg                   vga_hs,7     output    reg                   vga_vs,8     output    reg       [7:0]       vga_rgb9   );10    11    parameter   HS_A        =       96;12    parameter   HS_B        =       48;13    parameter   HS_C        =       640;14    parameter   HS_D        =       16;15    parameter   HS_E        =       800;16    17    parameter   VS_A        =       2;18    parameter   VS_B        =       33;19    parameter   VS_C        =       480;20    parameter   VS_D        =       10;21    parameter   VS_E        =       525;22    23    reg                 [9:0]       cnt_hs;24    reg                 [9:0]       cnt_vs;25    wire                            hs_en;26    wire                            vs_en;27    28    always @ (posedge clk, negedge rst_n) begin29    if (rst_n == 1'b0)30      cnt_hs <= 10'd0;31    else32      if (cnt_hs < HS_E - 1'b1)33      cnt_hs <= cnt_hs + 1'b1;34      else35      cnt_hs <= 10'd0;36    end37    38    always @ (posedge clk, negedge rst_n) begin39    if (rst_n == 1'b0)40      vga_hs <= 1'b1;41    else42      if (cnt_hs < HS_A)43      vga_hs <= 1'b0;44      else45      vga_hs <= 1'b1;46    end47    48    always @ (posedge clk, negedge rst_n) begin49    if (rst_n == 1'b0)50      cnt_vs <= 10'd0;51    else52      if (cnt_hs == HS_E - 1'b1)53      if (cnt_vs < VS_E - 1'b1)54        cnt_vs <= cnt_vs + 1'b1;55      else56        cnt_vs <= 10'd0;57      else58      cnt_vs <= cnt_vs;59    end60    61    always @ (posedge clk, negedge rst_n) begin62    if (rst_n == 1'b0)63      vga_vs <= 1'b1;64    else65      if (cnt_vs < VS_A)  66      vga_vs <= 1'b0;67      else68      vga_vs <= 1'b1;69    end70    71    assign hs_en = (cnt_hs > HS_A + HS_B - 1'b1) && (cnt_hs < HS_A + HS_B + HS_C);72    assign vs_en = (cnt_vs > VS_A + VS_B - 1'b1) && (cnt_vs < VS_A + VS_B + VS_C);73    74    always @ (posedge clk, negedge rst_n) begin75    if (rst_n == 1'b0)76      vga_rgb <= 8'd0;77    else  78      if (hs_en == 1'b1 && vs_en == 1'b1)79      vga_rgb <= 8'b111_000_00;80      else81      vga_rgb <= 8'd0;82    end83    84  endmodule

以上代碼為顯示純紅色的驅(qū)動(dòng),如果我們想顯示不同的純色,可以修改代碼79行的值。

在代碼71行和72行分別規(guī)定了顯示C區(qū),也就是我們能夠看到的最大顯示區(qū)域。如果大家想畫(huà)出不同形狀或者位置的,可以在這兩行約束出想要的區(qū)域。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
XC7A15T-2CSG324I 1 AMD Xilinx Field Programmable Gate Array, 1300 CLBs, PBGA324, BGA-324

ECAD模型

下載ECAD模型
$138.91 查看
M2S010-TQG144I 1 Microchip Technology Inc Field Programmable Gate Array, PQFP144
$35.76 查看
XC6SLX45-2CSG324C 1 AMD Xilinx Field Programmable Gate Array, 3411 CLBs, 667MHz, 43661-Cell, CMOS, PBGA324, 15 X 15 MM, 0.80 MM PITCH, LEAD FREE, BGA-324

ECAD模型

下載ECAD模型
$56.63 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

任何技術(shù)的學(xué)習(xí)就好比一個(gè)江湖,對(duì)于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。