关闭

verilogVGA显示一个圆

标签: DE2vga
66人阅读 评论(0) 收藏 举报
分类:
/*
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;
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显示一个圆形----------
//圆心坐标
parameter ox=10'd320,oy=10'd240;
//圆上的点距离圆心的距离
integer rx,ry;
always@(posedge vga_clk)
begin
       rx=vga_x-ox;
       ry=vga_y-oy;
end
always @(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;
end
endtask
task bai;
begin
	 vga_r=10'b1111111111;
	 vga_g=10'b1111111111;
	 vga_b=10'b1111111111;
end
endtask
//----------------------结束-----------------------
endmodule 

0
0
查看评论

verilogVGA显示太极图案

/* 2017.9.19 gy DE2 vga 640x480 60hz ADV7123 D/A 输入时钟50MHz 低电平复位 时序: 水平同步参数h 行扫描 同步 后沿 有效视屏 前沿 总 时间us 3.8 1.9 ...
  • qq_38204686
  • qq_38204686
  • 2017-09-22 15:23
  • 74

关于VGA的显示原理和Verilog语言实现/学习笔记

首先: VGA驱动显示器用的是扫描的方式,逐行扫描the HS (Horizontal Synchronization) 逐行扫描是扫描从屏幕的左上角一点开始,由左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置, 在这期间CRT(阴极射线显像管)对电子束进行消隐,每行结束时,用行同...
  • csg3140100993
  • csg3140100993
  • 2016-12-30 15:20
  • 2260

Verilog实现VGA显示控制器

Verilog实现VGA显示控制器 具体原理就不详细讲了,这里给出完整的代码以及Nexys3开发板的引脚文件。 最终实现的效果是: 以 640*480 的分辨率在显示器屏幕显示一个矩形方块,方块在屏幕中以 45 度的角度、60 像素/秒的速度移动,到...
  • u013058160
  • u013058160
  • 2014-12-15 17:28
  • 2657

(学习笔记)stm32f4在液晶上画圆及填充圆的几种方法

先说下画圆,根据圆的对称性将圆8等分,求出其中一份,其他可以通过坐标变换得到。得到过程可以百度中点画圆法。 程序: void LCD_Draw_Circle(uint16_t Xpos,uint16_t Ypos,uint16_t Radius) { int16_t mx=Xpos,my=Y...
  • wanglantian1
  • wanglantian1
  • 2016-08-21 17:54
  • 2803

第 4 课:创建图形对象

 第 4 课:创建图形对象JavaFX GUI 简介对 JavaFX 中提供的丰富的内置图形、组件和效果集合进行了介绍。但是,如何使用这些元素为您的应用程序定制或创建更丰富的画面?本课向您介绍了如何组合几个简单的元素来创建一个具有明暗效果的按钮,该按钮会投下映像,就像放在一个可以产生反射的...
  • Dream_JavaWorld
  • Dream_JavaWorld
  • 2008-12-28 00:18
  • 662

显示一个圆,并可以移动

这个问题虽简单,却“五脏俱全”。 1,需求 a,显示圆 b,移动圆 2,概要设计 a,已知圆心和半径,显示圆 b,单击圆开始移动,再次单击结束移动 3,详细设计 a,如果一个点到圆心的距离等于(小于)半径,则在圆上(圆内)。 b,移动过程中以虚线显示。 4,编码 1,新建一个单...
  • he_zhidan
  • he_zhidan
  • 2013-05-16 11:20
  • 1028

java上机 第五周 任务3 创建一个圆形类

/* * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:创建一个圆形类 * 作 者...
  • xgcfxl2011
  • xgcfxl2011
  • 2012-09-27 23:05
  • 2052

字模提取软件的使用(pctolCD2002,基于FPGA的VGA显示汉字)

字模软件http://pan.baidu.com/s/1mi7LI8S(有问题的留言) 设置参数 选择逐行式(指的是一个字模,按行计数) 取模方向:顺向,高位在前 本人取得字模是基于FPGA的VGA显示,而virilog hdl语言的数组是高位在前 ,符合其语法规则,如 reg [120:...
  • cchulu
  • cchulu
  • 2017-07-10 15:13
  • 291

java 用“*”在控制台打印出一个近似圆

import java.math.*; public class circle { public void printCircle(int r) { int area_X=2*r;//要画圆的的外接正方形区域的X轴长度 int area_Y=2*r;//要画圆的的外接正方形区域的Y轴长度 int ...
  • Nut_boy
  • Nut_boy
  • 2017-10-23 15:40
  • 143

一段好玩的python代码--随机生成圆

for i in range(0,25): radius = np.random.randint(5,high = 200)#生成1个[5,200)的随机数 color = np.random.randint(0,high = 256,size = (3,)).tolist()#生成...
  • gzj_1101
  • gzj_1101
  • 2017-07-17 20:23
  • 341
    个人资料
    • 访问:9837次
    • 积分:724
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论