目标:在VGA显示器中心位置显示金色四个汉字,字符外的背景颜色为黑色,每个汉字大小为56*56,字模点阵为64*64,VGA显示模式为640*480@60。
这里涉及到字符取模,需要用到用到字符取模软件,对点阵大小进行设计,输入要显示的汉字,然后进行保存。
这里涉及到四个模块,首先是时钟生成模块,生成VGA 驱动时钟,然后是VGA时序控制模块,控制VGA图像显示,以及图像数据生成模块,生成VGA显示图像,最后是顶层模块。
时钟生成模块和VGA时序控制模块在前面的VGA显示驱动设计时已经编写好,所以这里只需对其稍加修改,下面是图像数据生成模块的代码:
module vga_pic
(
input wire vga_clk ,
input wire sys_rst_n ,
input wire [9:0] pix_x ,
input wire [9:0] pix_y ,
output reg [15:0] pix_data
);
parameter CHAR_B_H= 10'd192 , //字符开始X轴坐标
CHAR_B_V= 10'd208 ; //字符开始Y轴坐标
parameter CHAR_W = 10'd256 , //字符宽度
CHAR_H = 10'd64 ; //字符高度
parameter BLACK = 16'h0000, //黑色
WHITE = 16'hFFFF, //白色
GOLDEN = 16'hFEC0; //金色
wire [9:0] char_x ;
wire [9:0] char_y ;
reg [255:0] char [63:0] ;
assign char_x = (((pix_x >= CHAR_B_H) && (pix_x < (CHAR_B_H + CHAR_W)))
&& ((pix_y >= CHAR_B_V) && (pix_y < (CHAR_B_V + CHAR_H))))
? (pix_x - CHAR_B_H) : 10'h3FF;
assign char_y = (((pix_x >= CHAR_B_H) && (pix_x < (CHAR_B_H + CHAR_W)))
&& ((pix_y >= CHAR_B_V) && (pix_y < (CHAR_B_V + CHAR_H))))
? (pix_y - CHAR_B_V) : 10'h3FF;
always@(posedge vga_clk)
begin
char[0] <= 256'h0000000000000000000000000000000000000000000000000000000000000000;
char[1]