使用FPGA开发板驱动VGA显示器
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显示器的更多相关文章
- 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展
实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...
- 关于DE2-115 FPGA开发板无法烧写程序的解决方法
友晶科技推出的DE2-115 FPGA开发板,有时候莫名奇妙,无法烧写或者固化程序.利用JTAG 向DE2-115开发板烧写.sof文件失败,并提示以下错误,如图1和图2所示 图1 图2 解决方法:只 ...
- RK30SDK开发板驱动分析(二):DDR频率配置
在内核配置界界面,我们可以很容易的配置DDR的频率,300M OR 600M, so easy! 那么它是如何起作用的呢? 回想 RK30SDK开发板驱动分析(一) 末尾提到MACHINE_START ...
- FPGA 开发板入手途径有哪些呢?
买到一块 FPGA 开发板,你如何入手呢? 根据博主的经验,你可以通过如下途径来学习: 1.如果你是淘宝上买的,那么可以在淘宝上搜索你的开发板(一般 FPGA 开发板生厂商在淘宝上卖都会附带教程,如米 ...
- 东芝开发板驱动OLED模块显示LOGO图片
前言 在之前的两篇评测文章: 使用系统定时器SysTick实现精确延时微秒和毫秒函数 东芝MCU实现位带操作 介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO ...
- SoC FPGA开发板的FPGA配置数据下载和固化
小梅哥编写,未经许可,严禁用于任何商业用途 2018年7月2日星期一 soc fpga的烧写和固化方式与传统的纯fpga固化方式即存在形式上的相同,也存在细节上的差异,特整理此文. AC501-So ...
- FPGA开发板
kingst.cnblogs.com 各种应用需要的接口不同: 做数字信号处理的,需要有AD/DA, 做图像处理,需要有图像接口.如果是通信的,需要有通信的接口,例如PCI/LVDS等.... 然后根 ...
- 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)
至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...
- 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程
对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...
随机推荐
- 51nod 1442 士兵的旅行
拆点,因为只能走一步,那么u->v 后就不能到k了,这样,建图就能保证只走一步: #include <bits/stdc++.h> using namespace std; *; c ...
- React中最基础的jsx语法
import React, { Component } from 'react'; class App extends Component { render() { return ( <div ...
- mysql复制表数据,多表数据复制到一张表
对于mysql 复制表数据可以使用 insert into select 方式 示例: $sql="insert into icarzoo.provider(providerId,provi ...
- 通过ajax给后台提交数据时,radio性别数据的获取
通过ajax向后台异步发送数据,经常我们会遇到个人信息额提交,一般我们采用FormData来装数据.在装性别值得时候,我们会有两个radio框,获取radio值得方法如下: 一般情况下,一个radio ...
- SQL on&where&having
on.where.having这三个都可以加条件的子句中,on是最先执行,where次之,having最后.有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的.但因为on是先把不符合条件的记录 ...
- 关于利用HashSet,split,deleteCharAt等方法详解
1.首先了解一下HashSet的原理: Set接口 Set是对数学上集的抽象,Set中不包含重复的元素.如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都 ...
- Rman 管理 archivelog 的命令
因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置.并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标 ...
- HDFS的存储策略
本文介绍hdfs的存储策略 内容译自:http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/ArchivalStor ...
- iOS 开发中保留小数问题
保留两位小数(四舍五入) - (void)viewDidLoad { [super viewDidLoad]; // 有时候我们需要对数据保留两位小数,而且需要四舍五入,并且需要把末尾多余的0给去掉\ ...
- over开窗函数的用法
over(partition by c1.pmid,d1.type,e1.objid order by e1.objid ) pinum 先根据字段排序,pinum.在取第一条数据and p1.pi ...