/*
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 使用反斜線引用單個字元...