1. 本次使用的是cyclone4开发板,先看下原理图,因为右边的RGB应该是模拟信号量,但是本次例程只接了3根线,那就是说颜色只有8种。

2. 代码,输出信号有R,G,B三色,就是上图右边的,行同步信号(扫描完一行),场同步信号。VGA收发双方没有时钟信号做同步,但是通常会约定发送方有一个基本的时钟,行同步信号HSYNC在每行开始的时候产生一个固定宽度的高脉冲。场同步信号VSYNC在每帧(即一次全屏的图像)开始的时候产生一个固定宽度的高脉冲。我对关键的信号,画了时序图,发现不是很理解程序的机制。

module VGA(
clock,
switch,
disp_RGB,
hsync,
vsync
);
input clock; //系统输入时钟 50MHz
input [:]switch;
output [:]disp_RGB; //VGA数据输出
output hsync; //VGA行同步信号
output vsync; //VGA场同步信号 reg [:] hcount; //VGA行扫描计数器
reg [:] vcount; //VGA场扫描计数器
reg [:] data;
reg [:] h_dat;
reg [:] v_dat; //reg [9:0] timer; reg flag;
wire hcount_ov;
wire vcount_ov;
wire dat_act;
wire hsync;
wire vsync;
reg vga_clk;
//VGA行、场扫描时序参数表
parameter hsync_end = 'd95,
hdat_begin = 'd143,
hdat_end = 'd783,
hpixel_end = 'd799,
vsync_end = 'd1,
vdat_begin = 'd34,
vdat_end = 'd514,
vline_end = 'd524; always @(posedge clock)
begin
vga_clk = ~vga_clk;
end //************************VGA驱动部分*******************************
//行扫描
always @(posedge vga_clk)
begin
if (hcount_ov)
hcount <= 'd0;
else
hcount <= hcount + 'd1;
end
assign hcount_ov = (hcount == hpixel_end);
//场扫描
always @(posedge vga_clk)
begin
if (hcount_ov)
begin
if (vcount_ov)
vcount <= 'd0;
else
vcount <= vcount + 'd1;
end
end
assign vcount_ov = (vcount == vline_end);
//数据、同步信号输
assign dat_act = ((hcount >= hdat_begin) && (hcount < hdat_end))
&& ((vcount >= vdat_begin) && (vcount < vdat_end));
assign hsync = (hcount > hsync_end);
assign vsync = (vcount > vsync_end);
assign disp_RGB = (dat_act) ? data : 'h00; //************************显示数据处理部分*******************************
//图片显示延时计数器
/*always @(posedge vga_clk)
begin
flag <= vcount_ov;
if(vcount_ov && ~flag)
timer <= timer + 1'b1;
end
*/ always @(posedge vga_clk)
begin
case(switch[:])
'd0: data <= h_dat; //选择横彩条
'd1: data <= v_dat; //选择竖彩条
'd2: data <= (v_dat ^ h_dat); //产生棋盘格
'd3: data <= (v_dat ~^ h_dat); //产生棋盘格
endcase
end always @(posedge vga_clk) //产生竖彩条
begin
if(hcount < )
v_dat <= 'h7; //白
else if(hcount < )
v_dat <= 'h6; //黄
else if(hcount < )
v_dat <= 'h5; //青
else if(hcount < )
v_dat <= 'h4; //绿
else if(hcount < )
v_dat <= 'h3; //紫
else if(hcount < )
v_dat <= 'h2; //红
else if(hcount < )
v_dat <= 'h1; //蓝
else
v_dat <= 'h0; //黑
end always @(posedge vga_clk) //产生横彩条
begin
if(vcount < )
h_dat <= 'h7; //白
else if(vcount < )
h_dat <= 'h6; //黄
else if(vcount < )
h_dat <= 'h5; //青
else if(vcount < )
h_dat <= 'h4; //绿
else if(vcount < )
h_dat <= 'h3; //紫
else if(vcount < )
h_dat <= 'h2; //红
else if(vcount < )
h_dat <= 'h1; //蓝
else
h_dat <= 'h0; //黑
end endmodule

3. 用quartus软件综合一下工程,烧写,插上显示器的VGA接口,可以看到显示器显示的8种颜色。

使用FPGA开发板驱动VGA显示器的更多相关文章

  1. 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展

    实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...

  2. 关于DE2-115 FPGA开发板无法烧写程序的解决方法

    友晶科技推出的DE2-115 FPGA开发板,有时候莫名奇妙,无法烧写或者固化程序.利用JTAG 向DE2-115开发板烧写.sof文件失败,并提示以下错误,如图1和图2所示 图1 图2 解决方法:只 ...

  3. RK30SDK开发板驱动分析(二):DDR频率配置

    在内核配置界界面,我们可以很容易的配置DDR的频率,300M OR 600M, so easy! 那么它是如何起作用的呢? 回想 RK30SDK开发板驱动分析(一) 末尾提到MACHINE_START ...

  4. FPGA 开发板入手途径有哪些呢?

    买到一块 FPGA 开发板,你如何入手呢? 根据博主的经验,你可以通过如下途径来学习: 1.如果你是淘宝上买的,那么可以在淘宝上搜索你的开发板(一般 FPGA 开发板生厂商在淘宝上卖都会附带教程,如米 ...

  5. 东芝开发板驱动OLED模块显示LOGO图片

    前言 在之前的两篇评测文章: 使用系统定时器SysTick实现精确延时微秒和毫秒函数 东芝MCU实现位带操作 介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO ...

  6. SoC FPGA开发板的FPGA配置数据下载和固化

    小梅哥编写,未经许可,严禁用于任何商业用途 2018年7月2日星期一  soc fpga的烧写和固化方式与传统的纯fpga固化方式即存在形式上的相同,也存在细节上的差异,特整理此文. AC501-So ...

  7. FPGA开发板

    kingst.cnblogs.com 各种应用需要的接口不同: 做数字信号处理的,需要有AD/DA, 做图像处理,需要有图像接口.如果是通信的,需要有通信的接口,例如PCI/LVDS等.... 然后根 ...

  8. 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)

    至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...

  9. 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程

    对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...

随机推荐

  1. bzoj2003 [Hnoi2010]矩阵

    Description Input 第一行包含三个正整数N M P表示矩阵的行数列数以及每个数的范围,接下来N行每行包含M个非负整数,其中第i行第j个数表示以格子(i,j)为右下角的2*2子矩阵中的数 ...

  2. 第1章:初始C#及其开发环境

    第1章:初始C#及其开发环境 Table of Contents 能做什么? 熟悉VS开发环境 Hello World 能做什么? 能生成ASP.NET Web 应用程序.XML Web Servic ...

  3. memset赋初值的运用

    int ”较“的原则:加法不爆. 极大值:0x7f 较大值:0x3f 较小值:0xc0 极小值:0x80 long long ”较“的原则:加法不爆. 极大值:0x7f 较大值:0x3f 较小值:0x ...

  4. android 中组件继承关系图,一目了然

    View继承关系图 Adapter适配器继承关系图 Activity继承关系图

  5. asp.net mvc Post上传文件大小限制 (转载)

    最近发现在项目中使用jQuery.form插件上传比较大的文件时,上传不了,于是改了下web.config的上传文件最大限制. <configuration> <system.web ...

  6. LeetCode13.罗马数字转整数 JavaScript

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  7. 史上最简单的 SpringCloud 教程 | 第十四篇: 服务注册(consul)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2017/07/12/sc14-consul/ 本文出自方志朋的博客 这篇文章主要介绍 s ...

  8. DBF导入到Oracle数据库

    今天我遇到了一个需求,是将一个DBF文件导入到Oracle库中,之前一直使用的是公司提供的迁移工具,但是不知道怎么回事今天一直报DBF文件无法访问之类的错误,尝试多次之后,一气之下弃之不用,另寻他法. ...

  9. 访问oracle数据库

    如果是本地 :sqlplus system/xxx(用户名/密码) 远程到服务器, sqlplus system/xxx(用户名/密码) @IP:port/orcl(orcl为数据库实例)

  10. 快速排序_C语言_数组

    快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...