verilogVGA显示一个圆

来源:互联网 发布:h3c路由器查看端口8080 编辑:程序博客网 时间:2024/06/07 12:23
/*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;//---------------下面的时钟为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;endalways@(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;endalways@(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显示一个圆形----------//圆心坐标parameter ox=10'd320,oy=10'd240;//圆上的点距离圆心的距离integer rx,ry;always@(posedge vga_clk)begin       rx=vga_x-ox;       ry=vga_y-oy;endalways @(posedge vga_clk or negedge rst_n)    if (!rst_n) hei;    else if(rx*rx+ry*ry<=10000) hei;    else bai;          //----------------设置颜色------------------------          task hei;begin vga_r=10'b0; vga_g=10'b0; vga_b=10'b0;endendtasktask bai;begin vga_r=10'b1111111111; vga_g=10'b1111111111; vga_b=10'b1111111111;endendtask//----------------------结束-----------------------endmodule 

原创粉丝点击