VGA设计(原理说明。Verilog代码实现,仿真结果)
各类显示屏的显示原理大部分是利用人眼的视觉暂留效应。比如之前的数码管显示就是设计每个周期内各个小段按顺序显示,来达到显示一个数字的效果。
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代码实现,仿真结果)的更多相关文章
- 【接口时序】7、VGA接口原理与Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...
- 寄存器,移位寄存器的电路原理以及verilog代码实现
寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0 ...
- 学会使用Hdlbits网页版Verilog代码仿真验证平台
给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...
- 【接口时序】6、IIC总线的原理与Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE .ChipScope 硬件平台: 1. FPG ...
- 【接口时序】4、SPI总线的原理与Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...
- 【接口时序】3、UART串口收发的原理与Verilog实现
一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...
- SPI总线的原理与Verilog实现
转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...
- verilog 代码分析与仿真
verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...
- VCS使用学习笔记(1)——Verilog相关的仿真知识
本文主要学习Verilog的仿真特性,以及仿真器对Verilog的处理,算是对Verilog知识的增量学习.本文内容与我的另一篇博文(http://www.cnblogs.com/IClearner/ ...
- html5设计原理(转)
转自: http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...
随机推荐
- 虚拟机中CentOS-7.9的硬盘空间扩容(EXSI)
目录 一.增加虚机容量 二.创建新的分区 三.格式化新分区 四.lvm实现卷扩容 五.文件系统的扩容 大家好,我是LSF,发现一台虚机上 /dev/mapper/centos-root Use%已经快 ...
- SpringBoot线程池
1.遇到的场景 提高一下插入表的性能优化,两张表,先插旧的表,紧接着插新的表,若是一万多条数据就有点慢了 2.使用步骤 用Spring提供的对ThreadPoolExecutor封装的线程池Threa ...
- 使用ROOT用户运行Jenkins
!本教程仅适用于以YUM.APT等包管理器安装的Jenkins. 使用ROOT用户运行Jenkins,以保证Jenkins以最高权限执行任务. 注:会存在安全风险! 1.找到Jenkins启动脚本 通 ...
- Spring大事务到底如何优化?
所谓的大事务就是耗时比较长的事务. Spring有两种方式实现事务,分别是编程式和声明式两种. 不手动开启事务,mysql 默认自动提交事务,一条语句执行完自动提交. 一.大事务产生的原因 操作的数据 ...
- 没错,就是Access-Control-Allow-Origin,跨域
服务端添加: <add name="Access-Control-Allow-Origin" value="*" /><add name=&q ...
- MySQL之事务和redo日志
事务 事务的四个ACID特性. Atomicity 原子性 Consistency 一致性 Isolation 隔离性 Durability 持久性 原子性 原子性即这个事务的任务要么全做了,要么全部 ...
- Redis - Redlock算法
Redis - Redlock算法 在Redis的分布式环境中,我们假设有N个Redis master.这些节点完全互相独立,不存在主从复制或者其他集群协调机制.之前我们已经描述了在Redis单实例下 ...
- 微前端(qiankun)主应用共享React组件
前言 最近需要重构一个老项目,定的方案用微前端去改造.主应用是老的项目,微应用是新的项目,由于重构时间比较紧张,子应用还需要使用父应用的一些组件.过程中遇到一些问题,记录一下. 方案 我们知道qian ...
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...
- SAP BPC 开发日记
1.获取维度模型的方法1 DATA:i_appset_id TYPE uj_appset_id, i_appl_id TYPE uj_appl_id.i_appset_id = 'SINO ...