您的位置:首页 > 其它

[笔记]DE2-115 VGA字符汉子的显示

2011-05-26 07:40 260 查看
代码:

module vga_controler(
input CLOCK_50,
input[3:0] KEY,
output VGA_CLK,	//should be 25MHz
output[7:0] VGA_R,
output[7:0] VGA_G,
output[7:0] VGA_B,
output VGA_BLANK_N,
output VGA_SYNC_N,
output VGA_HS,
output VGA_VS
);
reg[9:0] H_Cont;	//行扫描计数器
reg[9:0] V_Cont;	//列扫描计数器
wire[7:0] vga_r;
wire[7:0] vga_g;
wire[7:0] vga_b;
reg vga_hs;
reg vga_vs;
reg[10:0] X;
reg[10:0] Y;
assign VGA_R=vga_r;
assign VGA_G=vga_g;
assign VGA_B=vga_b;
assign VGA_HS=vga_hs;
assign VGA_VS=vga_vs;

//Horizontal Parameter  16+96+48+640=800
parameter H_FRONT=16;
parameter H_SYNC=96;
parameter H_BACK=48;
parameter H_ACT=640;
parameter H_BLANK=H_FRONT+H_SYNC+H_BACK;
parameter H_TOTAL=H_FRONT+H_SYNC+H_BACK+H_ACT;
//Vertical Parameter	11+2+32+480=525
parameter V_FRONT=10;
parameter V_SYNC=2;
parameter V_BACK=33;
parameter V_ACT=480;
parameter V_BLANK=V_FRONT+V_SYNC+V_BACK;
parameter V_TOTAL=V_FRONT+V_SYNC+V_BACK+V_ACT;

//parameter X_Start=H_BACK+H_SYNC;
//parameter Y_Start=V_BACK+V_SYNC;
wire CLK_25;	//VGA Signal 460x480@60Hz Pixel freq:800*525*59.94=25.175MHz
wire RST_N;

// Generator DAC_CLOCK 25MHz
pll	pll_inst (
.inclk0 ( CLOCK_50 ),
.c0 ( CLK_25 )
);
//Select DAC CLOCK
assign VGA_CLK=CLK_25;
assign VGA_SYNC_N=1'b0;	//If not SOG, Sync input should be tied to 0;
assign VGA_BLANK_N=~((H_Cont<H_BLANK)||(V_Cont<V_BLANK));	//VGA logic 0 active, VGA_BLANK=(H_Cont<H_BLANK)||(V_Cont<V_BLANK);
//assign VGA_BLANK_N=H_SYNC&&V_SYNC;
assign RST_N=KEY[0];

//Horizontal Generator:Refer to the pixel clock
always@(posedge CLK_25, negedge RST_N)begin
if(!RST_N)begin
H_Cont<=0;
vga_hs<=1;
X<=0;
end
else begin
if(H_Cont<H_TOTAL)
H_Cont<=H_Cont+1'b1;
else
H_Cont<=0;
//horizontal Sync
if(H_Cont==H_FRONT-1)	//Front porch end
vga_hs<=1'b0;
if(H_Cont==H_FRONT+H_SYNC-1)
vga_hs<=1'b1;
//Current X
if(H_Cont>=H_BLANK)
X<=H_Cont-H_BLANK;
else
X<=0;
end
end
//vertical Generator: Refer to the horizontal sync
always@(posedge VGA_HS, negedge RST_N)begin
if(!RST_N)begin
V_Cont<=0;
vga_vs<=1;
Y<=0;
end
else begin
if(V_Cont<V_TOTAL)
V_Cont<=V_Cont+1'b1;
else
V_Cont<=0;
//Vertical Sync
if(V_Cont==V_FRONT-1)
vga_vs<=1'b0;
if(V_Cont==V_FRONT+V_SYNC-1)
vga_vs<=1'b1;
//Current Y
if(V_Cont>=V_BLANK)
Y<=V_Cont-V_BLANK;
else
Y<=0;
end
end

//有效显示标志位产生
/*
reg valid_yr;	//行显示有效信号
always @ (posedge CLK_25 or negedge RST_N)
if(!RST_N) valid_yr <= 1'b0;
else if(V_Cont == 10'd32) valid_yr <= 1'b1;
else if(V_Cont == 10'd512) valid_yr <= 1'b0;

wire valid_y = valid_yr;

reg valid_r;	// VGA有效显示区标志位
always @ (posedge CLK_25 or negedge RST_N)
if(!RST_N) valid_r <= 1'b0;
else if((H_Cont == 10'd143) && valid_y) valid_r <= 1'b1;
else if((H_Cont == 10'd783) && valid_y) valid_r <= 1'b0;

wire valid = valid_r;	*/
wire valid;
assign valid=(H_Cont>X)&&(H_Cont<X+H_ACT)&&(V_Cont>Y)&&(V_Cont<Y+V_ACT);
//wire[9:0] x_dis;		//横坐标显示有效区域相对坐标值0-639
wire[9:0] y_dis;		//竖坐标显示有效区域相对坐标值0-479
//assign x_dis = H_Cont - 10'd143;
assign y_dis = V_Cont - 10'd33;
//--------------------------------------------------

//--------------------------------------------------
// VGA色彩信号产生
/*
RGB = 000  	黑色	RGB = 100	红色
= 001  	蓝色		= 101	紫色
= 010	绿色		= 110	黄色
= 011	青色		= 111	白色
*/

//www.njodin.com
/*
parameter 	char_line0 = 32'h00000000,
char_line1 = 32'h00000000,
char_line2 = 32'h00000000,
char_line3 = 32'h38063000,
char_line4 = 32'h44023000,
char_line5 = 32'h82020000,
char_line6 = 32'h82020000,
char_line7 = 32'h821E70DC,
char_line8 = 32'h82021062,
char_line9 = 32'h82421042,
char_linea = 32'h82421042,
char_lineb = 32'h82421042,
char_linec = 32'h44261042,
char_lined = 32'h381B7CE7,
char_linee = 32'h00000000,
char_linef = 32'h00000000;*/
//www.njodin.com
/*
parameter 	char_line0 = 56'h0000000000000000000000000000,
char_line1 = 56'h0000000000000000000000000000,
char_line2 = 56'h0000000000000000000000000000,
char_line3 = 56'h00000000000C0002180000000000,
char_line4 = 56'h0000000000040002100000000000,
char_line5 = 56'h0000000000000002000000000000,
char_line6 = 56'h0000000000000002000000000000,
char_line7 = 56'hDBDBDB005E0C3C7E185E003C3CF7,
char_line8 = 56'hDADADA00620C46461862004646DB,
char_line9 = 56'h5A5A5A00420C42421842004042DB,
char_linea = 56'h6A6A6A00420C42421842004042DB,
char_lineb = 56'h66666600420C42461842004242DB,
char_linec = 56'h64646460420C66661842606666DB,
char_lined = 56'h24242460420C183A1842603818DB,
char_linee = 56'h00000000004C0000000000000000,
char_linef = 56'h0000000000780000000000000000;
*/
parameter 	char_line0 = 112'h0000000000000000000000000000,
char_line1 = 112'h0000000000000000000000000000,
char_line2 = 112'h0000000000000000000000000000,
char_line3 = 112'h00000000000C0002180000000000,
char_line4 = 112'h0000000000040002100000000000,
char_line5 = 112'h0000000000000002000000000000,
char_line6 = 112'h0000000000000002000000000000,
char_line7 = 112'hDBDBDB005E0C3C7E185E003C3CF7,
char_line8 = 112'hDADADA00620C46461862004646DB,
char_line9 = 112'h5A5A5A00420C42421842004042DB,
char_linea = 112'h6A6A6A00420C42421842004042DB,
char_lineb = 112'h66666600420C42461842004242DB,
char_linec = 112'h64646460420C66661842606666DB,
char_lined = 112'h24242460420C183A1842603818DB,
char_linee = 112'h00000000004C0000000000000000,
char_linef = 112'h0000000000780000000000000000;

//南京欧帝科技
parameter 	    char_line00 = 192'h000000000000000000000000000000000000000000000000,
char_line01 = 192'h000000000000000000000000000000000000000000000000,
char_line02 = 192'h000100000002000000000000000600000000000000000000,
char_line03 = 192'h0001C0000003800000000000000380000000070000601800,
char_line04 = 192'h0001C0000001C0000000180000018000000C038000701C00,
char_line05 = 192'h000180000000C00000001C0000000000000E030000601C00,
char_line06 = 192'h0001800000000000000E18000000FE000038030000600C00,
char_line07 = 192'h00019C0000001FF008FC1000003FC0000060030000600800,
char_line08 = 192'h0001FC00000FFFF00FC030000010700000E0330000600800,
char_line09 = 192'h003FC0001FFC00000C102000000C600003303B0000600FC0,
char_line0a = 192'h000300000E0000000C1861E0000C41C000300B0000607F00,
char_line0b = 192'h0003018000003C000C1C5FE000045FE00026030000F9F800,
char_line0c = 192'h00021FE00003FE000E18E0C0060FE070003E03000FE01800,
char_line0d = 192'h0007E0F0007C1C000D98818007F3007803E0730000601800,
char_line0e = 192'h0DF8E070003018000CF12100060300C03F60330000601800,
char_line0f = 192'h0610C060003018000C72380006010C001860030C00681F00,
char_line10 = 192'h0618C060003018000C7010000C01FE0000F803FE00707F80,
char_line11 = 192'h0608B0600017F8000C7010000C7F060001AC1F800063C300,
char_line12 = 192'h0601F060001900000C583000086106000123F30001E00300,
char_line13 = 192'h063F00600001C0000CD83000006106000220030003618200,
char_line14 = 192'h02030060004088000988380000610600042003001E606600,
char_line15 = 192'h02033C600040870009082C0000610600082003003C603600,
char_line16 = 192'h0203F06000C083800A00640000611E001020030018601C00,
char_line17 = 192'h027F006000C081C00800460000010C002020030000601C00,
char_line18 = 192'h06030060018080C0083CC300000104000020030000603F00,
char_line19 = 192'h060300E0018080401FF0838000010000006003000060E380,
char_line1a = 192'h060304E0010080001C0101E0000100000060030001E3C1F0,
char_line1b = 192'h060303C0000F8000000601F8000100000020010000E400FE,
char_line1c = 192'h020301C0000780000000007C000100000020010000400000,
char_line1d = 192'h000001C00001000000000000000100000000010000000000,
char_line1e = 192'h000000800000000000000000000100000000000000000000,
char_line1f = 192'h000000000000000000000000000000000000000000000000;
reg[6:0] char_bit;	//显示位计算
reg[7:0] char_bit1;	//显示位计算

always @(posedge CLK_25 or negedge RST_N)
if(!RST_N) begin char_bit <= 7'd111;char_bit1<=8'd191; end
else if(H_Cont == 10'd402) char_bit <= 7'd111;	//显示最高位数据
else if(H_Cont == 10'd362) char_bit1<=8'd191;
else if(H_Cont > 10'd402 && H_Cont < 10'd516&&y_dis>=231&&y_dis<=246) char_bit <= char_bit-1'b1;	//依次显示后面的数据
else if(H_Cont > 10'd362 && H_Cont < 10'd556&&y_dis>=247&&y_dis<=278) char_bit1 <= char_bit1-1'b1;

reg[23:0] vga_rgb;	// VGA色彩显示寄存器
always @ (posedge CLK_25)
if(!valid) vga_rgb <= 23'd0;
//else if(H_Cont > 10'd442 && H_Cont < 10'd474) begin
else if(H_Cont > 10'd362&& H_Cont < 10'd556) begin		//555-363=192
case(y_dis)
10'd231: if(char_line0[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;	//红色
else vga_rgb <= 24'b00000000_11111111_00000000;	//绿色
10'd232: if(char_line1[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd233: if(char_line2[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd234: if(char_line3[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd235: if(char_line4[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd236: if(char_line5[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd237: if(char_line6[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd238: if(char_line7[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd239: if(char_line8[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd240: if(char_line9[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd241: if(char_linea[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd242: if(char_lineb[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd243: if(char_linec[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd244: if(char_lined[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd245: if(char_linee[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd246: if(char_linef[char_bit]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;

10'd247: if(char_line00[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd246: if(char_line01[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd249: if(char_line02[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd250: if(char_line03[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd251: if(char_line04[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd252: if(char_line05[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd253: if(char_line06[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd254: if(char_line07[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd255: if(char_line08[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd256: if(char_line09[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd257: if(char_line0a[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd258: if(char_line0b[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd259: if(char_line0c[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd260: if(char_line0d[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd261: if(char_line0e[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd262: if(char_line0f[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd263: if(char_line10[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd264: if(char_line11[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd265: if(char_line12[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd266: if(char_line13[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd267: if(char_line14[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd268: if(char_line15[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd269: if(char_line16[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd270: if(char_line17[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd271: if(char_line18[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd272: if(char_line19[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd273: if(char_line1a[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd274: if(char_line1b[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd275: if(char_line1c[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd276: if(char_line1d[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd277: if(char_line1e[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
10'd278: if(char_line1f[char_bit1]) vga_rgb <= 24'b11111111_00000000_00000000;
else vga_rgb <= 24'b00000000_11111111_00000000;
default: vga_rgb <= 24'h000000;
endcase
end
else vga_rgb <= 24'h000000;
//r,g,b控制液晶屏颜色显示

assign vga_r = vga_rgb[23:16];
assign vga_g = vga_rgb[15:8];
assign vga_b = vga_rgb[7:0];

endmodule


效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: