【FPGA】【VGA学习】【最简版】纯色显示
2018-03-13 14:35
411 查看
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Module Name: vga_test // ////////////////////////////////////////////////////////////////////////////////// module green_VGA( input clk, 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; reg[10 : 0] x_cnt; reg[9 : 0] y_cnt; reg[4 : 0] vga_r_reg; reg[5 : 0] vga_g_reg; reg[4 : 0] vga_b_reg; reg hsync_r; reg vsync_r; reg hsync_de; reg vsync_de; wire vga_clk; //---------------------------------------------------------------- ////////// 水平扫描计数 //---------------------------------------------------------------- always @ (posedge vga_clk) if(x_cnt == LinePeriod) x_cnt <= 1; else x_cnt <= x_cnt+ 1; //---------------------------------------------------------------- ////////// 水平扫描信号hsync,hsync_de产生 //---------------------------------------------------------------- always @ (posedge vga_clk) begin if(x_cnt == 1) hsync_r <= 1'b0; //产生hsync信号 else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1; //这里行扫描中的hsync信号的用处(猜测):帮助数据信号实现频率的同步 //在"Back porch","active video time","Front porch"时,hsync为1,其他时间为0 //注意:通过x_cnt完成了对hsync_r的调节 if(x_cnt == Hde_start) hsync_de <= 1'b1; //产生hsync_de信号 else if(x_cnt == Hde_end) hsync_de <= 1'b0; //这里的hsync_de标明了行扫描中显示在屏幕上的数据的传送时间 //当hsync_de为1时,表明正在传送有效数据,当hsync_de为0时,则表明目前没有传送有效数据 end //---------------------------------------------------------------- ////////// 垂直扫描计数 //---------------------------------------------------------------- always @ (posedge vga_clk) if(y_cnt == FramePeriod) y_cnt <= 1; else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1; //若某一行【除了最后一行】的行扫描(水平扫描)完成后,则y_cnt加一 //若最后一行的行扫描完成后,则y_cnt置一 //---------------------------------------------------------------- ////////// 垂直扫描信号vsync, vsync_de产生 //---------------------------------------------------------------- always @ (posedge vga_clk) begin if(y_cnt == 1) vsync_r <= 1'b0; //产生vsync信号 else if(y_cnt == V_SyncPulse) vsync_r <= 1'b1; //这里的vsync信号与上面的hsync信号雷同 ////这里行扫描中的vsync信号的用处(猜测):帮助数据信号实现频率的同步 ////在"Back porch","active video time","Front porch"时,vsync为1,其他时间为0 ////注意:通过y_cnt完成了对vsync_r的调节 if(y_cnt == Vde_start) vsync_de <= 1'b1; //产生vsync_de信号 else if(y_cnt == Vde_end) vsync_de <= 1'b0; end //这里的vsync_de信号与上面的hsync_de信号雷同 //注意:vsync_de是标明了允许视频data进行传输的时间(在列扫描的"back porch"及"front porch"中是可能有”hsync_de=高电平“的情况出现的) //---------------------------------------------------------------- ////////// 经VGA至显示器上,所显示的数据(想要显示出的图像) //---------------------------------------------------------------- always @(negedge vga_clk) begin vga_r_reg<=0; //VGA显示全绿 vga_g_reg<=6'b000001; vga_b_reg<=1; end assign vga_hs = hsync_r; assign vga_vs = vsync_r; assign vga_r = (hsync_de & vsync_de)?vga_r_reg:5'b00000; assign vga_g = (hsync_de & vsync_de)?vga_g_reg:6'b000000; assign vga_b = (hsync_de & vsync_de)?vga_b_reg:5'b00000; //---------------------------------------------------------------- ////////// 产生65Mhz VGA Clock //---------------------------------------------------------------- pll pll_inst ( .inclk0(clk), .c0(vga_clk), // 65.0Mhz for 1024x768(60hz) .areset(1'b0), .locked() ); endmodule
相关文章推荐
- 基于FPGA的Uart接收图像数据至VGA显示
- 基于FPGA的VGA显示静态图片
- 从FPGA搞定OV7670 VGA显示 移植到 STM32F10x TFT显示 总结及疑问(高手请进)
- FPGA学习心得——LCD1602文字滚动显示(4位传输模式、ST7066U控制芯片)
- 基于FPGA驱动VGA显示图片的小问题
- FPGA基础设计(一):VGA显示方法(文字、图形、波形)的全方面解析
- fpga控制vga显示彩色图片
- 采用FPGA实现实时边缘检测VGA显示
- 基于FPGA的VGA显示设计(二)
- fpga控制vga显示黑白图片
- Zedboard学习(七):VGA显示
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
- fpga控制vga显示彩色图片
- 基于FPGA的VGA显示,简单的历程和注释(DE2-115)
- FPGA 学习笔记(十一) VGA驱动的实现
- Fpga的vga显示设计
- Fpga的vga显示设计(一)
- FPGA学习笔记二(数码管动态显示)
- Verilog——基于FPGA的贪吃蛇游戏(VGA显示)