zoukankan      html  css  js  c++  java
  • [笔记]DE2115 VGA字符汉子的显示

    代码:

    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
    
    
    		
    
    
    效果图:
  • 相关阅读:
    使用Bat自动打包并通过FTP发送到备份服务器
    IIS 注意事项
    Windows 2008 R2 IP安全策略设置
    修改远程桌面端口
    mac osx 下的apt-get,yum的代替工具 ----homebrew
    mac终端命令大全介绍
    windows 服务器设置相关
    Mac OS 下使用EXE文件
    Mybaits的运行原
    No constructor found in com.website.entity.News matching
  • 原文地址:https://www.cnblogs.com/spartan/p/2057742.html
Copyright © 2011-2022 走看看