FPGA实现VGA显示(三)——————单个字符显示

这里笔者首先记录一个问题,给自己提个醒,所有的模块都有一点点的问题,在行数列数都可能有一行像素的误差,有可能是在驱动和显示模块的问题,等后面修改,这里第一次做,只要不影响显示,实现功能。

字符显示只修改vga_display模块,其他模块参考FPGA实现VGA显示(二)——————color_bar显示及方框移动(参考开拓者FPGA开发指南)

字符显示相对较简单,主要是控制每一个像素点的黑白,通过取模软件,取子模,最后显示。笔者首先使用黑金提供的取模软件。

FPGA实现VGA显示(三)——————单个字符显示_第1张图片

取子模成功后,就是代码书写,首先我取的是黑金的黑字,后面会总结26个英文字母及ROM读取子模。这里先总结黑字的显示方法。不知道是在取模时候软件的问题还是其他问题,取出来的子模有两个,笔者自己用眼瞅,直接去掉了另一个。这个软件个人感觉不是很好使,后面还有一个比较好使的软件。

代码

module vga_display_char(vga_clk,rst_n,
	x_pixel,y_pixel,
	pixel_data
    );
//---------------------------------
input    			  vga_clk	;
input 					rst_n	;
input 		[9:0]	  x_pixel	;
input 		[9:0]	  y_pixel	;
//---------------------------------
output 	reg	[15:0]	  pixel_data;
//---------------------------------
//---------------------------------
parameter white = 16'b11111_111111_11111   ;
parameter black = 16'b00000_000000_00000   ;
parameter red   = 16'b11111_000000_00000   ;
parameter green = 16'b00000_111111_00000   ;
parameter bule  = 16'b00000_000000_11111   ;
//---------------------------------
//28*63
reg [64:0] char [27:0];
always@(posedge vga_clk)
begin
	char[0 ] <= 64'h0000000000000000;
	char[1 ] <= 64'h0000000000000000;
	char[2 ] <= 64'h0000000000000000;
	char[3 ] <= 64'h000000007FC00000;
	char[4 ] <= 64'h000003FFFFFC0000;
	char[5 ] <= 64'h000FFFFE07FE0000;
	char[6 ] <= 64'h0007F0FFFFFC0000;
	char[7 ] <= 64'h0003F07FFFF00000;
	char[8 ] <= 64'h0003FFFFEFE00000;
	char[9 ] <= 64'h0001FFFF9FC00000;
	char[10] <= 64'h0001F87E1F800000;
	char[11] <= 64'h0000FDFFFF000000;
	char[12] <= 64'h0000FFFE00000000;
	char[13] <= 64'h0000787E1C000000;
	char[14] <= 64'h000007FFFF800000;
	char[15] <= 64'h0001FFFF00000000;
	char[16] <= 64'h0000007E1F800000;
	char[17] <= 64'h00000FFFFFE00000;
	char[18] <= 64'h001FFFFF80000000;
	char[19] <= 64'h0001E01C01F80000;
	char[20] <= 64'h00F8FC3FE0FF0000;
	char[21] <= 64'h01F8FF0FF03FE000;
	char[22] <= 64'h03F87F87F01FF000;
	char[23] <= 64'h07F81F00000FE000;
	char[24] <= 64'h07F000000003C000;
	char[25] <= 64'h07C0000000000000;
	char[26] <= 64'h0000000000000000;
	char[27] <= 64'h0000000000000000;
end

//开一个绿色方框,为320*240的大小,其余部分为蓝色
/*字为白底黑字,这里可以将很多字看成一个通过子模显示,所以这个方法也是可以用来显示多个字符的*/
always@(posedge vga_clk or negedge rst_n)
begin
	if(!rst_n)
		pixel_data <= black;
	else 
		if(x_pixel <= 320 && y_pixel <= 240)
			if(x_pixel <= 64 && y_pixel <= 28)
				if(char[y_pixel][x_pixel])
					pixel_data <= black;
				else 
					pixel_data <= white;
			else 
				pixel_data <= green;
		else 
			pixel_data <= bule;
end

endmodule

 

你可能感兴趣的:(FPGA逻辑篇)