本实验的VGA显示使用800*600的像素显示,字体的点阵数据赋值给红色信号vga_r,所以在VGA的显示器上显示的字体颜色为红色。其中字体”黑“的点阵数据在VGA显示中的XY坐标为(500~556,300~375),字体”金“的点阵数据在VGA显示中的XY坐标为(650~706,300~375)。ROM中的存储的每个字节代表8个点阵,所以需要8个时钟读取一个ROM的数据。字体”黑“在ROM中的位置从地址0开始,字体”金“在ROM中的位置从地址525开始。
向vga_cha工程添加一个VGA中文显示的verilog程序vga_char.v, VGA中文显示程序通过读取ROM中存储的点阵数据并按照VGA的显示时序把它显示到VGA显示器上。程序设计如下:
`timescale 1ns / 1ps // // Module Name: vga_char // module vga_char( input fpga_gclk, input reset_n, output vga_hs, output vga_vs, output [4:0] vga_r, output [5:0] vga_g, output [4:0] vga_b ); //-----------------------------------------------------------// // 水平扫描参数的设定1024*768 60Hz VGA //-----------------------------------------------------------// //parameter LinePeriod =1344; //行周期数 //parameter H_SyncPulse=136; //行同步脉冲(Sync a) //parameter H_BackPorch=160; //显示后沿(Back porch b) //parameter H_ActivePix=1024; //显示时序段(Display interval c) //parameter H_FrontPorch=24; //显示前沿(Front porch d) //parameter Hde_start=296; //parameter Hde_end=1320; //-----------------------------------------------------------// // 垂直扫描参数的设定1024*768 60Hz VGA //-----------------------------------------------------------// //parameter FramePeriod =806; //列周期数 //parameter V_SyncPulse=6; //列同步脉冲(Sync o) //parameter V_BackPorch=29; //显示后沿(Back porch p) //parameter V_ActivePix=768; //显示时序段(Display interval q) //parameter V_FrontPorch=3; //显示前沿(Front porch r) //parameter Vde_start=35; //parameter Vde_end=803; //-----------------------------------------------------------// // 水平扫描参数的设定800*600 VGA //-----------------------------------------------------------// parameter LinePeriod =1056; //行周期数 parameter H_SyncPulse=128; //行同步脉冲(Sync a) parameter H_BackPorch=88; //显示后沿(Back porch b) parameter H_ActivePix=800; //显示时序段(Display interval c) parameter H_FrontPorch=40; //显示前沿(Front porch d) parameter Hde_start=216; parameter Hde_end=1016; //-----------------------------------------------------------// // 垂直扫描参数的设定800*600 VGA //-----------------------------------------------------------// parameter FramePeriod =628; //列周期数 parameter V_SyncPulse=4; //列同步脉冲(Sync o) parameter V_BackPorch=23; //显示后沿(Back porch p) parameter V_ActivePix=600; //显示时序段(Display interval q) parameter V_FrontPorch=1; //显示前沿(Front porch r) parameter Vde_start=27; parameter Vde_end=627; reg[10 : 0] x_cnt; reg[9 : 0] y_cnt; reg hsync_r; reg vsync_r; reg hsync_de; reg vsync_de; wire vga_clk; wire CLK_OUT1; wire CLK_OUT2; wire CLK_OUT3; wire CLK_OUT4; //---------------------------------------------------------------- // 水平扫描计数 //---------------------------------------------------------------- always @ (posedge vga_clk) if(~reset_n) x_cnt