verilog简单驱动VGA
2017-09-20 16:14
337 查看
/* 2017.9.19 gy DE2 vga 640x480 60hz ADV7123 D/A 输入时钟50MHz 低电平复位 时序: 水平同步参数h 行扫描 同步 后沿 有效视屏 前沿 总 时间us 3.8 1.9 25.4 0.6 31.7 计数 96 48 640(l) 16 800 垂直同步参数v 列扫描 同步 后沿 有效视屏 前沿 总 行数 2 33 480(w) 10 525 时间us = 行数X扫描一行所需要的时间 像素时钟25MHz yue=800x525x60 总时间 =31.7usX525X60 yue=1s 计一个数的时间为 1/25MHz or 3.8/96 */ module vga( clk,rst_n, //input vga_sync,vga_blank,vga_clk, //output ADV7123 vga_r,vga_g,vga_b,vga_hs,vga_vs //output VGA ); input clk,rst_n; output reg [7:0] vga_r,vga_g,vga_b; output reg vga_clk,vga_hs,vga_vs; output vga_blank,vga_sync; //-------------------分频------------------------- always @(posedge clk or negedge rst_n) if (!rst_n) vga_clk<=1'b0; else vga_clk<=~vga_clk; //---------------下面的时钟为vga_clk-------------- //---------------时序参数800x525------------------ parameter H_SYNC=96; parameter H_BACK=48; parameter H_LENGTH=640; parameter H_FRONT=16; parameter V_SYNC=2; parameter V_BACK=33; parameter V_WIDTH=480; parameter V_FRONT=10; reg [9:0] x,y; //不用SOG(sync on green 同步信号只在绿色信号中出现) assign vga_sync=1'b0; //---------------------计数----------------------- always@(posedge vga_clk or negedge rst_n) begin if(!rst_n) x<=10'd0; else if(x==800) x<=0; else x<=x+1'b1; end always@(posedge vga_clk or negedge rst_n) begin if(!rst_n) y<=10'd0; else if(y==525) y<=0; else if(x==800) y<=y+1'b1; end //------------通过计的数字输出同步信号--------- always@(posedge vga_clk or negedge rst_n) begin if(!rst_n) vga_hs<=1'b1; else if(x==0) vga_hs<=1'b0; else if(x==H_SYNC) vga_hs<=1'b1; end always@(posedge vga_clk or negedge rst_n) begin if(!rst_n) vga_vs<=1'b1; else if(y==0) vga_vs<=1'b0; else if(y==V_SYNC) vga_vs<=1'b1; end //----------通过横纵坐标x,y计算出显示的区域--- reg [9:0] vga_x,vga_y; always@(posedge vga_clk) begin vga_x=x-H_SYNC-H_BACK; vga_y=y-V_SYNC-V_BACK; end //---------------进行同步时消隐------------------ assign vga_blank=vga_x<H_LENGTH && vga_y<V_WIDTH; //----------通过vga_x,vga_y显示相应颜色---------- always @(posedge vga_clk or negedge rst_n) if (!rst_n) begin vga_r=8'b00000000; vga_g=8'b00000000; vga_b=8'b00000000; end else if(300<vga_x&&vga_x<340&&220<vga_y&&vga_y<260) begin vga_r=8'b00000000; vga_g=8'b00000000; vga_b=8'b00000000; end else begin vga_r=8'b11111111; vga_g=8'b11111111; vga_b=8'b11111111; end //----------------------结束----------------------- endmodule
相关文章推荐
- 7-2 Verilog VGA驱动
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
- Verilog HDL那些事_建模篇笔记(实验九:VGA驱动)
- VGA的verilog驱动
- verilog简单驱动LCD1602
- 基于Verilog的VGA驱动设计(一)VGA时序分析
- 简单的VGA字符模式驱动(二)
- 尝试用Verilog驱动VGA
- 简单的VGA字符模式驱动(一)
- 基于Verilog的VGA显示驱动
- verilog简单驱动sram
- 简单驱动编写与windbg调试
- linux设备驱动归纳总结(十一):写个简单的看门狗驱动
- mongodb的java驱动的简单使用
- linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
- Debian 安装无线网卡驱动最简单方法。
- linux usb 驱动简单介绍
- Linux设备驱动——简单的字符驱动
- 简单驱动编写