FPGA基础入门【14】开发板VGA视频输出控制

【FPGA】基于VGA的图像显示 vga 阅读详情
AI摘要

本教程详细介绍如何使用NEXYS4开发板实现VGA视频输出,包括VGA基础原理、时序逻辑设计、IP配置、代码设计及仿真过程。

前两篇教程讲了通过USB控制鼠标和键盘的方法,顺便挖了个VGA的大坑,找了很久都没找到VGA转HDMI的转接器,好在在其中一个显示器后面发现了VGA接口。用VGA画一个大·害怕

VGA基础

在NEXYS 4开发板文档中写着,该板用14个引脚控制VGA,RGB红绿蓝三色各用4位数,加上HS - Horizontal Sync横向同步和VS - Vertical Sync纵向同步两个引脚。接口形式和连接如下,接口不对称用来防呆

VGA port
connection

CRT显示器

VGA是为老式的CRT阴极射线显示器使用,核心是加热的阴极发射电子(电视机开过后面会发热,过去熊孩子偷看电视必须知道的常识),经过格栅聚焦成电子束,经过偏转电场偏转后被高压加速,打在铺好三色荧光粉的显示屏上发光,其结构如下
CRT
尽管现在的LCD液晶显示屏和CRT本质上是不一样的,但VGA的逻辑时序是一样的

屏幕上的扫描分行和列,一般有240到1200行,320到1600列,行列相乘是像素数,每个像素对应RGB各4位即12位,因此逻辑设计时最好使用一个比较深的RAM。

VGA控制与时序

VGA控制电路需要生成有特定周期的HS和VS信号,用来校准偏转电场。VS决定了刷新率一般在50Hz到120Hz,而HS的周期则是扫完一整行用的时间。如下图所示,HS每个周期输出一次低电平脉冲,除了线性扫过一行的有效时间,还要留出偏转电场回到初始位置的时间retrace time,在低电平脉冲的前后都有一段
display surface
这个回复时间是根据实际实验观察测得的,因此基于不同的像素配置和刷新率,有相对固定的像素时钟和HS/VS配置。比如文档中推荐的640x480像素60Hz刷新率,用的像素时钟是25MHz,可以比较方便的用100MHz系统时钟生成。如果需要其他的配置,可以到这个网站找找:VGA_timing
timing
NEXYS 4文档中还推荐了HS和VS的生成逻辑,这个逻辑可以用来作为RAM的读取地址
pixel clock
实际上NEXYS 4文档里对VGA时序的介绍还是不够细致,这个网页里对HS和VS的关系介绍更清晰:VGA timing

其中一张时序图可以更清楚的看出HS和VS之间的时序关系,对此我们要对文档中给出的逻辑结构做出一点改进,HS拉高的时机从0改到800-48=752,拉低的时机从3.84us也就是96改到800-48-96=656
HS and VS

逻辑设计

这篇教程计划使用一张480x640@60Hz的图片显示,使用开发板推荐的时序配置。

理论上来说,这样的图片显示需要一个宽度为12位,深度为480640=307200的RAM存储器,但从横向计数器和纵向计数器的结构中看,用来给纵向计数器计数的时间是HS为高电平的时间,这里面包括了偏转电场的回复时间。我们可以设计一些额外的逻辑来专门排除回复时间,但这样会增加逻辑复杂度,并且还要给RGB输出也加上输出选择,不能直接用RAM的输出,因此决定这里浪费一些RAM空间,在相应空间填入0。这样设计使用的深度为521(800-96)=366784

IP配置

新建vivado工程,名为vga,配置选择开发板NEXYS 4,到IP catalog中搜索RAM,双击下面这个
BRAM
在Xilinx FPGA中,有几种存储方式,一种是外接存储设备,比如SPI flash和DDR,这些在前面的教程中介绍过使用方式;一种是BRAM块存储器,这个是芯片内部集成的存储器,每块可以储存36Kb或者18Kb,Xilinx最近有新的叫做URAM的内置存储器,每块有288Kb,比较类似;另一种是LUTRAM,LUT是FPGA逻辑配置的基础——查找表,有些查找表的存储可以被改成一个小的存储器,大小是128bit。

存储器的选择要看存储数据的深度和宽度,一般来说宽而浅的,不常变化且需要经常读取的,使用LUTRAM;稍微深且窄一点,需要持续读取的,使用BRAM;非常深,并且窄则使用外部存储器。VGA需要的是图片数据,一般都在MB量级,使用外部存储器是最好的选择,但这里为了展示RAM IP的配置方法,同时也是图方便,使用了BRAM(自然会用好多个)

IP的配置如下
IP1
IP2
IP3
第三张图的配置中出现了初始化配置,由于我们只显示图片,不打算输出视频,就把这个RAM当做ROM使用,一开始图片的信息就用这个.coe文件配置。

coe文件包含两部分,第一行是数据格式,是十六进制、十进制或者其他;第二行以后是数据具体内容。示例如下:

memory_initialization_radix=16;
memory_initialization_vector=3f, 1f;

从时序图中看,头31行为空,尾10行为空,并且尾64列为空

这里打算用MATLAB(如果没有license可以搜索Octave,相当于一个免费版本的MATLAB,大概功能都有)来生成coe文件。首先随便下载一张图片保存为pic.jpg,配置好MATLAB路径到图片的根目录后,使用如下脚本:

pic = imread('fear.jpg');
subplot(1,2,1);
imshow(pic);
pkg load image;
pic = imresize(pic, [480 640]);
pic = uint8(floor(double(pic)/16));
subplot(1,2,2);
imshow(pic*16);

pic = double(pic);
pic = pic(:,:,1)*256 + pic(:,:,2)*16 + pic(:,:,3);
data = zeros([521,704]);
data(30:509,1:640) = pic;
data = reshape(data', [521*704 1]);
fileID = fopen('picture.coe','w');
fprintf(fileID,'memory_initialization_radix=10;\n');
fprintf(fileID,'memory_initialization_vector=\n');
fprintf(fileID,'%d,\n',data(1:end-1));
fprintf(fileID,'%d;\n',data(end));
fclose(fileID);

可以把fear.jpg改成下载的图片名称,最终生成一个picture.coe文件

JPEG图片都是8位RGB,这里要降低到4位,所以看起来会比较失真,另外所有图片都会被转为480x640,原本不是这个比例的图片都会变形:
modified
最后Vivado的IP调用coe文件时,因为文件比较长,需要等待一段时间,最终生成IP Pic_RAM

代码设计

代码vga.v如下:
引脚定义,除了时钟和复位,就是VGA的14根引脚

module vga(
    input             clk,
    input             rst,
    
    // VGA port
    output reg [3:0]  VGA_R,
    output reg [3:0]  VGA_G,
    output reg [3:0]  VGA_B,
    output reg        VGA_HS,
    output reg        VGA_VS
);

资源定义

reg        clk_pixel;
reg        clk_count;
(* dont_touch = "true" *)reg  [9:0]  hor_count;
(* dont_touch = "true" *)reg         hor_zero_detect;
(* dont_touch = "true" *)reg         hor_3_84_us_detect;
(* dont_touch = "true" *)reg         hor_effective;
reg  [18:0]  ver_count;
(* dont_touch = "true" *)reg         ver_zero_detect;
(* dont_touch = "true" *)reg         ver_64_us_detect;
(* dont_touch = "true" *)reg         ver_effective;

用100MHz放慢四倍形成25MHz

// generation of 25MHz pixel clock
always @(posedge clk or posedge rst) begin
    if(rst) begin
        clk_pixel <= 1'b0;
        clk_count <= 1'b0;
    end
    else begin
        clk_count <= ~clk_count;
        if(clk_count) begin
            clk_pixel <= ~clk_pixel;
        end
    end
end

横向扫描计数,以及HS信号控制

// horizontal counter up to 800
// horizontal counter zero detect and 3.84us detect
always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        hor_count          <= 10'd0;
        hor_zero_detect    <= 1'b0;
        hor_3_84_us_detect <= 1'b0;
    end
    else begin
        hor_count          <= (hor_count < 10'd799) ? hor_count + 10'd1 : 10'd0;
        hor_zero_detect    <= (hor_count == 10'd655) ? 1'b1 : 1'b0;
        hor_3_84_us_detect <= (hor_count == 10'd751) ? 1'b1 : 1'b0;
    end
end

// HS control
always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        VGA_HS <= 1'b1;
    end
    else if(hor_zero_detect) begin
        VGA_HS <= 1'b0;
    end
    else if(hor_3_84_us_detect) begin
        VGA_HS <= 1'b1;
    end
end

纵向计数以及VS信号控制,计数最高到521*704,同时用来作为RAM的地址

// vertical counter up to 521
// vertical counter zero detect and 64us detect
always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        ver_count <= 19'd0;
    end
    else if(VGA_HS && (ver_count < 19'd366783)) begin
        ver_count <= ver_count + 19'd1;
    end
    else if(VGA_HS) begin
        ver_count <= 19'd0;
    end
end


always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        ver_zero_detect <= 1'b0;
    end
    else if(ver_count == 19'd0) begin
        ver_zero_detect <= 1'b1;
    end
    else begin
        ver_zero_detect <= 1'b0;
    end
end


always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        ver_64_us_detect <= 1'b0;
    end
    else if(ver_count == 19'd1408) begin
        ver_64_us_detect <= 1'b1;
    end
    else begin
        ver_64_us_detect <= 1'b0;
    end
end

// VS control
always @(posedge clk_pixel or posedge rst) begin
    if(rst) begin
        VGA_VS <= 1'b1;
    end
    else if(ver_zero_detect) begin
        VGA_VS <= 1'b0;
    end
    else if(ver_64_us_detect) begin
        VGA_VS <= 1'b1;
    end
end

存储部分,IP定义在前面有提到,随着地址而输出RGB信号

// RAM part and output
wire [11:0] dout;
Pic_RAM Pic_RAM (
  .clka(clk),         // input wire clka
  .ena(1'b1),         // input wire ena
  .wea(1'b0),         // input wire [0 : 0] wea
  .addra(ver_count),  // input wire [18 : 0] addra
  .dina(12'd0),       // input wire [11 : 0] dina
  .douta(dout)        // output wire [11 : 0] douta
);

always @(posedge clk or posedge rst) begin
    if(rst) begin
        VGA_R <= 4'h0;
        VGA_G <= 4'h0;
        VGA_B <= 4'h0;
    end
    else begin
        VGA_R <= dout[11: 8];
        VGA_G <= dout[ 7: 4];
        VGA_B <= dout[ 3: 0];
    end
end

endmodule

模拟仿真

Testbench

Testbench不需要输入时钟和复位以后的信号,下面是源代码tb_vga.v:

`timescale 1ns/1ns

module tb_vga;

reg         clock;
reg         reset;
wire [3:0]  VGA_R;
wire [3:0]  VGA_G;
wire [3:0]  VGA_B;
wire        VGA_HS;
wire        VGA_VS;

initial begin
    clock = 1'b0;
    reset = 1'b0;

    // Reset for 1us
    #100 
    reset = 1'b1;
    #1000
    reset = 1'b0;

end

// Generate 100MHz clock signal
always #5 clock <= ~clock;

vga vga_top(
    .clk     (clock),
    .rst     (reset),
    
    // VGA port
    .VGA_R   (VGA_R),
    .VGA_G   (VGA_G),
    .VGA_B   (VGA_B),
    .VGA_HS  (VGA_HS),
    .VGA_VS  (VGA_VS)
);

endmodule

仿真脚本

写一个仿真脚本sim.do,需要注意调用Xilinx的库文件和IP生成的netlist仿真文件,并且VS的周期大约是16.7ms,因此跑20ms需要一段时间,要耐心等待:

vlib work
vlog ../src/vga.v ../src/Pic_RAM_sim_netlist.v ./tb_vga.v ./glbl.v
vsim -L xpm -L secureip -L unisims_ver -L unimacro_ver -L unifast_ver -L simprims_ver work.tb_vga work.glbl -voptargs=+acc +notimingchecks
log -depth 7 /tb_vga/*
do wave.do
run 20ms

仿真结果

此教程有调用Xilinx的IP,因此记得先建立Xilinx的库文件:

vmap xpm C:/Users/[account]/xilinx_lib/xpm
vmap secureip C:/Users/[account]/xilinx_lib/secureip
vmap unisims_ver C:/Users/[account]/xilinx_lib/unisims_ver
vmap unimacro_ver C:/Users/[account]/xilinx_lib/unimacro_ver
vmap unifast_ver C:/Users/[account]/xilinx_lib/unifast_ver
vmap simprims_ver C:/Users/[account]/xilinx_lib/simprims_ver

具体操作可以参考这篇教程里的库文件调用部分:FPGA基础入门【8】开发板外部存储器SPI flash访问

在开始仿真之前记得把modelsim.ini文件拷贝到仿真根目录,开启ModelSim改变路径到根路径后,调用脚本do sim.do,加入相应信号后,结果如下:
waveform
可以看出VS的一个周期是16.672ms,在偏转电场回复好后就可以输出有效视频信息

编译烧写

Vivado的工程文件已经在前面新建好了,并且配置好了IP Pic_RAM,现在加入vga.v,由NEXYS4 官方约束文件修改出需要的引脚配置文件vga.xdc:

## This file is a general .xdc for the Nexys4 DDR Rev. C
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project

## Clock signal
set_property -dict {PACKAGE_PIN E3 IOSTANDARD LVCMOS33} [get_ports clk]
create_clock -period 10.000 -name sys_clk_pin -waveform {0.000 5.000} -add [get_ports clk]


##Switches

set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports rst]


##VGA Connector

set_property -dict {PACKAGE_PIN A3 IOSTANDARD LVCMOS33} [get_ports {VGA_R[0]}]
set_property -dict {PACKAGE_PIN B4 IOSTANDARD LVCMOS33} [get_ports {VGA_R[1]}]
set_property -dict {PACKAGE_PIN C5 IOSTANDARD LVCMOS33} [get_ports {VGA_R[2]}]
set_property -dict {PACKAGE_PIN A4 IOSTANDARD LVCMOS33} [get_ports {VGA_R[3]}]

set_property -dict {PACKAGE_PIN C6 IOSTANDARD LVCMOS33} [get_ports {VGA_G[0]}]
set_property -dict {PACKAGE_PIN A5 IOSTANDARD LVCMOS33} [get_ports {VGA_G[1]}]
set_property -dict {PACKAGE_PIN B6 IOSTANDARD LVCMOS33} [get_ports {VGA_G[2]}]
set_property -dict {PACKAGE_PIN A6 IOSTANDARD LVCMOS33} [get_ports {VGA_G[3]}]

set_property -dict {PACKAGE_PIN B7 IOSTANDARD LVCMOS33} [get_ports {VGA_B[0]}]
set_property -dict {PACKAGE_PIN C7 IOSTANDARD LVCMOS33} [get_ports {VGA_B[1]}]
set_property -dict {PACKAGE_PIN D7 IOSTANDARD LVCMOS33} [get_ports {VGA_B[2]}]
set_property -dict {PACKAGE_PIN D8 IOSTANDARD LVCMOS33} [get_ports {VGA_B[3]}]

set_property -dict {PACKAGE_PIN B11 IOSTANDARD LVCMOS33} [get_ports VGA_HS]
set_property -dict {PACKAGE_PIN B12 IOSTANDARD LVCMOS33} [get_ports VGA_VS]

一切准备好以后开始编译综合生成bitstream,用USB线连上FPGA开发板,并烧写,再用VGA线连接上支持VGA的显示器,或者用一个VGA转HDMI的转换器接到任意一个显示器。如果你想的话,搬出一个老电视机也可以。

打开显示器,确保它读取的是VGA接口,你就可以看到我看到的真·害怕画面:
result_monitor
有点失真,但是。。。更害怕了呢!

总结

这是一个很害怕的教程,嘿嘿嘿。开发板上有Pmod通用接口,但是我没有可以和它相连的外接设备;有模数转换的设备,但我没有示波器和信号生成器,也没法做。只好挖个MicroSD卡存取的坑了

FPGA—VGA 显示器显示彩条(附代码) VGA 显示器、VGA 接口及接口定义、 VGA 显示原理、VGA 显示器显示彩条 阅读详情

相关推荐

基于Nexys4 DDR的VGA图像显示实现及源代码

其中,基于Nexys4 DDR开发板的VGA图像显示是一项常见且引人注目的任务。本文将详细介绍如何使用Nexys4 DDR开发板以及相应的源代码实现VGA图像显示。通过本文的步骤,您可以成功实现基于Nexys4 DDR开发板的VGA图像显示,并使用提供的Verilog源代码进行编程。在Xilinx Vivado软件中,使用上述源代码创建一个新的IP模块并进行综合。然后根据Nexys4 DDR开发板的约束文件将综合后的设计烧录到开发板上。您将能够在VGA显示器上看到一个基于源代码中设置的颜色分量的图像。

DevCyberX的博客 450

FPGA学习——VGA显示

@toc 一、显示姓名学号 (一)原理 (二)生成字模 1.点击设置 2.汉字字模 3.数字字模

”一只特立独行的猪“的博客 1万+

基于FPGA+SDRAM+BT656视频解码移植总结

1、TVP5150模块(模拟视频信号解码模块)。2、模拟摄像头一个(PAL或NT格式输出AV同轴)3、FPGA开发板一块(EP4CE6+SDRAM+VGA)实现功能:模拟摄像头输出的视频信号为模拟信号,AV 同轴线缆输出,通过转接线接 到 TVP5150 模块,FPGA 控制 TVP5150 模块,通过 SDRAM 缓存视频数据。FPGA 解码 BT656 数据。FPGA 控制 VGA 输出视频数据。

axingxiansen的博客 1655

教你怎样将RS422转成RS485接口

RS232接口是一种用于近距离(最大30-60米)、慢速度、点对点通讯的通讯协议,在RS232中一个信号只用到一条信号线,采取与地电压参考的方式,因而在长距离传输后,发送端和接收端地电压有出入,容易造成通讯出错或速度降低。 RS485/422接口采用不同的方式:每个信号都采用双绞线(两根信号线)传送,两条线间的电压差用于表示数字信号。例如把双绞线中的一根标为 A(正),另一根标为B(负),当A为正电压(通常为+5V),B为负电压时(通常为0),表示信号“1”;反之,A为负电压,B为正电压时表示信号 “0”

komtao520的博客 4万+

DIGILENT官方指导手册(中文)_你的Nexys 4DDR第一个入门实验

Nexys4-DDR采用了Xilinx Artix-7 FPGA芯片,它是一款简单易用的数字电路开发平台,可以支持 在课堂环境中来设计一些行业应用。大规模、高容量的FPGA, 海量的外部存储, 各种USB、以太 网、以及其它接口, 这些让Nexys4-DDR 能够满足从入门级组合逻辑电路到强大的嵌入式系统的设 计。同时,板上集成的加速度、温度传感器,MEMs数字麦克风,扬声器放大器以及大量的I/O设 备,让Nexys4-DDR不需要增添额外组件而用于各种各样的设计

Nexys4开发板使用手册

Nexys4开发板使用手册

FPGA入门学习笔记(二十)Vivado设计VGA控制器_板级验证

FPGA入门学习笔记(二十)Vivado设计VGA控制器_板级验证

weixin_45463952的博客 597

基于BS21的星闪模块设计电路SLE/BLE

基于BS21的星闪模块设计电路SLE/BLE HI2821

2503_91889531的博客 2742

Nexys4 vga显示器实验

使用verilog语言在nexys4板上实现vga彩色条纹显示

qq_63553317的博客 1156

CAD的.dwg文件导入 ArcGIS:高程分析、坡度分析、坡向分析

CAD的.dwg文件导入 ArcGIS,再进行高程分析、坡度分析、坡向分析。

My_Echo_yM的博客 7239

WIFI基础入门--802.11g--增强速率物理层ERP--15

WIFI基础入门--802.11--增强速率物理层--191.802.11g的组件保护机制 1.802.11g的组件 802.11g其实是将好几种物理层规范合而为一。虽然统称为增强速率物理层(Extended Rate PHY简称ERP),但是实际上ERP有好几种不同的方式: ERP-DSSS与ERP-CCK 这两种模式向下兼容于原始直接序列规范(1Mbps与2Mbps),以及所提到的802.11...

香蕉一号 4619

FPGA的VGA实现

不同分辨率的VGA显示时序是类似的,仅存在参数上的差异,如图 18.1.5所示。与之类似,场同步信号在在一个场扫描周期中完成一帧图像的显示,不同的是行扫描周期的基本单位是像素点时钟,即完成一个像素点显示所需要的时间;逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;VGA 显示器显示图像,并不是直接让图像在显示器上显示出来,而是采用扫描的方式,VGA用的扫描的方式,一般是逐行扫描。

Morzart的博客 1492

白话详细解读(七)----- CBAM:Convolutional Block Attention Module

一、CBAM简介 论文链接:https://x.sci-hub.org.cn/scholar?hl=zh-TW&as_sdt=0%2C5&q=CBAM%3A+Convolutional+Block+Attention+Module&btnG=&oq=CB CBAM这篇论文是在2018年提出的,自提出之后,已经被引用上千次,可见其影响力。CBAM是一种专门为了卷积神经网络而设计的注意力模块,传统的卷积存在只关注局部信息,而往往忽略全局信息的弊端,以3*3卷积为例,滤波器有9个

奋斗の博客 1万+

基于FPGA的VGA协议实现

一、简介:VGA,英文全称"Video Graphics Array”,译为视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由IBM公司于1987年推出,因其分辨率高、显示速度快、颜色丰富等优点,广泛应用于彩色显示器领域。VGA接口:母头:公头:VGA连接线两头都是公头:使用VGA连接线将计算机和VGA显示器连接起来1.2、VGA引脚的定义:1(红基色)、2(绿基色)、3(蓝基色)、13(行同步信号)、14(场同步信号)拐角 为重要。

m0_64341369的博客 1232

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 400

基于Halium 9为小米平板4移植Ubuntu Touch:内核适配与驱动调试实战

在移动设备生态中,Linux内核作为核心,通过硬件抽象层(HAL)管理底层硬件驱动,为上层系统提供统一接口。其模块化设计允许深度定制,是实现跨平台移植的技术基础。Halium项目正是利用这一原理,构建了一个中间层,将安卓内核的硬件支持能力“翻译”成标准Linux发行版能识别的格式,从而在手机、平板等移动设备上运行Ubuntu Touch、postmarketOS等移动Linux系统,极大地拓展了老旧设备的再利用价值。这一技术为开发者提供了在常见安卓硬件上进行Linux系统开发与定制的可能,尤其在嵌入式与物联

weixin_42639246的博客 376

FPGA_Verilog学习之旅(2)---浅谈VGA

文章目录前言一、VGA是什么二、VGA--工作流程1、VGA扫描方式2、VGA标准时序3、VGA常用分辨率4、VGA工作流程小结三、FPGA--VGA硬件设计四、FPGA--VGA程序设计1、VGA驱动模块2、VGA驱动模块的Modelsim仿真五、FPGA--VGA图片显示实验1、ROM_IP核的创建2、图片显示模块代码设计总结 前言 前段时间用开发板玩了玩VGA,显示了一些彩条、汉字、图片等,后期想用VGA做一些复杂点的东西,比如贪吃蛇游戏等,暂且先总结一下这几个显示小实验,其中详细一下谈图片显示的部

Coca_Tian的博客 2480

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

FPGA-VGA显示

VGA(Video Graphics Array)是IBM在1987年随PS/2机⼀起推出的⼀种视频,具有分辨率⾼、显⽰速率快、颜⾊丰富等优点,在彩 ⾊显⽰器领域得到了⼴泛的应⽤。不⽀持热插拔,不⽀持⾳频传输。对于⼀些嵌⼊式VGA显⽰系统,可以在不使⽤VGA显⽰卡和计算机的 情况下,实现VGA图像的显⽰和控制。VGA显⽰器具有成本低、结构简单、应⽤灵活的优点。对于⼀名FPGA⼯程师,尤其是视频图像的 ⽅向的学习者,VGA协议是必须要掌握的。外部接口 VGA并没有特殊的外部芯⽚,我们需要关注的其实只有5个信

伊木子曦的博客 1989

机器学习特征选择-t检验

在特征选择的过程中通过计算检验统计量值,比较特征之间的统计量的大小,并降序排列,选取统计值较高的特征,从而起到去除差别小的特征(此差别小的特征难以区分不同的额类别)的目的。 以t检验(Student's t test)为例: 假设检验 通过比较两类样本的随机变化,通过计算其p值决定是否拒绝零假设,也即是说:通过计算p值,若p值小于某一阈值则认为两个样本具有显著差异,两个样本是不同的,此时拒绝...

heda3的博客 6700

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VGA

1 相关理论 1. 1 VGA介绍 VGA(Video Graphics Array)即视频图形阵列。 1.2 VGA管脚 VGA接口是一种D型接口,采用非对称分布的15pin连接方式,共有15针,分成3排,每排5个孔,是显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。一般在VGA接头上,会有1,5,6,10,11,...

weixin_42102929的博客 6693

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【FPGA实验】基于DE2-115平台的VGA显示

通过Verilog编程,实现以下VGA显示,并对照VGA协议信号做时序分析:1)屏幕上显示彩色条纹;2)显示自定义的汉字字符(姓名-学号);3)输出一幅彩色图像。

weixin_62901798的博客 1189

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

FPGA驱动VGA接口显示,基础显示

FPGA驱动VGA显示

m0_51497090的博客 835

2025 ALINX 入门竞赛类 FPGA 开发板选型推荐(含88折福利)

板卡提供丰富的经典接口,包括一个 16 位的 VGA 接口,可用于彩色图像显示;:以 AMD Spartan/Artix 系列为代表,国产品牌以紫光同创 Logos/Titan 系列为代表,无硬核处理器,靠 Verilog/VHDL 构建功能,强在并行计算控制,适合低延迟、高吞吐量场景(如高速数据采集)的纯硬件逻辑实现。AX7020 集成板载 USB JTAG,USB HOST/SLAVE 以及 USB 转串口,方便快速开发和调试,提供 PMOD 接口、独立按键和 LED,可进行简单的功能扩展和人机交互。

ALINX技术博客 1366

基于FPGA的vga显示驱动-基础篇

图像显示设备在日常生活中随处可见,例如家庭电视机、计算机显示屏幕等,这些设 备之所以能够显示我们需要的数据图像信息,归功于视频传输接口。常见的视频传输接口 有三种:VGA 接口、DVI 接口和 HDMI 接口,目前的显示设备都配有这三种视频传输接 口。三类视频接口的发展历程为VGA→DVI→HDMI。其中VGA接口出现最早,只能传输模拟图像信号;随后出现的 DVI接口又分为三类:DVI-A、DVI-D、DVI-I,分别可传输纯模拟图像信号、纯数字图像信号和兼容模拟、数字图像信号;最后的。

qq_74282390的博客 541
上一篇: FPGA基础入门【13】开发板USB键盘控制,教你做硬核键盘侠
下一篇: FPGA基础入门【15】开发板I2C温度传感器配置
起魔
博客等级 码龄8年 557粉丝 25原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值