I 设计思路
在屏幕的中央显示四个汉字
驱动方法与前两节相同,仅显示内容有所差异
II 汉字取模
想要显示汉字需要先将汉字进行取模操作 这里汉字的大小是16x16
取模软件:https://download.csdn.net/download/helloworld573/12336962
使用步骤如下:
III 代码部分
module vga_display(
input vga_clk, //VGA驱动时钟
input sys_rst_n, //复位信号
input [ 9:0] pixel_xpos, //像素点横坐标
input [ 9:0] pixel_ypos, //像素点纵坐标
output reg [15:0] pixel_data //像素点数据,
);
//parameter define
parameter H_DISP = 10'd640; //分辨率——行
parameter V_DISP = 10'd480; //分辨率——列
localparam POS_X = 10'd288; //字符区域起始点横坐标
localparam POS_Y = 10'd232; //字符区域起始点纵坐标
localparam WIDTH = 10'd64; //字符区域宽度
localparam HEIGHT = 10'd16; //字符区域高度
localparam RED = 16'b11111_000000_00000; //字符颜色
localparam BLUE = 16'b00000_000000_11111; //字符区域背景色
localparam BLACK = 16'b00000_000000_00000; //屏幕背景色
//reg define
reg [63:0] char[15:0]; //字符数组
//数组中有十六个元素每个元素都是六十四位的
//类似于二维数组
//wire define
wire [ 9:0] x_cnt;
wire [ 9:0] y_cnt;
assign x_cnt = pixel_xpos - POS_X; //像素点相对于字符区域起始点水平坐标
assign y_cnt = pixel_ypos - POS_Y; //像素点相对于字符区域起始点竖直坐标
//给字符数组赋值,显示四个汉字,汉字大小为16*16
always @(posedge vga_clk) begin
//char[0][0] 是指char[0]的最低位
//char[0][63] 是指char[0]的最高位 这是和4二维数组有所区别的
char[0] <= 64'h2090020000800000;
char[1] <= 64'h2090020800807FF8;
char[2] <= 64'h27FE3FD008800010;
char[3] <= 64'hA890022004800020;
char[4] <= 64'h73FC024024800040;
char[5] <= 64'h2294FFFE10800180;
char[6] <= 64'hFBFC010010800100;
char[7] <= 64'h229402000080FFFE;
char[8] <= 64'h73FC0C10FFFE0100;
char[9] <= 64'h680018E001000100;
char[10] <= 64'hA9F82F0001400100;
char[11] <= 64'h2108480802200100;
char[12] <= 64'h21F8880804100100;
char[13] <= 64'h2108080808080100;
char[14] <= 64'h21F807F830040500;
char[15] <= 64'h21080000C0040200;
end
//给不同的区域绘制不同的颜色
always @(posedge vga_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
pixel_data <= BLACK;
else begin
if((pixel_xpos >= POS_X) && (pixel_xpos < POS_X + WIDTH)
&& (pixel_ypos >= POS_Y) && (pixel_ypos < POS_Y + HEIGHT)) begin
//这个大if圈定了字符的区域
if(char[y_cnt][10'd63 - x_cnt])
//这样才能从char[y_cnt]的高位向低位读
pixel_data <= RED;
//绘制字符为红色
else
pixel_data <= BLUE; //绘制字符区域背景为蓝色
end
else
pixel_data <= BLACK; //绘制屏幕背景为黑色
end
end
endmodule