接着上次的随笔,既然VGA时序已经实现了,那么就显示点东西看看吧。

  想显示个圆,但是无从下手,参考了这篇文章:https://user.qzone.qq.com/1241003385/blog/1543804422

  仔细阅读了这篇文章后才理解所谓显示圆的算法很简单,圆的标准方程是(x - a) ² + (y - b) ² = r ²,只要控制显示范围满足圆的方程就可以了。

  当(x-a)2+(y-b)2<=r2区域是圆内,(x-a)2+(y-b)2>=r2的区域就是圆外。

  这里显示圆的半径是50个像素点,并且以屏幕正中心为原点所以需要满足条件:

  distance = (x-a)*(x-a) + (y-b)*(y-b) = (h_cnt-96-48 -320) *(h_cnt-96-48-320) +(v_cnt-2-33 -240) *(v_cnt-2-33 -240);

  其中96,48为行显示区域以外,320为显示行的中心,2,33为场显示区域以外,320为显示列的正中心。

  如果distance小于r2=(50)2=2500 ,说明在圆内,否则在圆外。

  代码如下:

  

  1. module vga_driver(
  2. clk         ,
  3. rst_n       ,
  4. vga_hys     ,
  5. vga_vys     ,
  6. vga_rgb
  7. );
  8. parameter       DATA_W  = 16;
  9. parameter       LCD_GREEN = 16'b00000_111111_00000;
  10. parameter       LCD_WHITE = 16'b11111_111111_11111;
  11. input         clk      ;
  12. input         rst_n    ;
  13. output        vga_hys    ;
  14. output        vga_vys    ;
  15. output [DATA_W-1:0]  vga_rgb    ;
  16. reg             vga_hys;
  17. reg             vga_vys;
  18. reg     [DATA_W-1:0]vga_rgb;
  19. reg     [9:0]   cnt_hys;
  20. reg     [9:0]   cnt_vys;
  21. reg      [19:0] distance;
  22. reg             green_area;
  23. reg             valid_area;
  24. wire            add_cnt_hys;
  25. wire            end_cnt_hys;
  26. wire            add_cnt_vys;
  27. wire            end_cnt_vys;
  28. wire                 vga_clk;
  29. VGA_PLL U0(
  30. .inclk0 (clk),
  31. .c0     (vga_clk)
  32. );
  33. always @(posedge vga_clk or negedge rst_n)begin
  34. if(!rst_n)begin
  35. cnt_hys <= 0;
  36. end
  37. else if(add_cnt_hys)begin
  38. if(end_cnt_hys)
  39. cnt_hys <= 0;
  40. else
  41. cnt_hys <= cnt_hys + 1;
  42. end
  43. end
  44. assign add_cnt_hys = 1;
  45. assign end_cnt_hys = add_cnt_hys && cnt_hys== 800-1;
  46. always @(posedge vga_clk or negedge rst_n)begin
  47. if(!rst_n)begin
  48. cnt_vys <= 0;
  49. end
  50. else if(add_cnt_vys)begin
  51. if(end_cnt_vys)
  52. cnt_vys <= 0;
  53. else
  54. cnt_vys <= cnt_vys + 1;
  55. end
  56. end
  57. assign add_cnt_vys = end_cnt_hys;
  58. assign end_cnt_vys = add_cnt_vys && cnt_vys==525-1 ;
  59. always  @(posedge vga_clk or negedge rst_n)begin
  60. if(rst_n==1'b0)begin
  61. vga_hys <= 0;
  62. end
  63. else if(add_cnt_hys && cnt_hys == 96-1)begin
  64. vga_hys <= 1;
  65. end
  66. else if(end_cnt_hys)begin
  67. vga_hys <= 0;
  68. end
  69. end
  70. always  @(posedge vga_clk or negedge rst_n)begin
  71. if(rst_n==1'b0)begin
  72. vga_vys <= 0;
  73. end
  74. else if(add_cnt_vys && cnt_vys == 2-1)begin
  75. vga_vys <= 1;
  76. end
  77. else if(end_cnt_vys)begin
  78. vga_vys <= 0;
  79. end
  80. end
  81. always  @(*)begin
  82. distance = ((cnt_hys-96-48-320)*(cnt_hys-96-48-320))+((cnt_vys-2-33-240)*(cnt_vys-2-33-240));
  83. end
  84. always  @(*)begin
  85. green_area = distance < 2500;
  86. end
  87. always  @(*)begin
  88. valid_area = cnt_hys >= (96+48)&&cnt_hys <(96+48+640) && cnt_vys >= (2+33)&&cnt_vys<(2+33+480);
  89. end
  90. always  @(posedge vga_clk or negedge rst_n)begin
  91. if(rst_n==1'b0)begin
  92. vga_rgb <= 16'h0;
  93. end
  94. else if(valid_area)
  95. begin
  96. if(green_area)
  97. begin
  98. vga_rgb <= LCD_GREEN;
  99. end
  100. else begin
  101. vga_rgb <= LCD_WHITE;
  102. end
  103. end
  104. else begin
  105. vga_rgb <= 0;
  106. end
  107. end
  108. endmodule
  109. 显示效果如下图
  110. 中间调试的过程中出现过错误,错误的显示效果是:
  111. 经过排查发现问题出在distance定义的长度上,给distance赋值比自身长度大的数据,导致数据丢失就会产生这样的结果,同样的修改distance的长度反而有意外收获。

VGA显示正圆的更多相关文章

  1. VGA显示

    VGA控制器的编写主要是了解VGA的显示标准和时序,如1024X768@60Hz,确定时钟频率(65MHz=1344X806X60),列像素时间等于时钟周期,扫描从左到右.从上到下(类似于电视扫描PA ...

  2. 基于FPGA的VGA显示设计(一)

    前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...

  3. [deviceone开发]-do_ImageView实现正圆的示例

    一.简介 我们经常需要用一个正圆形状的图片来设置头像,在do平台这个比较容易,就是通过设置圆角来实现,但是有几个小技巧需要解释一下 主要组件:do_ImageView 二.效果图 三.相关下载 htt ...

  4. 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )

    序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0; ...

  5. VmodCAM图像采集 VGA显示

    先上图 总体框图 效果图 效果不是很好,因为暂时用的是zedboard自带的VGA,其只能RGB只有3*3*3的彩色度 VmodCAM原理图 VmodCAM的zedboard管脚约束见:http:// ...

  6. vga显示彩条

    vga显示驱动程序可分为扫描行列和行列同步两个部分 //注意:只有在有效区域内给vga赋值才会有颜色变化 assign vga_b = isready ? vga_s[:] :'d0; assign ...

  7. 基于FPGA的VGA显示静态图片

    终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...

  8. 基于FPGA的Uart接收图像数据至VGA显示

    系统框图 前面我们设计了基于FPGA的静态图片显示,接下来我们来做做基于FPGA的动态图片显示,本实验内容为:由PC端上位机软件通过串口发送一幅图像数据至FPGA,FPGA内部将图像数据存储,最后扫描 ...

  9. 纠错:基于FPGA串口发送彩色图片数据至VGA显示

    今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...

随机推荐

  1. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别

    这是direct exchange写法中消息发送写法,可见下图红色框中路由键是queue队列中定义的路由键 这是topic exchange写法中消息发送写法,可见下图红色框中路由键是exchange ...

  2. 31.整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  3. UVA 11181 Possibility Given

    #include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...

  4. poj 2566 Bound Found 尺取法 变形

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2277   Accepted: 703   Spec ...

  5. Luogu2000 拯救世界

    题目链接:戳我 生成函数的入门题吧. 我们可以把条件限制转化为生成函数,然后用第i项的系数来表示一共使用n块石头的方案个数. (你问我为什么?你可以自己演算一下,或者去看大佬的博客-->这里面讲 ...

  6. R_Studio(学生成绩)使用主成分分析实现属性规约

    对11_1_4.csv成绩表进行主成分分析处理 setwd('D:\\data') list.files() #读取数据 dat=read.csv(file="11_1_4.csv" ...

  7. [CSP-S模拟测试]:陶陶摘苹果(线段树维护单调栈)

    题目传送门(内部题116) 输入格式 第一行两个整数$n,m$,如题 第二行有$n$个整数表示$h_1-h_n(1\leqslant h_i\leqslant 10^9)$ 接下来有$m$行,每行两个 ...

  8. [CSP-S模拟测试]:小盆友的游戏(数学 or 找规律)

    题目传送门(内部题110) 输入格式 第一行一个整数$N$,表示小盆友的个数. 第二行$N$个整数$A_i$,如果$A_i=-1$表示$i$目前是自由身,否则$i$是$A_i$的跟班. 输出格式 一个 ...

  9. 选题 Scrum立会报告+燃尽图 06

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8678 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  10. EBS 页面影藏“个性化页”

    以R12.1.3为例 影藏“个性化页”的方法: 修改配置文件: 个性化自助定义        值 由“是”改成“否” 注:修改之后需要清一下高速缓存,如果要显示“个性化页”则做相反配置 修改前: 修改 ...