verilogVGA显示太极图案
2017-09-22 15:23
267 查看
/* 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 [9: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; //---------------时序参数800x525------------------ parameter H_SYNC=10'd96; parameter H_BACK=10'd48; parameter H_LENGTH=10'd640; parameter H_FRONT=10'd16; parameter V_SYNC=10'd2; parameter V_BACK=10'd33; parameter V_WIDTH=10'd480; parameter V_FRONT=10'd10; 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 //--------------以上为了时序用vga_clk 以下为了计算精确用clk这个时钟----------------------- //----------通过横纵坐标x,y计算出显示的区域--- reg [9:0] vga_x,vga_y; always@(posedge 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显示一个太极---------- //圆心坐标 parameter ox1=10'd320,oy1=10'd190; parameter ox=10'd320,oy=10'd240; parameter ox2=10'd320,oy2=10'd290; //圆上的点距离圆心的距离 integer rx1,ry1; integer rx,ry; integer rx2,ry2; always@(posedge clk) begin rx1=vga_x-ox1; ry1=vga_y-oy1; rx=vga_x-ox; ry=vga_y-oy; rx2=vga_x-ox2; ry2=vga_y-oy2; end //先画小圆 4000 后画大圆 always @(posedge clk or negedge rst_n) if (!rst_n) hei; else if(rx1*rx1+ry1*ry1<=100) bai; else if(rx2*rx2+ry2*ry2<=100) hei; else if(rx1*rx1+ry1*ry1<=2500) hei; else if(rx2*rx2+ry2*ry2<=2500) bai; else if(rx*rx+ry*ry<=10000) begin if(vga_x<320) bai; else hei; end else if(vga_x<320) hei; else bai; //----------------设置颜色------------------------ task hei; begin vga_r=10'b0; vga_g=10'b0; vga_b=10'b0; end endtask task bai; begin vga_r=10'b1111111111; vga_g=10'b1111111111; vga_b=10'b1111111111; end endtask //----------------------结束----------------------- endmodule
相关文章推荐
- verilog VGA显示
- verilog实现的VGA显示自反弹移动小方块
- VERILOG代码:VGA显示字符串的解读
- Verilog编写VGA显示的小游戏
- verilogVGA显示字符
- 数字电路设计之VGA显示条形图的verilog实现
- Verilog VGA 静态显示图片
- 数字电路设计之VGA的字母显示的verilog实现
- verilog实现VGA显示方块屏幕保护
- Verilog——基于FPGA的贪吃蛇游戏(VGA显示)
- 基于nios II的verilog VGA字符显示控制
- Verilog的VGA显示控制
- verilogVGA显示一个圆
- 单色VGA显示verilogHDL通用代码
- 关于VGA的显示原理和Verilog语言实现/学习笔记
- 基于Verilog的VGA显示驱动
- 网页视频课件显示不完全,向Windows注册VGAPlayer.ocx插件!
- 求“用*打出一个太极图案”
- 尝试用Verilog驱动VGA
- acmore|acmore.cc1003编写一个程序,显示图案