各类显示屏的显示原理大部分是利用人眼的视觉暂留效应。比如之前的数码管显示就是设计每个周期内各个小段按顺序显示,来达到显示一个数字的效果。

VGA同理,显示屏在显示时是一个像素一个像素地显示,在人眼看来所有像素是同时显示的,便构成了一幅图片。
①显示器的分辨率越高(如4k屏:3840*2160),显示的图像越清晰。
②显示器的刷新率(即每秒能够显示几幅图片)越高,显示器越不卡,性能更好。(一个周期内,每个像素点显示的时间长度和显示屏的分辨率以及驱动电路的系统时钟频率决定了显示屏的刷新率。
系统时钟频率越高,显示屏的刷新率越高。)

显示器的显示原理:逐个像素点输出RGB值,通过设计时序可以达到这个目的。通过行扫描+列扫描达到显示所有像素点的目的。

VGA是一种显示标准,VGA接口即电脑采用VGA标准输出数据的专用接口。

VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号[23:0]RGB_data以及同步信号(水平和垂直信号)(horizontal_sig和vertical_sig)。

设计过程:利用计数器来输出每一个像素以及输出同步信号。

案例:

要求:640*480的显示屏

 代码:

module VGA(
clk,
reset,
content_data_request,//数据请求信号
horizontal_sig,//horizontal 水平的
vertical_sig, //vertical 垂直的
content_data,//要显示的内容数据
RGB_data,//输出的内容数据
vis_sig//内容显示同步信号(高电平时显示)
);
input clk ;
input reset ;
output reg content_data_request ;//数据请求信号
output reg horizontal_sig ;
output reg vertical_sig ;
input [23:0]content_data ;
output reg [23:0]RGB_data ;
output reg vis_sig ;//内容显示同步信号
reg h_vis_sig ;//行内容显示同步信号
reg v_vis_sig ;//列内容显示同步信号 //定义时间节点参数
//行参数
parameter h_pulse_start = 0 ; //行起始脉冲开始信号
parameter h_pulse_end = 96 ;// 行起始脉冲结束信号 96
parameter h_content_start = 96 + 40 + 8 ;//行内容开始信号 144
parameter h_content_end = 96 + 40 + 8 + 640 ;//行内容结束信号 784
parameter h_end = 96 + 40 + 8 + 640 + 8 + 8;//行结束信号 800 //列参数
parameter v_pulse_start = 0 ; //列起始脉冲开始信号
parameter v_pulse_end = 2 ;//列起始脉冲结束信号 2
parameter content_start = 2 + 25 + 8 ;//列内容开始信号 35
parameter content_end = 2 + 25 + 8 + 480 ;//列内容结束信号 515
parameter v_end = 2 + 25 + 8 + 480 + 2 + 8;//列结束信号 525 //行与列 计数器
reg [9:0]h_cnt ;
reg [9:0]v_cnt ; always@(posedge clk or negedge reset)//行计数
if(!reset)
h_cnt <= 0 ;
else if ( h_end - 1 <= h_cnt )//0-799
h_cnt <= 0 ;
else
h_cnt <= h_cnt + 1 ; always@(posedge clk or negedge reset)//列计数
if(!reset)
v_cnt <= 0 ;
else if (( v_end - 1 <= v_cnt ) && ( h_end - 1 <= h_cnt ))//0-524
v_cnt <= 0 ;
else if (( h_end - 1 <= h_cnt ) && ( v_end - 1 > v_cnt ))
v_cnt <= v_cnt + 1 ; //产生行起始脉冲
always@(posedge clk or negedge reset)//
if(!reset)
horizontal_sig <= 1 ;
else if( h_cnt == 0 )
horizontal_sig <= 0 ;//1-96 共96
else if ( h_cnt == 96 )
horizontal_sig <= 1 ; //产生列起始脉冲
always@(posedge clk or negedge reset)//
if(!reset)
vertical_sig <= 1 ;
else if(( v_cnt == 0 )&& ( h_end - 1 <= h_cnt ) )
vertical_sig <= 0 ;//1-2 共2
else if (( v_cnt == 2 )&& ( h_end - 1 <= h_cnt ) )
vertical_sig <= 1 ; //产生行显示同步信号
always@(posedge clk or negedge reset)//
if(!reset)
h_vis_sig <= 0 ;
else if (( 144 - 2 <= h_cnt ) && ( 784 - 1 - 2 >= h_cnt )) //提前两拍保证输出在第145拍开始
h_vis_sig <= 1 ;//146 - 785共
else
h_vis_sig <= 0 ; //产生列显示同步信号
always@(posedge clk or negedge reset)//
if(!reset)
v_vis_sig <= 0 ;
else if (( 35 <= v_cnt ) && ( 515 >= v_cnt ) && ( ( h_end - 1 <= h_cnt ) ) )
v_vis_sig <= 1 ;
else if (( 35 > v_cnt ) || ( 515 < v_cnt ) )
v_vis_sig <= 0 ; //请求信号
always@(posedge clk or negedge reset)
if(!reset)
content_data_request <= 0 ;//
else if ( ( v_vis_sig ) && ( h_vis_sig ) )
content_data_request <= 1 ;
else
content_data_request <= 0 ; //显示同步信号
always@(posedge clk or negedge reset)//
if(!reset)
vis_sig <= 0 ;
else if ( content_data_request )
vis_sig <= 1 ;
else
vis_sig <= 0 ; //显示
always@(posedge clk or negedge reset)//
if(!reset)
RGB_data <= 0 ;
else if ( content_data_request )
RGB_data <= content_data ;
else
RGB_data <= 0 ; endmodule
`timescale 1ns / 1ns
module VGB_tb( ); reg clk ;
reg reset ;
wire horizontal_sig ;
wire vertical_sig ;
reg [23:0]content_data ;
wire [23:0]RGB_data ;
wire content_data_request ;//数据请求信号 ;
wire vis_sig ; VGA VGA_sim(
clk,
reset,
content_data_request,//数据请求信号
horizontal_sig,//horizontal 水平的
vertical_sig, //vertical 垂直的
content_data,//要显示的内容数据
RGB_data,//输出的内容数据
vis_sig //内容显示同步信号
); initial clk = 1 ;
always #20 clk = ! clk ;//25MHz
initial begin
reset = 0 ;
content_data = 0 ;
#201
reset = 1 ;
#70000000;
$stop;
end always@(posedge clk or negedge reset)//
if(!reset)
content_data <= 0 ;
else if (content_data_request )
content_data <= content_data + 1 ; endmodule

结果:

需要验证的点:同步信号的长度,脉冲信号的长度,显示行的时间长度,显示列的长度。(通过观察行计数器h_cnt和列计数器v_cnt即可)

新功能:显示特定区域。

实现:设定参数来界定区域。

VGA设计(原理说明。Verilog代码实现,仿真结果)的更多相关文章

  1. 【接口时序】7、VGA接口原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

  2. 寄存器,移位寄存器的电路原理以及verilog代码实现

    寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0 ...

  3. 学会使用Hdlbits网页版Verilog代码仿真验证平台

    给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...

  4. 【接口时序】6、IIC总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE .ChipScope 硬件平台: 1. FPG ...

  5. 【接口时序】4、SPI总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

  6. 【接口时序】3、UART串口收发的原理与Verilog实现

    一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...

  7. SPI总线的原理与Verilog实现

    转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...

  8. verilog 代码分析与仿真

    verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...

  9. VCS使用学习笔记(1)——Verilog相关的仿真知识

    本文主要学习Verilog的仿真特性,以及仿真器对Verilog的处理,算是对Verilog知识的增量学习.本文内容与我的另一篇博文(http://www.cnblogs.com/IClearner/ ...

  10. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

随机推荐

  1. C++进阶-1-模板基础(函数模板、类模板)

    C++进阶 模板 1.1 函数模板 1 #include<iostream> 2 using namespace std; 3 4 // 模板 5 6 // 模板的简单实例 7 // 要求 ...

  2. 利用ArcEngine开发地图发布服务,将mxd文档一键发布成wmts,并根据需要对地图进行空间查询,返回客户端geojson

    一直想开发一个软件取代ArcGIS Server,该软件使用ArcEngine开发,以Windows Service形式发布,部署在服务端上,解决wmts地图服务发布和空间查询的问题,经过不断的研究. ...

  3. 解决windows server 2008r2服务器自动关机

    问题 具体表现就是系统自动关机,网上说是开机后2小时就会自动关机 系统版本: 解决 PsTools下载 解压:PSTools.zipg,如解压到C:\PSTools目录下 执行如下命令,打开注册表 W ...

  4. 图解Dijkstra(迪杰斯特拉)算法+代码实现

    简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的 ...

  5. RabbitMQ消息可靠性、死信交换机、消息堆积问题

    目录 消息可靠性 生产者消息确认 示例 消费者消息确认 示例 死信交换机 例子 高可用问题 消息堆积问题 惰性队列 参考 消息可靠性 确保消息至少被消费了一次(不丢失) 消息丢失的几种情况: 消息在网 ...

  6. “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!

    大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack  deve ...

  7. Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用

    一.简介 关于服务注册和服务发现介绍,我前面的文章有介绍过 - 服务注册和发现的文章. 作为服务中心的软件有很多,比如 etcd,consul,nacos,zookeeper 等都可以作为服务中心. ...

  8. RocketMQ的基本使用

    第一步导入依赖: <!--Springboot 集成 RocketMQ依赖--> <dependency> <groupId>org.apache.rocketmq ...

  9. IIS版本与Windows Server版本对应关系

    IIS 6.0随着Windows XP Professional 64位和Windows Server 2003发布. IIS 7.0随着Windows Vista和Windows Server 20 ...

  10. Linux如何安装JDK1.8版本详细步骤

    Linux如何安装JDK1.8版本详细步骤 1.下载JDK1.8版本压缩包 进入官网:https://www.oracle.com/java/technologies/downloads/ 2.将压缩 ...