搜档网
当前位置:搜档网 › 基于FPGA的VGA彩条图像显示

基于FPGA的VGA彩条图像显示

基于FPGA的VGA彩条图像显示
基于FPGA的VGA彩条图像显示

基于FPGA的VGA彩条图像显示

1. 设计的任务及内容

在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。目前,Verilog语言已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。

该实训的设计是用Verilog语言硬件描述语言设计出一个VGA图象显示控制器,用Verilog 硬件描述语言进行编程,把Verilog语言描述的VGA图象显示控制器所需的程序在QuartusⅡ软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。在结果符合要求的情况下把Verilog程序下载到FPGA器件上,利用FPGA器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。

VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。

CRT显示器作为一种通用型显示设备,如今已广泛应用于我们的工作和生活中。与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。如今随着液晶显示器的出现,越来越多的数字产品开始使用液晶作为显示终端。但基于VGA标准的显示器仍是目前普及率最高的显示器[1]。若驱动此类显示器,需要很高的扫面频率,以及极短的处理时间,正是由于这些特点,所以可以用FPGA来实现对VGA显示器的驱动。本次专业课程设计即选用FPGA 来实现VGA的显示。

随着FPGA的不断发展及其价格的不断下降,FPGA的可编程逻辑设计的应用优势逐渐显现出来。现在,越来越多的嵌入式系统选择了基于FPGA的设计方案。在基于FPGA的大规模嵌入式系统设计中,为实现VGA显示功能,既可以使用专用的VGA接口芯片如SPX7111A等,也可以设计和使用基于FPGA的VGA接口软核。虽然使用VGA专用芯片具有更稳定的VGA时序和更多的显示模式可供选择等优点,但设计和使用VGA接口软核更具有以下优势:(1)使用芯片更少,节省板上资源,减小布线难度;(2)当进行高速数据传输时,具有更小的高频噪声干扰;(3) FPGA(现场可编程门阵列)设计VGA接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。

1.1 FPGA简介

FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分[9]。FPGA的基本特点主要有:

1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

3)FPGA内部有丰富的触发器和I/O引脚。

4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

1

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA 的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。

FPGA(Filed Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半订制电路而出现的,既解决了订制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

1.2 QuartusII软件概述

QuartusII软件是Altera公司最新版本的EDA开发软件,支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的开发。含有工作组计算、集成逻辑分析仪、EDA 工具集成、多过程支持、增强重编译和IP集成等特性。支持百万门级的设计,支持高速I/O设计,具有更强的设计能力和更快的编译速度。QuartusII开发软件为可编程片上系统(SOPC)设计提供了一个完整的设计环境。无论是使用个人电脑、NUIX或Linux工作站,QuartusII都提供了方便设计、快速编译处理以及编程功能。

QuartusII输入的设计过程可分为创建工程、输入文件、项目编译、项目校验和编程下载等几个步骤。

1.3 本实训的开发板简介

本次实训采用板采用Altera 公司CycloneII 系列EP2C8Q208 芯片而设计的。开发板上使用JTAG 接口对芯片进行编程仿真调试,利用AS 配置EPCS4 Flash 芯片。自带的ByteBlasterII 下载线可以下载Altera 公司的所有FPGA芯片。

1.4 设计的主要内容

此设计要实现某一分辨率下(如640*480@60Hz)的VGA显示驱动,能简单显示彩条图像并且实现LCD显示等。

此程序使用Verilog语言进行描述,Verilog HDL是目前应用最为广泛的硬件描述语言.Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。Verilog HDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述.Verilog HDL进行设计最大的优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路.Verilog HDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述FPGA的设计之用。

根据VGA接口协议,利用FPGA芯片实现借口控制器功能,并在CRT显示器上做出相应显示。要进行彩条显示,彩色方块显示,利用案件实现显示模式的切换。

2 设计系统方案

2

1.熟悉VGA工作原理及VGA接口协议、工作时序。

2.计算出合适的时序,并对原始时钟进行分频处理以获取符合时序要求的各频率。

3.须要显示的图像等可存储于外部存储器,运行时,从外部存储器读取显示数据。

显示控制器是一个较大的数字系统,采用模块化设计原则、借鉴自顶向下的程序设计思想,进行功能分离并按层次设计。利用Verilog硬件描述语言对每个功能模块进行描述,并逐一对每个功能模块进行编译仿真,使顶层VGA显示控制器的模块实体仿真综合得以顺利通过[18]。VGA显示控制器主要由以下模块组成:分频模块、VGA时序控制器模块、彩条图形生成模块、VGA显示模块、存储模块等,如下图2.1所示。

图2.1基于FPGA的VGA显示控制系统

2.1 VGA显示的发展状况

显示绘图阵列(video graphic array,VGA)接口,他作为一种标准的显示接口得到了广泛的应用。VGA接口大多应用在显示器与显卡之间;同时还可以用用在擦二色等离子电视输入图像的模数转换上;VGA接口同样也是LCD液晶显示设备的标准接口。可编程逻辑器件随着微电子制造工艺的发展取得了长足的进步。早期的器件只能存储少量的数据,完成简单的逻辑功能;发展到现在,可以完成复杂的逻辑功能,速度更块,规模更大,功耗更低。目前可编程逻辑器件主要有两大类:复杂可编程逻辑器件(complex programmable logic device,CPLD)和现场可编程逻辑器件(filed programmable gate array,FPGA)。

FPGA的运行速度块,管脚资源丰富,容易实现大规模的系统设计,有大量的软核可用,便于进行二次开发。另外,由于FPGA具有可重构能力、抗看绍兴强等特点,因此,FPGA在工业控制等领域越来越受到重视[4]。利用FPGA完成VGA显示控制,可以使图像的显示脱离PC机的控制,形成体积小、功耗低的格式嵌入式系统(便携式设备或手持设备),应用于地面勘测、性能检测等方面,具有重要的现实意义。

显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。在FPGA的设计中可以使用很少的资源,就产生VGA各种信号。为了通过VGA端口连接显示器显示前端采集到的图像数据,本课题在21EDA—Altera FPGA开发板上使用VGA接口在

3

显示器上显示彩条及简单的图形,可以作为整个采集系统显示设计的参考,具有一定的实用价值。

2.2 VGA显示接口

VGA 接口负责向显示器输出相应的显示信号。VGA 接口是一种D型接口,上面共有15 个针孔,非对称地分成3 排,每排5 个,其排列及接口定义如图1.1 所示。

图 2.2 VGA接口图

在基于FPGA 的VGA 控制中,只需要考虑行同步信号(Hs)、场同步信号(Vs)、蓝基色(R)、绿基色(G)、红基色(B)这5 个信号。如果能从FPGA 发出这5 个信号到VGA 接口,就可以实现对VGA 的控制。

2.3 VGA显示的原理

VGA显示图像原理:常见的彩色显示器,一般由CRT(阴极射线管)构成。彩色是有R,G.B(红:RED,绿:GREEN,蓝:BLUE)三基色组成。显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有银光粉的荧光屏幕上,产生R,G,B三基色,合成一个彩色像素[7-8]。扫描从屏幕的左上方开始,从左到右,从上到下,进行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步,扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。

它的行场扫描时序示意图1.2所示。现以正极性为例,说明CRT的工作过程:R、G、B 为正极性信号,即高电平有效。当VS=0,HS=0时,CRT显示的内容为亮的过程,即正向扫描过程约为26us。当一行扫描完毕,行同步HS=1,约需6us,期间,CRT扫描产生消隐,电子束回到CRT的左边下一行的起始位置(X=0,Y=1);当扫描完480行后,CRT的场同步VS=1,产生场同步是扫描线回到CRT的第一行第一列(C=0,Y=0处,约为两个行周期)。HS和VS的时序图。T1为行同步消隐(约为6us);T2为行显示时间(约为26us),T3为场同步消隐(两行周期);T4为场显示时间(480行周期)。

4

图2.3 行场扫描示示意图

2.4 硬件电路实现

VGA 的图形模式分为 3 类:CGA、EGA 兼容的图形模式;标准的VGA 图形模式;VGA 扩展图形模式。后两种图形模式统称为VGA 图形模式。本研究基于标准VGA模式来实现。常见的彩色显示器一般都是由CRT(阴极射线管)构成,每一个像素的色彩由红、绿、蓝三基色构成。显示时采用的是逐行扫描的方式。VGA 显示模块产生的由水平同步信号和垂直同步信号控制阴极射线管中的电子枪产生电子束,轰击涂有荧光粉的屏幕,产生红、绿、蓝三基色,于显示屏上合成一个彩色像素点。图2.4表示的是VGA 显示模块与CRT 显示器的控制框图。

图2.4 VGA 显示模块与 CRT 显示器的控制框图

电子束扫描一幅屏幕图像上的各个点的过程称为屏幕扫描。现在显示器都是通过光栅扫描方式来进行屏幕扫描。在光栅扫描方式下,电子束按照固定的路径扫过整个屏幕,在扫描过程中通过电子束的通断强弱来控制电子束所经过的每个点是否显示或显示的颜色[21]。电子枪在VGA 显示模块产生的行同步、场同步等控制信号的作用下进行包括水平扫描、水平回扫、垂直扫描、垂直回扫等过程。光栅扫描的路径通常为:从上到下扫过每一行,在每一行中从左到右

5

地进行扫描。其过程如下:电子束从屏幕左上角开始向右扫,当到达屏幕的右边缘时,电子束关闭(水平消隐),并快速返回屏幕左边缘(水平回扫),然后在下一条扫描线上开始新的一次水平扫描。一旦所有的水平扫描均告完成,电子束在屏幕的右下角结束并关闭(垂直消隐),然后迅速返回到屏幕的左上角(垂直回扫),开始下一次光栅扫描。

通过对硬件进行编程,输出标准的VGA 信号(红、绿、蓝三色信号和行、帧同步信号),通过15 针VGA 接口输出至显示器,可具有显示驱动程序的能力,驱动显示器显示图像信号。板上的VGA 接口只需使用其中的 5 个引脚,其中行、帧同步信号直接由FGPA 输出;红、绿、蓝三色信号使用FPGA 上8 个引脚,8 位数据,其中红色2 位,绿色和蓝色各3 位,经由电阻网络D/A 变换后输出值显示器,具有256 种颜色。VGA 接口与FPGA 引脚连接见图2.5。

图2.5 VGA与FPGA引脚连接

2.5 软件实现

设计VGA图像显示控制需要注意两个问题:一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是VGA信号的电平驱动。

针对开发板的条件,可以用50MHz的系统时钟进行分频得到20MHz的像素频率输出,FPGA 通过串联电阻直接驱动5个VGA信号。每个颜色信号串一个电阻,每位的颜色信号分别是VGA_RED、VGA_BLUE、VGA_GREEN。每个电阻与终端的75欧电缆电阻相结合,确保颜色信号保持在VGA规定的0V~0.7V之间。VGA_HSYNC和VGA_VSYNC信号使用LVTTL或LVCMOS3I/O标准驱动电平。通过VGA_RED、VGA_BLUE、VGA_GREEN置高或低来产生8中颜色,如下表所示。

6

VGA信号的时序由视频电气标准委员会(VESA)规定。以下提供的VGA系统和时序信息作为例子来说明FPGA在640×480模式下是如何驱动VGA监视器的。

VGA显示器基于CRT,使用调幅模式,移动电子束(或阴极射线)在荧光屏上显示信息。LCD使用矩阵开关给液晶加压,在每个像素点上通过液晶来改变光的介电常数。尽管下面的描述仅限于CRT,LCD已经发展到可以同CRT使用同样的时序信号了。因此,下面的讨论均适合CRT和LCD。

在CRT显示器中,电流的波形通过蹄形磁铁产生磁场,使得电子束偏转,光栅在显示屏上横向显示,水平方向从左至右,垂直方向从上至下。当电子束向正方向移动时,信息才显示,即从左至右、从上至下。如果电子束从后返回左或顶边,显示屏并不显示任何信息。在消隐周期——电子束重新分配和稳定于新的水平或垂直位时,丢失了许多信息。

显示协议定义了电子束的大小以及通过显示屏的频率,该频率是可调的。

现在的VGA显示屏支持多种显示协议,VGA控制器通过协议产生时序信号来控制光栅。控制器产生同步脉冲TTL电平来设置电流通过偏转磁铁的频率,以确保像素或视频数据在适当的时间送给电子枪。

视频数据一般来自重复显示存储器中一个或多个字节——它们被分配到每个像素单元。入门实验板使用每个像素中的3位,产生图8中可能的一种颜色。控制器指定视频数据缓冲器以备电子束通过显示屏。然后,控制器接收并利用视频数据在适当的时间显示,电子束移动到指定的像素点。

根据图2.5所示,VGA控制器产生水平同步时序信号(HS)和垂直同步时序信号(VS),调节在每个像素时钟视频数据的传送。像素时钟定义了显示像素信息的有效时间段。VS信号定义显示的更新频率,或刷新屏幕信息的频率。最小的刷新频率是取决于显示器的亮度和电子束的强度,实际频率一般在60~120Hz之间。给定的刷新频率的水平线的数量定义了水平折回频率[23]。

下表的时序信号是640×480,像素时钟25Mhz,刷新频率60Hz±1。图7说明了每个时序的联系。同步脉冲的时序宽度(TPW)和前后门拱的间隔TFP和TBP)基于观察多种VGA的显示屏的结果。前后门拱的间隔是前后同步脉冲时间。在这些时段信息不能显示。

7

图2.6 VGA控制器时序信号

8

图2.7 各时序之间的联系

2.6 设计方案

设计方案如下:

将图像控制模块分为这样几部分:锁相环电路(PLL.v)、VGA显示模块(vga.v)、时钟分频模块(clk_div.v)、LCD状态控制模块(clk_ctrl.v)、LCD顶层模块(lcd.v)。其中锁相环给分频器和相位器提供稳定的20MHzA时钟频率信号;VGA显示模块用于产生1024*768@60Hz//65M彩条图像,并控制显示范围和消隐范围以及产生水平同步时序信号hs和垂直同步时序信号vs的值;提供给SRAM地址并按地址读出八位数据(灰度值Y),然后得到R、G、B的值(若Y>中间值,则R=G=B=1;否则R=G=B=0),并把R、G、B的值通过VGA接口传到CRT显示器;.分频模块通过计数器实现分频功能;状态控制模块给出液晶显示第一行和第二行内容;LCD顶层模块将clk_div模块输出的clk_lcd链接到lcd_ctrl中,显示内容。

3 VGA彩条显示调试与显示

3.1 软件程序设计

本设计需要三个模块,一个是锁相环模块、VGA显示模块、LCD模块。

1.锁相环模块

设计一个cyclone2锁相环,在选择参数时的分频比为1:1,输入的最高频率设置成20MHz,占空比50%,所以C0的输出最高频率是20MHz,输出与输入频率相同,C1的输出最高频率是65MHz,也是稳定的。模块如图3.1所示。

9

图3.1 锁相环模块

锁相环的设计部分程序如下:

module pll (

inclk0,

c0,

c1);

input inclk0;

output c0;

output c1;

wire [5:0] sub_wire0;

wire [0:0] sub_wire5 = 1'h0;

wire [1:1] sub_wire2 = sub_wire0[1:1];

wire [0:0] sub_wire1 = sub_wire0[0:0];

wire c0 = sub_wire1;

wire c1 = sub_wire2;

wire sub_wire3 = inclk0;

wire [1:0] sub_wire4 = {sub_wire5, sub_wire3};

altpll altpll_component (

.inclk (sub_wire4),

.clk (sub_wire0),

.activeclock (),

.areset (1'b0),

.clkbad (),

.clkena ({6{1'b1}}),

.clkloss (),

.clkswitch (1'b0),

.configupdate (1'b0),

.enable0 (),

.enable1 (),

.extclk (),

.extclkena ({4{1'b1}}),

.fbin (1'b1),

.fbmimicbidir (),

.fbout (),

.locked (),

.pfdena (1'b1),

.phasecounterselect ({4{1'b1}}),

.phasedone (),

.phasestep (1'b1),

.phaseupdown (1'b1),

.pllena (1'b1),

.scanaclr (1'b0),

.scanclk (1'b0),

.scanclkena (1'b1),

10

.scandata (1'b0),

.scandataout (),

.scandone (),

.scanread (1'b0),

.scanwrite (1'b0),

.sclkout0 (),

.sclkout1 (),

.vcooverrange (),

.vcounderrange ());

defparam

altpll_component.clk0_divide_by = 1,

altpll_component.clk0_duty_cycle = 50,

altpll_component.clk0_multiply_by = 1,

altpll_component.clk0_phase_shift = "0",

altpll_component.clk1_divide_by = 1,

altpll_component.clk1_duty_cycle = 50,

altpll_component.clk1_multiply_by = 1,

altpll_component.clk1_phase_shift = "0",

altpll_component.inclk0_input_frequency = 50000,

altpll_component.intended_device_family = "Cyclone II",

altpll_component.lpm_hint = "CBX_MODULE_PREFIX=pll", altpll_component.lpm_type = "altpll",

altpll_component.operation_mode = "NO_COMPENSATION", altpll_component.port_activeclock = "PORT_UNUSED",

altpll_component.port_areset = "PORT_UNUSED",

altpll_component.port_clkbad0 = "PORT_UNUSED",

altpll_component.port_clkbad1 = "PORT_UNUSED",

altpll_component.port_clkloss = "PORT_UNUSED",

altpll_component.port_clkswitch = "PORT_UNUSED",

altpll_component.port_configupdate = "PORT_UNUSED",

altpll_component.port_fbin = "PORT_UNUSED",

altpll_component.port_inclk0 = "PORT_USED",

altpll_component.port_inclk1 = "PORT_UNUSED",

altpll_component.port_locked = "PORT_UNUSED",

altpll_component.port_pfdena = "PORT_UNUSED",

altpll_component.port_phasecounterselect = "PORT_UNUSED", altpll_component.port_phasedone = "PORT_UNUSED",

altpll_component.port_phasestep = "PORT_UNUSED",

altpll_component.port_phaseupdown = "PORT_UNUSED",

altpll_component.port_pllena = "PORT_UNUSED",

altpll_component.port_scanaclr = "PORT_UNUSED",

altpll_component.port_scanclk = "PORT_UNUSED",

altpll_component.port_scanclkena = "PORT_UNUSED",

altpll_component.port_scandata = "PORT_UNUSED",

altpll_component.port_scandataout = "PORT_UNUSED",

altpll_component.port_scandone = "PORT_UNUSED",

altpll_component.port_scanread = "PORT_UNUSED",

altpll_component.port_scanwrite = "PORT_UNUSED",

11

altpll_component.port_clk0 = "PORT_USED",

altpll_component.port_clk1 = "PORT_USED",

altpll_component.port_clk2 = "PORT_UNUSED",

altpll_component.port_clk3 = "PORT_UNUSED",

altpll_component.port_clk4 = "PORT_UNUSED",

altpll_component.port_clk5 = "PORT_UNUSED",

altpll_component.port_clkena0 = "PORT_UNUSED",

altpll_component.port_clkena1 = "PORT_UNUSED",

altpll_component.port_clkena2 = "PORT_UNUSED",

altpll_component.port_clkena3 = "PORT_UNUSED",

altpll_component.port_clkena4 = "PORT_UNUSED",

altpll_component.port_clkena5 = "PORT_UNUSED",

altpll_component.port_extclk0 = "PORT_UNUSED",

altpll_component.port_extclk1 = "PORT_UNUSED",

altpll_component.port_extclk2 = "PORT_UNUSED",

altpll_component.port_extclk3 = "PORT_UNUSED";

endmodule

2.VGA显示模块

VGA显示模块用于产生彩条图像,实现横彩条、竖彩条、棋盘彩条转换,并控制显示范围和消隐范围以及产生水平同步时序信号hs和垂直同步时序信号vs的值。

一般来说,时钟计数器通过像素时钟来控制水平时序信号。译码计数器的值产生HS信号。在指定的行,计数器产生当前像素显示的位置。

一个独立的计数器产生垂直时序信号。垂直同步计数器在每个HS脉冲信号来临时自动加1,译码值产生VS信号。计数器产生当前显示行。这两个计数器从地址到显示缓冲器连续计数。开发板的DDR SDRAM 提供了一个足够的显示缓冲区。

在HS脉冲的开始和VS脉冲的开始没有具体规定相对的时序关系。因此,计数器被分配到简单格式的视频RAM地址,或分配到同步脉冲产生器的最小译码逻辑。

设计部分代码如下:

module vga_A(clock, switch, disp_RGB, hsync, vsync );

input clock; //系统输入时钟

input [1:0]switch;

output [2:0]disp_RGB; //VGA数据输出

//disp_RGB[0]:蓝

//disp_RGB[1]:红

//disp_RGB[2]:绿

output hsync; //VGA行同步信号

output vsync; //VGA场同步信号

reg [11:0] hcount; //VGA行扫描计数器

reg [11:0] vcount; //VGA场扫描计数器

reg [2:0] data;

reg [2:0] h_dat;

reg [2:0] v_dat;

wire dat_act;

12

wire hsync;

wire vsync;

//VGA行、场扫描时序参数表

parameter //1024*768@60Hz//65M

h_Front_porch = 12'd24,

h_Sync_pulse = 12'd136,

h_Back_porch = 12'd160,

Whole_line = 12'd1344,

v_Front_porch = 12'd3,

v_Sync_pulse = 12'd6,

v_Back_porch = 12'd29,

Whole_frame = 12'd806;

//************************VGA驱动部分******************************* //行场扫描

//行扫描hcount 从0开始计数到Whole_line

//场扫描vcount 从0开始计数到Whole_frame

always @(posedge clock)

begin

// if (hcount == Whole_line) //行扫描计数到Whole line

if (hcount == 12'd1344) //行扫描计数到Whole line

begin

hcount <= 1'd0;

// if (vcount == Whole_frame) //场扫描计数到Whole frame

if (vcount == 12'd806) //场扫描计数到Whole frame

vcount <= 1'd0;

else

vcount <= vcount + 1'd1;

end

else

begin

hcount <= (hcount + 1'd1);

end

end

//同步信号输出

reg hsync_r,vsync_r;

always @(posedge clock)

begin

hsync_r <= (hcount > h_Sync_pulse);

vsync_r <= (vcount > v_Sync_pulse);

end

assign hsync = hsync_r;//产生行同步信号(低电平)

13

assign vsync = vsync_r;//产生场同步信号(低电平)

//数据输出

assign dat_act = ((hcount >= (h_Sync_pulse + h_Back_porch)) && (hcount < (Whole_line - h_Front_porch)))

&& ((vcount >= (v_Sync_pulse + v_Back_porch)) && (vcount < (Whole_frame - v_Front_porch))); assign disp_RGB = (dat_act) ? data : 3'h00;

//************************显示数据处理部分*******************************

always @(posedge clock)

begin

case(switch[1:0])

2'd0: data <= h_dat; //选择横彩条

2'd1: data <= v_dat; //选择竖彩条

2'd2: data <= (v_dat ^ h_dat); //产生棋盘格

2'd3: data <= (v_dat ~^ h_dat); //产生棋盘格

endcase

end

always @(posedge clock) //产生竖彩条

begin

if(hcount < 363)

v_dat <= 3'h7; //白

else if(hcount < 433)

v_dat <= 3'h6; //黄

else if(hcount < 503)

v_dat <= 3'h5; //青

else if(hcount < 573)

v_dat <= 3'h4; //绿

else if(hcount < 643)

v_dat <= 3'h3; //紫

else if(hcount < 713)

v_dat <= 3'h2; //红

else if(hcount < 783)

v_dat <= 3'h1; //蓝

else if(hcount < 853)

v_dat <= 3'h7; //白

else if(hcount < 923)

v_dat <= 3'h6; //黄

else if(hcount < 993)

v_dat <= 3'h5; //青

else if(hcount < 1063)

v_dat <= 3'h4; //绿

else if(hcount < 1133)

v_dat <= 3'h3; //紫

14

else if(hcount < 1203)

v_dat <= 3'h2; //红

else if(hcount < 1273)

v_dat <= 3'h1; //蓝

else

v_dat <= 3'h0; //黑

end

always @(posedge clock) //产生横彩条

begin

if(vcount < 94)

h_dat <= 3'h7; //白

else if(vcount < 154)

h_dat <= 3'h6; //黄

else if(vcount < 214)

h_dat <= 3'h5; //青

else if(vcount < 274)

h_dat <= 3'h4; //绿

else if(vcount < 334)

h_dat <= 3'h3; //紫

else if(vcount < 394)

h_dat <= 3'h2; //红

else if(vcount < 454)

h_dat <= 3'h1; //蓝

else

h_dat <= 3'h0; //黑

end

endmodule

3.LCD模块

LCD模块分为分频器子模块、状态控制子模块和顶层模块。分频器子模块通过计数器实现分频功能;状态控制子模块输入两行字符,当程序运行时,每当一个时钟信号来临,显示控制模块的输出地址自动加1,并且把地址传输到字符模块,模块通过输入地址的加1,从第一个字符数据开始输出对应数据,直到控制模块所设定的输出字符数为止。电路图如图3.2所示。

图3.2 LCD模块

15

分频器子模块程序:

module clk_div(clk,sys_rst_n,

clk_lcd

);

input clk;

input sys_rst_n; //sys_rst_n为全局复位信号(高电平有效)

output clk_lcd; //clk_lcd链接到lcd_ctrl中

reg [19:0] cnt; //对时钟进行计数分频

reg clk_BUF;

always @ (posedge clk or negedge sys_rst_n)

if(!sys_rst_n) //低电平复位

cnt <= 20'd0;

else if(cnt >= 26026) //学习特权同学,提高代码健壮性

cnt <= 20'd0;

else

cnt <= cnt+1'b1;

always @ (posedge clk or negedge sys_rst_n)

if(!sys_rst_n)

clk_BUF <= 0;

else if(cnt == 26026)

clk_BUF <= ~clk_BUF;

assign clk_lcd = clk_BUF;

endmodule

状态控制子模块程序:

module lcd_ctrl (clk_lcd,

sys_rst_n,

lcd_rs,

lcd_rw,

lcd_en,

lcd_data

);

input clk_lcd;

input sys_rst_n; //系统复位信号,低电平复位

output lcd_rs; // 0=输入指令,1=输入数据

output lcd_rw; //0=向LCD写入指令或数据,1=从LCD读取信息output lcd_en; //使能信号,1时读取信息,1→0(下降沿)执行指令output[7:0] lcd_data; //LCD数据信号

parameter

CLEAR = 4'd1, //清屏指令

16

SETFUNCTION = 4'd2, //模式设置指令

SWITCHMODE = 4'd3, //开关控制指令

SETMODE = 4'd4, //设定显示屏或光标移动方向指令

SETDDRAM_1 = 4'd5, //设定第一行DDRAM地址指令

WRITERAM_1 = 4'd6, //向第一行写入的数码

WRITERAM_2 = 4'd7,

IDLE = 4'd8; //空闲

reg [127:0] Data_First = "VGAcaitiaotu"; //液晶显示的第一行的数据

reg [127:0] Data_Second = "1308305028 huli"; //液晶显示的第二行的数据reg [127:0] Data_First_Buf,Data_Second_Buf; //液晶显示的数据缓存

//LCD状态机寄存器

reg[3:0] state; //当前状态寄存器

reg lcd_rs_reg = 1'b0; //lcd_rs输出寄存器

reg lcd_rw_reg = 1'b0; //lcd_rw输出寄存器

reg[7:0] lcd_data_reg; //lcd_data输出寄存器

reg lcd_en_sel;

reg [5:0] display_count;

//状态控制

always @ (posedge clk_lcd or negedge sys_rst_n)

if(!sys_rst_n)

begin

state <= CLEAR;

lcd_rs_reg <= 1'b0;

lcd_data_reg <= 8'b00000000;

lcd_en_sel <= 1'b1;

display_count <= 4'b0;

end

else

case(state)

CLEAR:

begin

state <= SETFUNCTION;

lcd_data_reg <= 8'b00000001;

end

SETFUNCTION:

begin

state <= SWITCHMODE;

lcd_data_reg <= 8'b00111000;

end

SWITCHMODE:

begin

state <= SETMODE;

lcd_data_reg <= 8'b00001100;

17

end

SETMODE:

begin

state <= SETDDRAM_1;

lcd_data_reg <= 8'b00000110;

end

SETDDRAM_1:

begin

state <= WRITERAM_1;

lcd_data_reg <= 8'b10000000; //写入第一行显示起始地址:第一行第二个位置

Data_First_Buf <= Data_First;

end

WRITERAM_1:

begin

if(display_count == 6'd16) //display_count等于14时表示第一行数据已写完

begin

lcd_data_reg <= 8'b11000000; //送入写第二行的指令

lcd_rs_reg <= 1'b0;

display_count <= 4'b0;

Data_Second_Buf <= Data_Second;

state <= WRITERAM_2; //写完第一行进入写第二行状态

end

else

begin

lcd_data_reg <= Data_First_Buf[127:120];

Data_First_Buf <= (Data_First_Buf << 8);

lcd_rs_reg <= 1'b1; //RS=1表示写数据

display_count <= display_count + 1'b1;

state <= WRITERAM_1;

end

end

WRITERAM_2:

begin

if(display_count == 6'd16)

begin

lcd_en_sel <= 1'b0;

lcd_rs_reg <= 1'b0;

display_count <= 4'b0;

state <= IDLE; //写完进入空闲状态

end

else

begin

lcd_data_reg <= Data_Second_Buf[127:120];

Data_Second_Buf <= (Data_Second_Buf << 8);

lcd_rs_reg <= 1'b1;

18

display_count <= display_count + 1'b1;

state <= WRITERAM_2;

end

end

IDLE:

begin

state <= IDLE;

end

default:

state <= CLEAR;

endcase

assign lcd_rw = lcd_rw_reg;

assign lcd_rs = lcd_rs_reg;

assign lcd_data = lcd_data_reg;

assign lcd_en = lcd_en_sel ? clk_lcd : 1'b0;

endmodule

LCD顶层模块程序:

module lcd (clk,sys_rst_n,lcd_en,lcd_rs,lcd_rw,lcd_data);

input clk; //时钟24MHz,周期为41.6ns

input sys_rst_n; //系统复位信号,低电平复位

output lcd_en; //使能信号,1时读取信息,1→0(下降沿)执行指令

output lcd_rs; // 0=输入指令,1=输入数据

output lcd_rw; //0=向LCD写入指令或数据,1=从LCD读取信息

output[7:0] lcd_data; //LCD数据信号

wire clk_lcd; //用于将clk_div模块输出的clk_lcd链接到lcd_ctrl中clk_div U1(.clk(clk),

.sys_rst_n(sys_rst_n),

.clk_lcd(clk_lcd)

);

lcd_ctrl U2(.clk_lcd(clk_lcd),

.sys_rst_n(sys_rst_n),

.lcd_en(lcd_en),

.lcd_rs(lcd_rs),

.lcd_rw(lcd_rw),

.lcd_data(lcd_data)

);

endmodule

3.2 程序在QuartusⅡ下的编译与仿真

本设计利用QuartusⅡ软件进行设计与编译仿真和下载。

1.生成的符号文件组成的电路图如图3.3

19

图3.3 总电路图

管脚分配

2.

通过以上的步骤,将程序烧写进开发板中后,将CRT显示器连接到开发板的VGA接口上。

给系统上电,在显示器上就可以看见两种模式的彩条:横彩条和竖彩条。横彩条由场计数器vcont计数来进行控制,以实现某一个区域显示相应的颜色。设计产生14个彩条,将768行的像素分成14份,用vcont来控制计数区域。不同的区域赋予不同的颜色值,其显示效果如图8所示。竖彩条的显示机制与横彩条相似,只是使用行计数器hcont来进行计数,把每行的1024

20

基于FPGA的VGA接口显示的设计与实现

编号 基于FPGA的VGA接口显示的设计与实现Design and implementation of VGA interface based on FPGA display 学生姓名王雪 专业控制科学与工程 学号S120400520 指导教师杨晓慧 学院电子信息工程学院 二〇一三年六月

摘要 利用现场可编程逻辑器件FPGA产生VGA时序信号和彩条图像信号,并将其作为信号源,应用于彩色等离子显示器的电路开发,方便彩色等离子显示器驱动控制电路的调试。FPGA芯片具有可靠性高、编程灵活、体积小等优点,实验经过软硬件调试,最终在显示器上显示彩条正确图像。利用此原理,可以设计更多的彩色图像,且可将采集的图像进行实时显示,将此作为信号源,应用于显示器电路的开发或某些嵌入式系统中,进行视频设备的调试与性能分析或系统中信号处理模块的调试与性能分析等。 关键词:FPGA VGA接口时序控制彩条信号

Abstract VGA-timing signals and color strip image were obtained by using FPGA.The signals were used as sources when developing the circuits of color plasma display panel, and it took great convenience to the debugging of the driving and controlling circuit of color plasma display panel.The FPGA chip has the advantages of high reliability, small volume, flexible programming,just because of this,the test could achieve the desired results,display scree displays color bar signals.According to this principle, we can design color image more, and make the image real-time display, such as the signal source, used in display circuit development or some embedded systems, video equipment debugging and performance analysis of the system signal processing module debugging and performance analysis. Keywords:FPGA, VGA interface,timing control, color bar signals

基于FPGA的快速图像处理系统的设计毕业设计论文

基于FPGA的快速图像处理系统的设计 摘要 我们评估、改进硬件、软件架构的性能,目的是为了适应各种不同的图像处理任务。这个系统架构采用基于现场可编程门阵列(FPGA)和主机电脑。PC端安装Lab VIEW应用程序,用于控制图像采集和工业相机的视频捕获。通过USB2.0传输协议执行传输。FPGA控制器是基于ALTERA的Cyclone II 芯片,其作用是作为一个系统级可编程芯片(SOPC)嵌入NIOSII内核。该SOPC集成了CPU,片内、外部内存,传输信道,和图像数据处理系统。采用标准的传输协议和通过软硬件逻辑来调整各种帧的大小。与其他解决方案作比较,对其一系列的应用进行讨论。 关键词:软件/硬件联合设计;图像处理;FPGA;嵌入式

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

基于FPGA的VGA图像显示

基于FPGA的VGA图像显示 1、VGA显示原理 VGA标准是一种计算机显示标准,最初是由IBM公司在1987 年提出的,分辨率是640*480。VGA 接口也叫做D_Sub 接口,是显卡上输出模拟信号的接口。目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的D/A 转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。 常见的彩色显示器一般由阴极射线管(CRT) 构成,彩色由GRB(Green Red Blue) 基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生 GRB 基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。 要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。VGA的标准参考显示时序如图1所示。行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。 2、方案设计 由VGA的显示原理可知,该任务的关键是VGA时序控制部分和汉字图形显示部分: (1)VGA时序控制部分,采用FPGA本地50MHz时钟,根据所需时序要求,经Verilog 语言编写的计数模块分频而得到,该部分十分重要,如果产生的时序有偏差,那么就会使汉字图形无法显示或显示结果混乱;

基于FPGA图像压缩和解码

基于FPGA的图像压缩传输与解码 硬件设计部分 一、硬件完成的功能定义 1.使用FPGA普通端口作为GPIO使用。 2.使用FPGA开发板的50MHZ时钟分频后25MHZ作为VGA输出时钟。 3.时钟频率25MHZ完成行扫描信号计数。 4.时钟频率25MHZ完成祯扫描信号计数,并完成祯计数。 5.在行,场信号有效范围内进行VGA数据输出。 二、顶层模块划分 1.顶层的输入输出定义

2.顶层模块输入、输出之间的时序关系: vag输入时钟50mhz,分频产生25mhz,作为vga输出时钟,PLL倍频,200mhz作为cpu时钟,UART接收来自串口数据。软件读取数据,处理 后,输出数据。 软件设计部分 一、软件功能定义1 获取发送数据, 二:软件设计的总体设计及结构图

三:软件详细设计 1:用matlab取图像的reb值,将取出的rgb值写入文件。 2:读取rbg值,将十六进制数表示的rgb值转化为以该asc||值对应的字符(减少信息传输量),将转化后的的字 符写入文件中。 3:对转化后的文件数据进行压缩,发送目标文件格式为,文件头信息,发送文件的起始信息,用来判定开始发 送数据,用三个字节,信息数据为GCL,一个字节表示 最后一个字节的有效位,最后一个字节有效位为0bit- 8bit之间,一个字节表示文件中rgb的种类,0-255,四字节,表示整个压缩文件的大小,其后数据格式为, 字符及字符对应的出现次数,即字符频度信息,字符 频度之后对应的是压缩信息。

4:具体软件的实现: 1.Matlab取图片rgb值,写入rgb.txt文件中,处理得到 对应字符文件,读取文件统计rgb值得种类及每种rgb 值出现的次数。 2.根据统计rgb值得种类及次数,生成huffman树。 3.由生成的huffman树,递归生成huffmancode。 4.根据reb.txt文件内容和huffmancode生成压缩信。 四、软件功能测试 1:手工构造最简单的huffman树,huffmancode,compress code。 2:显示软件统计字符及频度与最小模型是否一样。 3:显示软件生成的huffmantab与最小模型huffmantab是否一样。 4:显示软件递归生成的huffmantab code与最小模型huffmantab code是否一样。 5显示软件递归生成compresse code与最小模型compress code 是否一样。 一:软件功能定义2 UART串口发射接收。该模块主要用于数据发送与接收,UART_RXD作为接收端,UART_TXD作为发射端, 二:软件设计的总体设计及结构图 三:软件详细设计 1:初始化UART,将UART设置为单字节触发模, UART->STATUS.BITS.RRDY = 0; UART->SIATUS.BITS.TRDY =0 ; UART->DIVISOR.WORD=(unsigned int)(ALT_CPU_FREQ/baudrate+0.5);

基于FPGA的图像预处理系统

基于FPGA的图像预处理系统 由于获取图像的工具或手段的影响,使获取图像无法完全体现原始图像的全部信息。因此,对图像进行预处理就显得非常重要。预处理的目的是改善图像数据,抑制不需要的变形或者增强某些对于后续处理来说比较重要的图像特征。 通常根据预处理目的的不同,把预处理技术归为图像增强技术和图像分割技术两类。图像对比度处理是空间域图像增强的一种方法。由于图像灰度范围狭窄会使图像的对比度不理想,可用对比度增强技术来调整图像灰度值的动态范围。 图像处理通常采用软件或者DSP(数字信号处理器)来实现。如果利用软件实现,运行时会耗费较多的PC资源,而且算法越复杂时耗费的资源就越多,对于需要高速处理的情况就不适用了;而如果采用DSP来实现,提高并行性的同时指令执行速度必然会提高,较高的指令速度可能导致系统设计复杂化,并增加功耗和成本。新一代的FPGA集成了CPU或DSP 内核,可以在一片FPGA上进行软硬件协同设计,为实现SOPC提供了强大的硬件支持。本文介绍的是利用FPGA并行处理和计算能力,以Altera FPGA Stratix EP1S40为系统控制的核心实现的SOPC。 系统硬件平台 采用基于PCI总线的FPGA开发平台,结构如图1所示。板上主要硬件资源有:PCI 桥、FPGA、SRAM和SDRAM等其他外设。 图1 基于PCI总线的FPGA开发平台 PCI桥采用PCI9656桥接芯片实现,用来连接PCI总线与32位/50MHz的板级局部总线;FPGA包括41 250个逻辑单元,14个DSP模块,112个嵌入式乘法器,4个增强型PLL(锁相环)和4个快速型PLL等逻辑资源;SDRAM用来存储图像数据。Avalon总线模块完成整个片上可编程系统组件之间的互连。Avalon总线是SOPC设计中连接片上处理器和其他IP 模块的一种简单总线协议,规定了主、从构件之间的端口连接以及通信时序关系,SOPC Builder来完成整个系统(包括Avalon)模块的生成和集成。丰富的板级资源可以满足图像的高速预处理需求。 系统工作原理 设计采用DMA方式快速传输图像数据,这样数据的传输和处理可以并行起来,使得系统的运行效率大为提高。PC与PCI板卡之间建立软件环境,在该环境下利用DMA通道把图像数据从主机通过PCI总线、PCI桥、板级局部总线和Avalon总线传到SDRAM存储起来,然后送入算法逻辑模块进行处理,处理完成后再把图像数据存储到SDRAM中,最后再用DMA通道把图像处理结果传送回主机。 建立片上系统中的关键模块

基于FPGA的VGA显示设计报告

正文 一,VGA时序标准 VGA是一种常用的显示输出接口,采用行场扫描控制结合RGB三色合成原理,输出 显示信号。每个VGA接口为15针接口,分三行排布,每行5针。如图所示: 图1.1 VGA接口 15针并未全部使用,有效的信号线共5根,即红绿蓝三基色信号线:R,G,B,每线电压从0V到0.71V变化,表示无色到饱和,依据电平高低,显示颜色的饱和程度。行同步控制信号,Hsync,控制每行扫描像素的有效和失效。场同步:Vsync,控制场方向,即整个图像显示过程的时间长度,场同步中的显示部分的时间长度,等于每行扫描时间的总和。 在不同刷新频率下,显示每个像素的时间是不同的,相同刷新频率下,每个像素显示时间是固定的,所以,不同的每个像素写入时间,导致了分辨率的不同。因为VGA的显示是逐行扫描,每行从左到右扫描,到了行尾,回归到下一行的行头,继续向尾部扫描。所以,显示原理是逐次写入每行的像素数据,直到整幅图像显示成功为止。 VGA显示的数据是不能锁存的,所以必须一次又一次的连续输入数据,72Hz的刷新率下,一秒钟显示72幅图像,所以,需要连续写入72幅图像,才能达到一秒的显示效果。所以,VGA显示图像,要反反复复写入图像数据,才能得到持续的显示效果。 图1.2 VGA接口线序 VGA显示,无法做到类似于TFT液晶屏的定点写入,VGA是扫描式暂时显示,所以时序显得尤为重要,时序出现失误,图像会出现走形,无法达到准确效果。而显示的时序控制主要依靠两条数据通道:行同步和场同步,即Hsync和Vsync,其控制了扫描显示的起点和终点,同时控制扫描起点的时间,通过时间的控制,达到确定的显示效果。 具体的控制时序图如下:

基于FPGA的数字图像处理

龙源期刊网 https://www.sodocs.net/doc/8312424266.html, 基于FPGA的数字图像处理 作者:李科唐波张玉 来源:《科技资讯》2012年第02期 摘要:随着数字多媒体技术的不断发展,数字图像处理技术被广泛应用于航空航天、通信、医学及工业生产等领域中。图像处理系统一般包括两个部分:图像采集部分和图像处理部分。图像采集部分由专用的视频处理器,图像缓存和控制接口电路组成。图像处理部分可以是计算机,也可以是专用图像处理器件,或者是两者的结合。由于底层图像处理的数据量很大,要求处理速度快,但运算结果相对比较简单,以(FPGA作为主要处理芯片的图像处理系统非常适合于对图像进行处理。 关键词:FPGA数字图像数据处理 中图分类号:TP2文献标识码:A文章编号:1672-3791(2012)01(b)-0032-01 数字图像处理的特点是处理的数据量大,处理非常耗时,本文研究了在FPGA上用硬件描述语言实现图像处理算法,通过功能模块的硬件化,解决了视频图像处理的速度问题。随着微电子技术的高速发展,FPGA为数字图像信号处理在算法、系统结构上带来了新的方法和思路。 图像处理系统的发展大致分为三个阶段。 第一阶段大体上是20世纪60年代末到20世纪80年代中期,当时的代表产品是美国和英国的一些公司推出的各种图像计算机以及图像分析系统。 第二阶段是从20世纪80年代中期到20世纪90年代初期,该阶段的特点是小型化,外部结构不再是机箱式而是插卡式。 第三阶段是从20世纪90年代初开始,这阶段的产品出现两大类,一种仍是采用插卡式,随着PCI,总线技术的成熟,采用PCI,总线的产品逐步取代采用ISA总线接口的产品。 随着近些年来多媒体技术的发展,人们对视频信息的需求愈来愈强烈,图像采集与处理显得越来越重要。依托计算机技术、通信技术和网络条件的发展以及数字信号处理的快速发展,图像处理系统出现以下发展趋势。 (1)随着硬件的发展,图像处理系统的性能会越来越高,价格会逐步降低。 (2)图像处理系统的功能都会集成在一个便于携带使用方便的电子设备上,不需要PC和各种辅助设备。

基于FPGA的VGA显示 论文

VGA显示器控制电路 论文

前言 VGA(视频图形阵列)作为一种标准的显示接口得到广泛的应用。利用FPGA 芯片和EDA设计方法,可以因地制宜,根据用户的特定需要,设计出针对性强的VGA显示控制器,不仅能够大大的降低成本,还可以满足生产实践中不断变化的用户需要,产品升级换代方便迅速。 在本设计中采用Altera公司的EDA软件工具Quartus II,并以Cyclone II系列的FPGA的器件作为主实现硬件平台的设计。

一、FPGA的原理 FPGA 是Filed Progranmmable Gate Array的缩写,即现场可编程逻辑阵列。FPGA是在CPLD的基础上发展起来的新型高性能可编程逻辑器件它一般采用SRAM工艺,也有一些专用器件采用Flash工艺或反熔丝(Anti_Fuse)工艺等。FPGA的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。FPGA的基本组成部分有可编程输入/输出单元,基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。FPGA 的主要器件供应商有Xilinx、 Altera、 Lattice、 Actel和 Atmel 等。 二、 VGA转换接口的简单描述 本设计另外自制VGA接口电路。 VGA时序控制模块是整个显示控制器的关键部分,最终的输出信号行、场同步信号必须严格按照VGA时序标准产生相应的脉冲信号。对于普通的VGA 显示器,其引出线的共含5个信号:G,R,B(三基色信号),HS(行同步信号),VS(场同步信号)。在五个信号时序驱动时,VGA显示器要严格遵循“VGA工业标准”,即640Hz×480 H z×60Hz模式。 下图(1)为VGA显示控制器控制CRT显示器 VGA(Video Graphic Array)接口,即视频图形阵列,也叫做D-Sub接口,是15针的梯形插头,分3排,每排5个,传输模拟信号。VGA接口采用非对称分布的15针连接方式,其工作原理:是将显存内以数字格式存储的图像(帧)信号在RAMEAC里经过模拟调制成模拟高频信号,然后再输出到显示设备成像。目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像生成图像。而对于LCD、DLP扥数字显示设备,显示设备中需配置相应的A/D (模拟/数字)转换器,将模拟信号转变为数字信号。在经过D/A和A/D2次转换后,不可避免地造成了一些图像细节的损失。VGA接口应用于CRT显示器无可厚非,但用于连接液晶之类的显示设备,则转换过程的图像损失会使显示效果略微下降。VGA接口的引脚分配如下图(1)所示

基于FPGA的图像处理现状分析

基于FPGA的图像处理现状分析 摘要:本文首先介绍了现场可编程门阵列(FPGA)的基本特点和设计流程。针对图像处理中处理速度的瓶颈问题,本文回顾了基于FPGA的图像处理算法,包括图像的采集和压缩存储、预处理、图像检测、视频图像的实时处理和显示等。这些实现算法,在提高图像的处理速度上都有明显的效果,在图像的实时处理方面具有现实的意义。 关键字:FPGA,图像处理,实时,硬件设计. 1引言 随着数字多媒体技术的不断发展,数字图像处理技术被广泛应用于航空航天、通信、医学及工业生产等领域中,新开发的产品在图像存储容量、图像质量、图像处理速度等方面有了新的要求。数字图像处理,一般是通过对像素的一些运算提高图像质量,在图像处理过程中,虽然处理算法简单,但参与运算的数据量大,数据需多次重复使用,因此,图像处理往往是图像处理系统中最为耗时的环节,对整个系统速度影响较大。在当前图像处理算法研究已经很成熟的背景下,提高图像处理的时效性有很大的应用前景。随着微电子技术的高速发展,FPGA 为数字图像信号处理在算法、系统结构上带来了新的方法和思路。由于图像中的所有元素均可施以同样的操作,存在固有的并行性,非常适合于映射到FPGA架构中由硬件算法实现,使得图像的处理速度大大加快。对于数字图像处理,底层图像处理的数据量很大,要求处理速度快,但运算结果相对比较简单,以FPGA作为主要处理芯片的图像处理系统非常适合于对图像进行处理。 2现场可编程门阵列(FPGA)概述 FPGA(Field Programmable Gate Array)是一类高集成度的可编程逻辑器件,起源于美国的XILINX公司,该公司于1985年推出了世界上第一块FPGA芯片。FPGA技术结合了微电子技术、电路技术、EDA技术,使设计者可以集中精力进行所需逻辑功能的设计。与专用集成电路ASCI(Application Specific Integrated Circuit)相比,FPGA具有灵活性高、设计周期短、成本低、风险小等优势,因而得到了广泛应用。 随着工艺的发展和市场需求的扩大,超大规模、高速、低功耗的新型FPGA不断推陈出新。新一代的FPGA甚至集成了中央处理器(CPU)或数字处理器(DSP)内核[1],在一片FPGA开发板上进行软硬件协同设计,为实现片上可编程系统提供了强大的硬件支持。 目前,FPGA的主要发展动向是实现片上可编程系统,芯片朝着高密度、低电压、低功耗方向发展,实现在速度和集成方面的进一步提高。迄今为止,FPGA的品种繁多,主要有XILINX公司的Spartan、vertex、Atrix-7、Kintex-7系列,以及ALTERA公司的FIEX系列等。根据FPGA基本结构的不同,可以将其分为基于乘积项技术的FPGA和基于查找表技术的FPGA 两种。 FPGA主要有6个部分组成:可编程输入/输出单元、基本可编程逻辑单元、完整的时钟管理、内嵌SRAM、丰富的布线单元、底层嵌入功能单元和内嵌专用单硬件模块等。基于FPGA

基于FPGA的图像差分处理

基于FPGA的图像差分处理 1背景知识 差分图像在许多领域得到了广泛的应用,比如:视频压缩,生物医学诊断,天文学,遥感,人脸识别等。 2 matlab仿真MATLAB源码:Main.mI = imread(flower.bmp); figure, imshow(I);I_gray = rgb2gray(I);figure,imshow(I_gray);Id = mipcentraldiff(I_gray,dx); figure, imshow(Id);Mipcentraldiff.mfunction dimg = mipcentraldiff(img,direction)% MIPCENTRALDIFF Finite difference calculations %% DIMG = MIPCENTRALDIFF(IMG,DIRECTION)%% Calculates the central-difference for?a given direction% IMG : input image% DIRECTION : dx?or dy% DIMG : resultant image%% See also MIPFORWARDDIFF MIPBACKWARDDIFF MIPSECONDDERIV% MIPSECONDPARTIALDERIV% Omer Demirkaya, Musa Asyali, Prasana Shaoo, ... % Medical Image Processing Toolboximg = padarray(img,[1 1],symmetric,both);[row,col] = size(img);dimg = zeros(row,col);switch(direction)casedx,dimg(:,2:col-1) = (img(:,3:col)-img(:,1:col-2))/2;casedy,dimg(2:row-1,:) = (img(3:row,:)-img(1:row-2,:))/2;otherwise,disp(Direction is unknown);enddimg = dimg(2:end-1,2:end-1);仿真结果: 图1 RGB原图 图2 gray 图3 central_diff 3 FPGA设计 图4 基于串口传图的中心差分 如图4所示,我们将RGB565格式转化为Ycbcr格式,Y通道进入中心差分模块,完成中心差分算法。

基于FPGA的高速图像处理系统的设计

基于FPGA的高速图像处理系统的设计 摘要: 在本文中,设计了一个高速图像处理系统,是为了解决这样的问题,如出现在车载计算机图像处理中的低系统集成,低速的处理过程。通过配置Nios II软核CPU和一些基于主要硬件FPGA的图像预处理,处理和显示的功能模块和设计的系统软件,使得该系统实现了图像的采集,记忆和重叠功能。由于采用可编程芯片和并行处理技术,该系统集成度高,好维修,图像处理速度快、实时性强。 关键词:图像处理,FPGA,Nios II CPU。 I.介绍 近年来,车载计算机中存在的主要问题集中在两个方面。首先,在使用低功率损耗的PowerPC CPU的状态下,对于图像的采集和显示,一个集成板是必需的。其次,随着视频图像和红外热像仪的广泛使用,还有电子一体化的发展,应该设计出一个高速的图像处理系统。 为了解决这两个主要的问题,作者设计了一个基于FPGA的高速图像处理系统用来识别重叠的多通道图像信息。功能模块,比如图像采集,处理和显示,都可以在一个单一的FPGA芯片上实现,它减少了外围电路,提高整个系统的性能。因为并行处理技术,处理速度和实时性都大大的提高。

II.图像处理算法分析 A.基于双线性插值的图像放大 基于像素的放大倍率的方法原理简单、快速,但它只是复制原始像素的邻域。随着放大系数增大,图像会出现明显的块锯齿,不能保留原始图像的边缘信息。这个问题是可以通过双线性插值来解决。双线性插值可以消除锯齿,保留原始图像的边缘信息和获得更好的视觉效果。 图1.原始图像(略) 图2.放大图像(略) 图1是原始图像,其中f ij,f i,j+1,f i+1,j,f i+1,j+1是相邻的像素块。图2是在水平方向上放大K倍,在垂直方向放大L倍的图像。f ij,f i,j+1,f i+1,j,f i+1,j+1在放大图像中只改变位置但像素值保持不变。因此,我们可以得到以下方程:

基于FPGA的数字CMOS摄像机图像采集

基于FPGA的数字CMOS摄像机图像采集 一、数据采集系统概述 数据采集是指将以各种形式输入的被测信号,包括语音信号、温度信号、湿度信号、图像信号等经过适当处理,成为计算机可以识别的数字信号,从而送入计算机进行存储处理的过程,数据采集卡就是典型的基于数据采集系统原理的集成计算机扩展卡。如图1所示,在数据采集过程中主要有几个关键部分:(1)输入信号的幅度较小或者过大,需要经过放大器单元将输入信号幅度放大或者缩小;(2)输入信号带有较大的噪声,需要经过一个硬件的模拟滤波单元,将信号滤波整形;(3)将信号送到AD进行模数转换;(4)将信号传输到计算机;(5)存储记录和处理数据。 图1数据采集过程 通常认为如果数字逻辑电路的频率超过50MHz,而且工作在这个频率之上的电路已经 占到了整个电路系统的三分之一以上,就称为高速电路。相应的,对于并行采样系统,如果采样频率达到50MHZ,数据量并行8bit以上;对于串行采样系统,如果采样频率达到200MHz,一般将这种采样系统也称为高速数据采集。目前高速数据采集使用较多的采样频率一般在 50M~100MHz之间。采集系统分模拟系统和数字系统,大多数字采集系统中,CMOS图像 传感器是系统的成像部件,它是系统的“眼睛”,能够捕获高速运动物体的图像,此模块是将采集的模拟图像转化为数字信号输出;图像处理模块是系统的中间缓存处理部分,此模块为了消除或降低前期采集携带噪声的影响,提高图像质量,将庞大的数据量进行压缩,以减小对存储介质容量的要求;数据传输模块是系统与外设搭建的桥梁,此模块是将实时采集的数据高速传输,给外设提供信息。 二、总体方案设计 方案1: 图像数据的传输通过USB总线技术完成系统的初始化以及将最终的传输信号准确无误 地传送到上位机上。USB技术具有简单化、通用性、可靠性、热插拔、传输速率高等优点,随之带来的是应用USB技术的复杂程度高、总线传输协议需要协调等问题。 方案2: 利用两片SDRAM进行图像数据的短时间存储并快速传输,SDRAM是多Bank结构,

基于FPGA的VGA接口设计

毕业设计(论文) 基于FPGA的VGA显示接口设计 摘要 本文基于FPGA芯片设计实现了一个用于stm32单片机外围的VGA接口模块,该模块以VGA接口的工业标准作为设计规范,使VGA显示器成为了stm32单片机的显示输出设备,适合所有的液晶显示器和CRT显示器。本系统采用带VGA接口的OLED显示器,OLED显示器具有体积小、分辨率高、功耗低、色彩丰富等特点,非常适合穿戴。模块与STM32单片机的接口使用Intel8080总线方式,非常适合STM32的FSMC读写模式,能方便地对屏幕任意像素进行读写操作。 关键字FPGA,VGA,OLED,STM32

VGA display interface design based on FPGA Abstract As people pursuit for more fun from games and the progress of science and technology, in the wargame , in order to make the team have a clear understanding of the battlefield situation, we use the OLED which is a kind of micro display to show all the information. The micro display generally use the VGA interface. With the development of manufacturing technology, VGA interface has become more compact, it has advantages of low cost, high resolution rich color etc. FPGA with high flexibility can be designed differently according to the needs, achieve the lowest cost. This paper designed a VGA display interface based on FPGA. Useful signal of the VGA interface is the horizontal synchronization signal, vertical synchronization signal and R,G,B signals. In this paper, we use FPGA to produce the horizontal synchronization signal and vertical synchronization signal, and the data from memory is converted into analog R,G,B signal by FPGA. The design use ISSI 25616 SRAM as the memory connectted by STM32F103VCT6. Key words :FPGA,VGA interface,OLED

基于FPGA的VGA图像显示与控制

基于FPGA的VGA图像显示与控制 课程要求:采用verilog语言,基于FPGA的VGA图像显示,即能够在显示器上实现动态彩色图像的显示。 VGA显示接口的理论分析:硬件采用CycloneII系列的EP2C20Q240C8N,它含有240个引脚。对于VGA的显示器遵循800*600@75模式,其中800是指每行中显示的像素的个数,而600是指屏幕每一列所包含的像素的个数。 VGA工业标准规定了具体地,在扫描过程中的时序图如下: 行扫描时序图 场扫描时序图 每场信号对应625个行周期,其中600行为图像显示行,每场有场同步信号,该脉冲宽度为3个行周期的负脉冲;每行显示行包括1056个点时钟,其中800点为有效显示区,每行有一个行同步信号的负脉冲,该脉冲宽度为80个点时钟。这样我们可以知道,行频为625*75=46857Hz。需要的点时钟的频率为:625*1056*75=49.5MHz约为50MHz。由上图可知,实际上在真正的实现过程中,每一行扫描所花的时间实际上比显示一行的像素所花的时间多了1056-800=256个像素点。同理,每一场的扫描时间多了625-600=25个行时间。 设计思路: 我们采用BmpToMif工具把BMP格式的图像转换为.mif文件。利用QuartusII7.2自带的MegaWizard Plug-In Manager产生一个ROM存储器,并用其来初始时.mif 文件。即将图像文件写入到存储器里面。然后利用编程来控制图像的显示。 设计步骤: 1、工程创建:创建一个Project取名字为vga,在创建工程的向导中选着CycloneII 系列的EP2C20Q240C8。 2、代码书写:新建一个Verilog HDL File编写程序代码如下: `timescale 1ns/1ps module tupian (clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b,addr); input clk,rst_n;

基于FPGA的图像边缘检测系统设计

摘要:许多关于图像中比较重要的信息都在图像的边缘包含着,图像边缘检测作为图像处理的重要组成部分,在许多领域有着重要的应用。图像边缘检测在很大程度上减少了数据的量,并且除去了一些并不是特别相关的信息,但是却保留了对于图像来说重要的结构属性,数据量大,重复度高是边缘检测算法最主要的特点。由于FPGA的算法在硬件处理中速度快、而且可以用来直接编程、可重配置等各种特点,因此它在图像处理中占有很重要的位置,为此文章提出了运用FPGA实现边缘检测的方法,并且根据FPGA的特性,对Sobel算子进行了FPGA设计与实现以及仿真,并且对几种边缘检测算子进行了比较。仿真中通过改变程序中的阈值可以得到不同的处理效果,这也是利用FPGA的优点,方便容易、速度也得到了提高,并且可编程、可重配置,使得FPGA在数字图像处理方面显得非常优越。 关键词:边缘检测;FPGA;图像处理;Sobel算子;Prewitt算子 The design of image edge detection technology based on FPGA Abstract:Many important information about the image is contained at the edge of the image,Image edge detection is an important part of image processing,It is important in many fields .Image edge detection greatly reduces the amount of data,And removed some information that is not particularly relevant,But it preserves the structural attributes that are important to the image,Large amount of data,High repetition is the most important feature of edge detection algorithm.Because the FPGA algorithm is fast in hardware processing、And can be used for direct programming, reconfiguration and other characteristics,Therefore, it plays an important role in image processing,For this reason, a method of edge detection using FPGA is proposed,And according to the characteristics of FPGA,FPGA design, implementation and Simulation of Sobel operator are carried out,And several edge detection operators are compared.In simulation, different processing results can be obtained by changing the thresholds in the program,This is also the advantage of using FPGA, which is convenient, easy and fast,And programmable and reconfigurable, enabling FPGA to be very good in digital image processing.

(完整版)本科毕业设计___基于FPGA的VGA显示控制器设计

基于FPFA的VGA显示控制器设计 摘要 目前,数码产品逐渐进入了人们生活的每一个领域,而此类产品大多都带有显示屏,可见对显示屏的控制电路进行研究具有很大的市场需求。VGA作为一种标准的显示接口得到了广泛的应用,同时基于VGA技术的显示控制器也拥有广泛的使用领域。 本文所设计的VGA控制器就是通过利用超大规模可编程逻辑器件FPGA和Altera公司开发的EDA设计软件Quartus II 8.0,并采用自顶向下的VHDL设计方法,将该控制器分成用VHDL语言进行描述的五个子模块来实现的。在Quartus II 8.0软件平台上,完成了对该控制器的设计输入、综合、仿真和下载。在实验开发板上,也进行了硬件调试。调试结果表明,设计的VGA控制器能够正确地输出RGB颜色信号和时序控制信号,可以显示符合VGA工业标准的测试彩条信号,内置ROM信息,实时RAM信息,还能够分屏显示三路RGB图像信息,并在这几种模式之间灵活切换和通断。它工作稳定,达到了设计要求。 本设计利用了不同于以往传统的电子设计方法,具有修改灵活,高移植性,维护简单,可靠性好等优点。大大地缩短了设计周期,降低了生产成本。 关键词现场可编程门阵列;硬件描述语言;视频图像阵列 -

-

The VGA Display Controller Design Based on FPFA Abstract The currently, the digital products which most of them have a display screen entered in every area of people's lives gradually, so we can see the great market demand of the study on the control circuit .As a standard display interface has been widely used, the VGA display controller based on this VGA norm also has a broad field of use at the same time. In this paper, designed through the use of ultra-large-scale programmable logic device-FPGA and Altera developed EDA design software Quartus II of version 8.0, and the VHDL top-down design methodology,the VGA controller was divided into five sub-modules which described with VHDL language. It has finished the design of the controller input, integrated, simulation, and download on Quartus II 8.0 software platform,and it has carried out hardware debugging on the experimental development board. The results from debugging showed that the design of the VGA controller can output the color signals of RGB and the control signals correctly. It can show the images that compliance with industry standard of VGA ,such as the color bar test signal, a built-ROM image, and a real-time RAM image, but also to show the three-way RGB image information on one screen separately,and it can make a choice between these types of models and control the output connect or disconnector.It -

基于FPGA的VGA彩条图像显示

基于FPGA的VGA彩条图像显示 1. 设计的任务及内容 在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。目前,Verilog语言已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。 该实训的设计是用Verilog语言硬件描述语言设计出一个VGA图象显示控制器,用Verilog 硬件描述语言进行编程,把Verilog语言描述的VGA图象显示控制器所需的程序在QuartusⅡ软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。在结果符合要求的情况下把Verilog程序下载到FPGA器件上,利用FPGA器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。 VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。 CRT显示器作为一种通用型显示设备,如今已广泛应用于我们的工作和生活中。与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。如今随着液晶显示器的出现,越来越多的数字产品开始使用液晶作为显示终端。但基于VGA标准的显示器仍是目前普及率最高的显示器[1]。若驱动此类显示器,需要很高的扫面频率,以及极短的处理时间,正是由于这些特点,所以可以用FPGA来实现对VGA显示器的驱动。本次专业课程设计即选用FPGA 来实现VGA的显示。 随着FPGA的不断发展及其价格的不断下降,FPGA的可编程逻辑设计的应用优势逐渐显现出来。现在,越来越多的嵌入式系统选择了基于FPGA的设计方案。在基于FPGA的大规模嵌入式系统设计中,为实现VGA显示功能,既可以使用专用的VGA接口芯片如SPX7111A等,也可以设计和使用基于FPGA的VGA接口软核。虽然使用VGA专用芯片具有更稳定的VGA时序和更多的显示模式可供选择等优点,但设计和使用VGA接口软核更具有以下优势:(1)使用芯片更少,节省板上资源,减小布线难度;(2)当进行高速数据传输时,具有更小的高频噪声干扰;(3) FPGA(现场可编程门阵列)设计VGA接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。 1.1 FPGA简介 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分[9]。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和I/O引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 1

相关主题