verilogVGA顯示字元

2021-08-08 14:28:56 字數 4527 閱讀 5962

/*

2017.9.19 gy de2

vga 640x480 60hz

adv7123 d/a

輸入時鐘50mhz 低電平復位

時序: 水平同步引數h 行掃瞄

同步 後沿 有效視屏 前沿 總

時間us 3.8 1.9 25.4 0.6 31.7

計數 96 48 640(l) 16 800

垂直同步引數v 列掃瞄

同步 後沿 有效視屏 前沿 總

行數 2 33 480(w) 10 525

時間us = 行數x掃瞄一行所需要的時間

畫素時鐘25mhz yue=800x525x60

總時間 =31.7usx525x60 yue=1s

計乙個數的時間為 1/25mhz or 3.8/96

*/module vga(

clk,rst_n, //input

vga_sync,vga_blank,vga_clk, //output adv7123

vga_r,vga_g,vga_b,vga_hs,vga_vs //output vga

);input clk,rst_n;

output reg [9:0] vga_r,vga_g,vga_b;

output reg vga_clk,vga_hs,vga_vs;

output vga_blank,vga_sync;

//-------------------分頻-------------------------

always @(posedge clk or negedge rst_n)

if (!rst_n)

vga_clk<=1'b0;

else vga_clk<=~vga_clk;

//---------------下面的時鐘為vga_clk--------------

//---------------時序引數800x525------------------

parameter h_sync=10'd96;

parameter h_back=10'd48;

parameter h_length=10'd640;

parameter h_front=10'd16;

parameter v_sync=10'd2;

parameter v_back=10'd33;

parameter v_width=10'd480;

parameter v_front=10'd10;

reg [9:0] x,y;

//不用sog(sync on green 同步訊號只在綠色訊號中出現)

assign vga_sync=1'b0;

//---------------------計數-----------------------

always@(posedge vga_clk or negedge rst_n)

begin

if(!rst_n) x<=10'd0;

else if(x==800) x<=0;

else x<=x+1'b1;

endalways@(posedge vga_clk or negedge rst_n)

begin

if(!rst_n) y<=10'd0;

else if(y==525) y<=0;

else if(x==800) y<=y+1'b1;

end

//------------通過計的數字輸出同步訊號---------

always@(posedge vga_clk or negedge rst_n)

begin

if(!rst_n) vga_hs<=1'b1;

else if(x==0) vga_hs<=1'b0;

else if(x==h_sync) vga_hs<=1'b1;

endalways@(posedge vga_clk or negedge rst_n)

begin

if(!rst_n) vga_vs<=1'b1;

else if(y==0) vga_vs<=1'b0;

else if(y==v_sync) vga_vs<=1'b1;

end//----------通過橫縱座標x,y計算出顯示的區域---

reg [9:0] vga_x,vga_y;

always@(posedge vga_clk)

begin

vga_x=x-h_sync-h_back;

vga_y=y-v_sync-v_back;

end//---------------進行同步時消隱------------------

assign vga_blank=vga_x//----------通過vga_x,vga_y顯示相應顏色----------

parameter

haha0=16'h0000,

haha1=16'h3ff0,

haha2=16'h2020,

haha3=16'h2020,

haha4=16'h3ff0,

haha5=16'h0400,

haha6=16'h0a7f,

haha7=16'h1242,

haha8=16'h2242,

haha9=16'hc242,

haha10=16'h2242,

haha11=16'h1242,

haha12=16'h0a7f,

haha13=16'h0400,

haha14=16'h0400,

haha15=16'h0000;//哈 pctolcd

reg [3:0] w;

always @(posedge vga_clk or negedge rst_n)

if (!rst_n)

hei;

else if(300<=vga_x&&vga_x<332&&220<=vga_y&&vga_y<236)

begin

if(w==15) w<=0;

w<=w+1'b1;

case(w)

4'd0:if(haha0[236-vga_y]) hei; else bai;

4'd1:if(haha1[236-vga_y]) hei; else bai;

4'd2:if(haha2[236-vga_y]) hei; else bai;

4'd3:if(haha3[236-vga_y]) hei; else bai;

4'd4:if(haha4[236-vga_y]) hei; else bai;

4'd5:if(haha5[236-vga_y]) hei; else bai;

4'd6:if(haha6[236-vga_y]) hei; else bai;

4'd7:if(haha7[236-vga_y]) hei; else bai;

4'd8:if(haha8[236-vga_y]) hei; else bai;

4'd9:if(haha9[236-vga_y]) hei; else bai;

4'd10:if(haha10[236-vga_y]) hei; else bai;

4'd11:if(haha11[236-vga_y]) hei; else bai;

4'd12:if(haha12[236-vga_y]) hei; else bai;

4'd13:if(haha13[236-vga_y]) hei; else bai;

4'd14:if(haha14[236-vga_y]) hei; else bai;

4'd15:if(haha15[236-vga_y]) hei; else bai;

default:hei;

endcase

endelse

huang;

//----------------設定顏色------------------------

task hei;

begin

vga_r=10'b0;

vga_g=10'b0;

vga_b=10'b0;

endendtask

task bai;

begin

vga_r=10'b1111111111;

vga_g=10'b1111111111;

vga_b=10'b1111111111;

endendtask

task huang;

begin

vga_r=10'b1111111111;

vga_g=10'b1111111111;

vga_b=10'b0;

endendtask

//----------------------結束-----------------------

endmodule

OpenGL顯示文字 顯示字元

opengl並沒有直接提供顯示文字的功能,並且,opengl也沒有自帶專門的字型檔。因此,要顯示文字,就必須依賴作業系統所提供的功能了。各種流行的圖形作業系統,例如windows系統和linux系統,都提供了一些功能,以便能夠在opengl程式中方便的顯示文字。最常見的方法就是,我們給出乙個字元,給...

字元顯示原理

一 字元與字模 驅動程式當中,字元庫的資料採用了與一般的單色點陣lcd 的資料組成方式,即字模當中的乙個位代表 lcd顯示中的乙個畫素點,取點方式為從左到右,自上到下的順序。字模採用了以byte 為單位的位流結構,即當一行取點不為 8的整數倍時,補齊資料至 8位,無用位填零。資料位補齊的原則與取模的...

linux 顯示字元

linux中字元的型別 a.鍵入即可看到 字母數字字元。b.非元字元 非字母數字字元,但也不是元字元。c.元字元。元字元相關概念 1.元字元 擁有特殊含義的字元,如 2.引用元字元 在輸入時,告訴shell,希望按字面含 釋字元,而不使用其特殊含義。引用元字元有三種種方式 1 使用反斜線引用單個字元...