工程目的,用uart控制vga。(简单提升了一下上一个工程)
功能: 当输入A时才能开启数据往vga的ram中传输数据,并且uart不能控制vga开关状态。当计数到数据量最大值时,uart才能正常控制vga开关状态。当输入B时,将vga开启,正常显示(当先输入B再输入A一边更新vga图像数据一边图像显示)。当输入C时,将vga关闭。(A、B和C为16位数据)
总体框图:(实际编写全部模块放顶层模块,这样画只是为了方便观看)
module uart_ctrl_vga(
input wire clk_sys ,
input wire rst_n_sys ,
input wire rx ,
output wire [7:0]rgb ,
output wire hsync ,
output wire vsync
);
//output uart_rx
wire [7:0]uart_po_data ;
wire uart_po_flag ;
//output ctrl
wire [15:0] ram_addr ;
wire [7:0] ctrl_po_data;
wire ctrl_po_flag ;
wire vga_on_off ;
//output clk_divide
wire clk_vga ;
//output vga_pic
wire [7:0]pix_data ;
//output vga_ctrl
wire [9:0]pix_x ;
wire [9:0]pix_y ;
uart_rx uart_inst(
.clk_sys (clk_sys) ,
.rst_n_sys (rst_n_sys) ,
.rx (rx) ,
.po_data (uart_po_data),
.po_flag (uart_po_flag)
);
ctrl ctrl_inst(
.clk_sys (clk_sys) ,
.rst_n_sys (rst_n_sys) ,
.uart_po_data (uart_po_data) ,
.uart_po_flag (uart_po_flag) ,
.ram_addr (ram_addr) ,
.ctrl_po_data (ctrl_po_data) ,
.ctrl_po_flag (ctrl_po_flag) ,
.vga_on_off (vga_on_off)
);
clk_divide clk_divide_inst(
.clk_sys (clk_sys),
.rst_n_sys (rst_n_sys),
.clk_vga (clk_vga)
);
vga_pic vga_pic_inst(
.clk_vga (clk_vga) ,
.rst_n_sys (rst_n_sys) ,
.pix_x (pix_x) ,
.pix_y (pix_y) ,
.clk_sys (clk_sys) ,
.po_data (ctrl_po_data) ,
.po_flag (ctrl_po_flag) ,
.vga_on_off (vga_on_off) ,
.ram_addr (ram_addr) ,
.pix_data (pix_data)
);
vga_ctrl vga_ctrl_inst(
.clk_vga (clk_vga) ,
.rst_n_sys (rst_n_sys) ,
.pix_data (pix_data) ,
.vga_on_off