基于FPGA驱动VGA显示图片的小问题

         学习VGA显示图片的过程中,遇到了一个小问题,我在显示屏上开了一个60x60的框,放了一张图片进去显示,但是最终的结果如下图所示。

  出现了一个竖黑边,看了看代码,分析了一下逻辑没问题,然而看这个显示那肯定是有问题的,然后仿真了一下看看,时序图如下。

正确的时序

错误的时序

  我这是的是当行计数器记到200和场计数器记到200的时候显示ROM中的数据,在显示屏中开出一个60x60的正方形显示区域,对比上两幅图可得,第二幅图在当行计数器计数到200的时候lcd_data本应该是ROM里的数据,但是却输出的是16’h00,这是因为我原始的代码写的是当行计数器记到200的时候给ROM地址加1,然后有个使能信号将ROM的输出读出,但是实际上行计数记到200的同时ROM地址已经加1,那么ROM的第一个数据就没法读出来,然后从第二个数据开始显示,即每一行的第一个数据都没有给出所以最终会显示出一个竖黑边,那么这个问题怎么解决呢?很简单,就是在行计数器记到199的时候给使能信号,所以当显示屏显示第200个数据的时候,ROM的第一个数据正好读出,代码如下:显示结果如下

 1 //---------------------------------------------
 2 //addra
 3 always @(posedge clk or negedge rst_n)begin
 4     if(!rst_n)
 5         addra <= 16'd0;
 6     else if(addra == 3600 - 1'b1)
 7         addra <= 16'd0;
 8     else if(lcd_x >= 200 && lcd_x < 260 && lcd_y >= 200 && lcd_y < 260)
 9         addra <= addra + 1'b1;
10     else
11         addra <= addra;
12 end
13 
14 //-----------------------------------------------------------------------
15 //pic_en
16 reg     pic_en;
17 always @(posedge clk or negedge rst_n)begin
18     if(!rst_n)
19         pic_en <= 1'b0;
20     else if(lcd_x >= 200 && lcd_x < 260 && lcd_y >= 200 && lcd_y < 260)
21         pic_en <= 1'b1;
22     else 
23         pic_en <= 1'b0;
24 end
25 
26 //-----------------------------------------------------------------------
27 //data_en
28 reg     data_en;
29 always @(posedge clk or negedge rst_n)begin
30     if(!rst_n)
31         data_en <= 1'b0;
32     else if(lcd_x >= 199 && lcd_x < 259 && lcd_y >= 200 && lcd_y < 260)
33         data_en <= 1'b1;
34     else 
35         data_en <= 1'b0;
36 end    
37     
38 //lcd_data    
39 reg     [15:0]    lcd_data_r0;
40 reg     [15:0]    lcd_data_r1;
41     
42 always @(posedge clk or negedge rst_n)begin
43     if(!rst_n)
44         lcd_data_r0 <= 16'b0;
45     else if(lcd_y > 0 && lcd_y <= 150)
46         lcd_data_r0 <= `WHITE;
47     else if(lcd_y > 150 && lcd_y <= 350)
48         lcd_data_r0 <= `GREEN;
49     else if(lcd_y > 350 && lcd_y <= 480)
50         lcd_data_r0 <= `BLUE;
51     else 
52         lcd_data_r0 <= 16'b0;
53 end
54
55 always @(posedge clk or negedge rst_n)begin
56     if(!rst_n)
57         lcd_data_r1 <= 16'b0;
58     else if(pic_en == 1'b1)
59         lcd_data_r1 <= douta;
60     else
61         lcd_data_r1 <= 16'b0;
62 end
63     
64 //assign lcd_data = (pic_en == 1'b1)? `CYAN: lcd_data_r0;//开出一个紫颜色的框
65 
66 assign lcd_data = (pic_en == 1'b1)? lcd_data_r1: lcd_data_r0;
转载请注明出处:NingHeChuan(宁河川)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏挖坑填坑

.net core 项目中几款常用类库收藏

例子源码:https://github.com/yiershan/DonetSpider

1113
来自专栏Crossin的编程教室

【编程课堂】词云 wordcloud

本周为大家带来炫酷好玩的 wordcloud 词云构造库。 使用 wordcloud 可以做出这样的图片: ? 还可以做出这样的: ? 接下来,我们来学习如何制...

37411
来自专栏点滴积累

geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)

目录 前言 实现过程 总结 一、前言        上一篇文章介绍了如何使用Geotrellis渲染单波段的栅格数据,已然很是头疼,这几天不懈努力之后工作又进了...

3425
来自专栏大数据挖掘DT机器学习

利用Python绘制MySQL数据图实现数据可视化

第1步:确保MySQL已安装且在运行 安装教程: 亲测:MySQL安装与python下的MySQLdb使用(附软件与模块包) 第2步:使用Python连接...

6115
来自专栏IT开发技术与工作效率

dot 语言画类图和 UML 关系环境变量与命令行VSCode (实时预览编辑器)类图一对多多对多UML(统一建模语言)关系其他学习链接

3546
来自专栏GIS讲堂

dojo chart生成函数

823
来自专栏菩提树下的杨过

"RDLC报表"速成指南

RDLC报表是微软自家的报表,已经集成在vs2010中,相对水晶报表更轻量级,更重要的是:可直接在web项目中使用。 使用步骤: 一、创建DataSet 右击-...

22510
来自专栏高爽的专栏

登录之验证码

       产生验证码,MakeCertPic.java: public class MakeCertPic { // 验证码图片中可以出现的字符集,可...

2690
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理

前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,...

1999
来自专栏小鹏的专栏

ubuntu下C++如何调用matlab程序

实验平台:   ubuntu  matlab R2016b   g++ 步骤: 1.    设置matlab的编译器 在命令行窗口下,输入并执行如下命令:m...

24710

扫码关注云+社区