当前位置: 首页 > article >正文

【接口协议】FPGA 驱动 VGA 显示实验(二)实验设计部分

目录实验任务实验环境实验设计程序设计VGA 时序模块模块框图仿真波形顶层模块约束文件实验任务利用FPGA驱动VGA实现彩条显示分辨率为800 × 60060Hz分别显示三种颜色。实验环境开发环境vivado 2021.2FPGA 器件ZedBoard实验设计本次实验VGA显示为800 × 60060Hz根据下图的参数可以对相应的参数进行设定。以 800*600/60Hz 为例 这一指标代表刷新频率为 60Hz 分辨率为 800X600。 标准 VGA 显示驱动中刷新频率 60 Hz 即为 1 秒显示 60 幅图像。此外 从上表中可以看出 在该分辨率下行同步信号的同步脉冲是 128 个基准时钟 显示后沿是 88 个基准时钟 显示区域是 800 个基准时钟 显示前沿是 40 个基准时钟 通过相加可以得出一行一共有 1056 个基准时钟。 该分辨率下的场同步信号的同步脉冲是 4 行4*1056 个基准时钟 显示后沿是 23 行23*1056 个基准时钟 显示区域为 600 行600*1056 个基准时钟 显示前沿为 1 行1*1056 个基准时钟 共计 623 行623*1056 个基准时钟 。那么基准时钟又是多少呢 由于 1 秒显示 60 幅图像 所以一幅图像显示的时间是 1/60 秒。 由于一幅图像占用了 623*1056 个基准时钟 则基准时钟周期 1/60 /623*1056 秒 约为 25.3336ns。 因此 基准时钟频率约为 39.476 MHz 在本设计中取 40 M。在这里将两个信号融合在一起解释一下。 每一行的扫描需要行同步信号 且每一行中都具有同步脉冲 a 显示后沿 b 显示时序 c 和显示前沿 d 四个阶段 完成一行扫描后再进入到下一行再次重复同样的四个阶段 这一过程为行同步。 将范围扩大 点动成线即为行 线动成面即为场。 场同步中和行同步一样依旧分为四个阶段 同步脉冲a 显示后沿 b 显示时序 c 和显示前沿 d。 因此就有了上面所示的时序图场同步的单位就为行同步。这也是最终选取的显示区域需要行同步和场同步都处于显示时序 c 中的原因。 试想一下 如果行同步处于显示脉冲 c 的位置 但是场同步还处于同步脉冲 a 的位置 在这一状态下无法完成图像的显示。 同理 如果场同步处于显示脉冲 c 的位置 但是行同步处于同步脉冲 a 的位置 也同样无法显示图像。 这是一个包含与被包含的关系 在场同步脉冲 c 位置的时候 包含了很多个时序四个脉冲的行同步 而只有在行同步中也处于同步脉冲 c 的位置时才可以真正显示图像。将参行时序和列时序的参数进行申明并定义两个计数器分别计数行和列。并在正确的计数值显示图像信息根据时序要求必须在行和列都处于显示区域才可以输出图像显示也就是出去了同步脉冲部分这个部分是在扫描一行后切换到下一行的时间因此这段时间是不输出图像的。程序设计VGA 时序模块/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ // Author : Linest-5 // File : vga_800_600.v // Create : 2022-10-04 10:08:05 // Revise : 2022-10-04 11:10:17 // Module Name : vga_800_600 // Description : vga输出分辨率为800*60060HZ俄罗斯国旗 // Editor : sublime text3, tab size (4) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ module vga_800_600( input clk, //40MHz input rst, //复位信号高有效 output reg hsync, //行同步信号 output reg vsync, //场同步信号 output reg [23:0] vga_data //VGA输出 ); /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Parameters Signals */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ parameter H_SYNC_PULSE d128; //行同步脉冲 parameter H_BACK_PORCH d88; //行显示后沿 parameter H_DISPLAY d800; //行显示区域 parameter H_FRONT_PORCH d40; //行显示前沿 parameter H_FRAME_LEN d1056; //行帧长 parameter V_SYNC_PULSE d4; //场同步脉冲 parameter V_BACK_PORCH d23; //场显示后沿 parameter V_DISPLAY d600; //场显示区域 parameter V_FRONT_PORCH d1; //场显示前沿 parameter V_FRAME_LEN d628; //场帧长 reg [11:0] hsync_cnt; wire add_hsync_cnt; wire end_hsync_cnt; reg [11:0] vsync_cnt; wire add_vsync_cnt; wire end_vsync_cnt; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Main Code */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ //行帧长计数 always (posedge clk or posedge rst) begin if (rst) begin hsync_cnt d0; end else if (add_hsync_cnt end_hsync_cnt) begin hsync_cnt d0; end else if (add_hsync_cnt) begin hsync_cnt hsync_cnt d1; end else begin hsync_cnt hsync_cnt; end end assign add_hsync_cnt d1; assign end_hsync_cnt add_hsync_cnt (hsync_cnt (H_FRAME_LEN - 1)); //场帧长计数 always (posedge clk or posedge rst) begin if (rst) begin vsync_cnt d0; end else if (add_vsync_cnt end_vsync_cnt) begin vsync_cnt d0; end else if (add_vsync_cnt) begin vsync_cnt vsync_cnt d1; end else begin vsync_cnt vsync_cnt; end end assign add_vsync_cnt end_hsync_cnt; assign end_vsync_cnt add_vsync_cnt (vsync_cnt (V_FRAME_LEN - 1)); //行同步信号 always (posedge clk or posedge rst) begin if (rst) begin hsync d0; end else if (hsync_cnt d0 (hsync_cnt (H_SYNC_PULSE - 2))) begin hsync d0; end else begin hsync d1; end end //场同步信号 always (posedge clk or posedge rst) begin if (rst) begin vsync d0; end else if (vsync_cnt d0 (vsync_cnt (V_SYNC_PULSE - 2))) begin vsync d0; end else begin vsync d1; end end //VGA输出信号 always (posedge clk or posedge rst) begin if (rst) begin vga_data d0; //BLACK end else if ((hsync_cnt d215) (hsync_cnt d1014) (vsync_cnt d26) (vsync_cnt d225)) begin vga_data 24hffffff; //white end else if ((hsync_cnt d215) (hsync_cnt d1014) (vsync_cnt d226) (vsync_cnt d425)) begin vga_data 24h0000ff; //BLUE end else if ((hsync_cnt d215) (hsync_cnt d1014) (vsync_cnt d426) (vsync_cnt d625)) begin vga_data 24hff0000; //RED end else begin vga_data d0; //BLACK end end endmodule模块框图仿真波形可以看到当行计数每完成依次行帧长计数场计数加1由于计数值过大无法展开细看。顶层模块顶层模块的作用是例化VGA时序模块以及PLL时钟模块因为这里VGA所需时钟为40MHz而板卡上的时钟为100MHz因此需要例化锁相环将时钟分频到40MHz。最后因为VGA输出引脚为RGB三种各4个因此需要将VGA时序模块输出的8位信号截取4位输出。完整代码/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ // Author : Linest-5 // File : vga_top.v // Create : 2022-10-05 19:01:03 // Revise : 2022-10-05 20:32:00 // Module Name : // Description : // Editor : sublime text3, tab size (4) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ module vga_top( input clk_in, input rst, output hsync, output vsync, output [3:0] rgb_red, output [3:0] rgb_green, output [3:0] rgb_blue ); wire clk; wire [23:0] vga_data; assign rgb_red vga_data[23:20]; assign rgb_green vga_data[15:12]; assign rgb_blue vga_data[7:4]; vga_800_600 inst_vga_800_600 ( .clk (clk), .rst (rst), .hsync (hsync), .vsync (vsync), .vga_data (vga_data) ); vga_clk_40m vga_clk_inst ( // Clock out ports .clk_out1(clk), // output clk_out1 // Clock in ports .clk_in1(clk_in) // input clk_in1 ); endmodule约束文件对着原理图进行绑定即可可以手动约束也可以自己写约束文件。set_property PACKAGE_PIN V18 [get_ports {rgb_red[3]}] set_property PACKAGE_PIN V19 [get_ports {rgb_red[2]}] set_property PACKAGE_PIN V20 [get_ports {rgb_red[0]}] set_property PACKAGE_PIN U20 [get_ports {rgb_red[1]}] set_property PACKAGE_PIN AB22 [get_ports {rgb_green[0]}] set_property PACKAGE_PIN AA22 [get_ports {rgb_green[1]}] set_property PACKAGE_PIN AB21 [get_ports {rgb_green[2]}] set_property PACKAGE_PIN AA21 [get_ports {rgb_green[3]}] set_property PACKAGE_PIN Y21 [get_ports {rgb_blue[0]}] set_property PACKAGE_PIN Y20 [get_ports {rgb_blue[1]}] set_property PACKAGE_PIN AB20 [get_ports {rgb_blue[2]}] set_property PACKAGE_PIN AB19 [get_ports {rgb_blue[3]}] set_property PACKAGE_PIN AA19 [get_ports hsync] set_property PACKAGE_PIN Y19 [get_ports vsync] set_property PACKAGE_PIN Y9 [get_ports clk_in] set_property PACKAGE_PIN T18 [get_ports rst] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_blue[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_blue[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_blue[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_blue[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_green[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_green[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_green[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_green[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_red[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_red[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_red[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgb_red[0]}] set_property IOSTANDARD LVCMOS33 [get_ports clk_in] set_property IOSTANDARD LVCMOS33 [get_ports hsync] set_property IOSTANDARD LVCMOS33 [get_ports rst] set_property IOSTANDARD LVCMOS33 [get_ports vsync]最后生成比特流文件下载至板卡用VGA线将FPGA和显示屏相连接即可看到以下效果俄罗斯国旗~。

相关文章:

【接口协议】FPGA 驱动 VGA 显示实验(二)实验设计部分

目录 实验任务 实验环境 实验设计 程序设计 VGA 时序模块 模块框图 仿真波形 顶层模块 约束文件 实验任务 利用FPGA驱动VGA实现彩条显示,分辨率为800 60060Hz,分别显示三种颜色。 实验环境 开发环境:vivado 2021.2 FPGA 器件&a…...

【接口协议】FPGA 驱动 VGA 显示实验(一)原理部分

目录 VGA介绍 VGA 接口管脚 VGA 色彩原理 VGA 工作原理 VGA 时序 VGA介绍 VGA(Video Graphics Array)视频图形阵列是 IBM 于 1987 年提出的一个使用模拟信号的电脑显示标准。VGA 接口即电脑采用 VGA 标准输出数据的专用接口。VGA 接口共有 15 针&am…...

COMSOL单相变压器温度场三维模型:解析热点温度与流体流速分布

comsol单相变压器温度场三维模型,可以得到变压器热点温度,流体流速分布 搞变压器温度场仿真最头疼的就是三维流固耦合。去年做配电变压器温升项目时,硬是跟COMSOL死磕了两周才摸到门道。今天给大家分享下怎么用非等温流接口抓取热点温度和油…...

【牛客网刷题】VL3 奇偶校验

👉 写在前面 👉 本系列博客记录牛客网刷题记录 👉 日拱一卒,功不唐捐! 目录 题目描述 奇偶校验 题目分析 仿真结果 题目描述 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验&a…...

【牛客网刷题】VL2 异步复位的串联T触发器

👉 写在前面 👉 本系列博客记录牛客网刷题记录 👉 日拱一卒,功不唐捐! 目录 题目描述 题目分析 Verilog 代码 testbench 代码 仿真结果 题目描述 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…...

minio安装 后台自启动

1:下载miniowget https://dl.min.io/server/minio/release/linux-amd64/minio2:授权chmod x minio3:设置开机自启动进入该目录下cd /etc/systemd/system/ 创建minio.service文件1: cd /etc/systemd/system/ 2:touch mi…...

【BBF系列协议】Data Models Library数据模型库设计与实现

目录Data Models Library (dmlib)dmlib的设计dmlib 的代码结构:dmlib 主要数据结构操作上下文对象(dmctx)对象定义(DMOBJ)参数定义(DMLEAF)多实例遍历函数实现(browseinstobj)参数树…...

基于JS实现的鸿蒙游戏——二十四点纸牌

目录 前言 概述 正式开始 一、创建项目 二、编码 1.项目结构 2.实现思路 3.主要代码块 三、页面及功能展示 1.运算正确 2.运算错误 3.换一批及重置 本人项目仓库链接 前言 相信大家都有玩过纸牌游戏,本项目是基于JS实现的鸿蒙小游戏二十四点纸牌&…...

vue截取字符串(商城系统非常常用的小知识)

1.截取指定字符串{{row.real_name.substr(2, 3)}}2.截取字符串最后一位{{row.real_name.charAt(row.real_name.length - 1)}}3.看一下效果如何...

【BBF系列协议】TR-140 TR-069支持存储服务的设备的数据模型

目录TR-140 TR-069支持存储服务的设备的数据模型执行摘要1.目的和范围目的范围2 案例2.1 BASIC MANAGED STORAGE SERVICE(基本托管存储服务)2.2 REMOTE STORAGE BACK-UP SERVICE(远程存储备份服务)2.3 Remote access of Storage S…...

【BBF系列协议】TR-135 支持TR-069的STB的数据模型

TR-135 支持TR-069的STB的数据模型 执行摘要 TR-135,启用TR-069的STB的数据模型,定义了用于通过TR-069和TR-106中定义的CWMP远程管理机顶盒(STB)设备上的数字电视(IPTV或广播)功能的数据模型。它包括用于…...

【BBF系列协议】TR-106 CWMP端点和USP代理的数据模型模板

目录TR-106 CWMP端点和USP代理的数据模型模板执行摘要1 介绍CWMPUSP规范结构2 架构2.1 数据层次结构2.2 对象版本控制2.3 配置文件2.4 DEPRECATED 和 OBSOLETED 条目3 对象定义3.1 通用符号3.2 数据类型和表示3.3 供应商特定要素A参数:单个实例对象:单个命令:单个事…...

【亲测免费】【推荐】基于Vue3的全能H5模板:vue3-h5-template

标题:【推荐】基于Vue3的全能H5模板:vue3-h5-template 【免费下载链接】vue3-h5-template My starter template for Vue3, with vite, quark design, sass(含viewport 适配方案, axios 封装) 项目地址: https://gitcode.com/gh_mirrors/vue3/vue3-h5-t…...

Scalding执行模型揭秘:从Job到Execution的演进之路

Scalding执行模型揭秘:从Job到Execution的演进之路 【免费下载链接】scalding A Scala API for Cascading 项目地址: https://gitcode.com/gh_mirrors/sc/scalding Scalding是一个基于Scala的Cascading API,专为大规模数据处理而设计。这个强大的…...

探索DockerGS:一键启动动漫游戏服务器的利器

探索DockerGS:一键启动动漫游戏服务器的利器 【免费下载链接】DockerGS DockerGC is a container that run Grasscutter (anime game) with just a single command. 项目地址: https://gitcode.com/gh_mirrors/do/DockerGS 在数字娱乐的世界中,各…...

推荐项目:IdentityServer4.AccessTokenValidation - 混合型JWT和参考令牌验证利器

推荐项目:IdentityServer4.AccessTokenValidation - 混合型JWT和参考令牌验证利器 【免费下载链接】IdentityServer4.AccessTokenValidation IdentityServer Access Token Validation for ASP.NET Core 项目地址: https://gitcode.com/gh_mirrors/id/IdentityServ…...

推荐:用Flowershow打造你的优雅知识分享网站

推荐:用Flowershow打造你的优雅知识分享网站 【免费下载链接】flowershow 💐 Publish your obsidian digital garden or any markdown site easily and elegantly. 项目地址: https://gitcode.com/gh_mirrors/fl/flowershow 1、项目介绍 &#x…...

RITM 交互式分割项目使用教程

RITM 交互式分割项目使用教程 【免费下载链接】ritm_interactive_segmentation 项目地址: https://gitcode.com/gh_mirrors/rit/ritm_interactive_segmentation 1. 项目的目录结构及介绍 RITM 交互式分割项目的目录结构如下: ritm_interactive_segmentati…...

RITM交互式分割算法实战指南

RITM交互式分割算法实战指南 【免费下载链接】ritm_interactive_segmentation 项目地址: https://gitcode.com/gh_mirrors/rit/ritm_interactive_segmentation 项目介绍 RITM(Real-Time Interactive Image Segmentation with Memory-Augmented U-Net&#…...

从论文到代码:Performer核心公式的PyTorch逐行实现

从论文到代码:Performer核心公式的PyTorch逐行实现 【免费下载链接】performer-pytorch An implementation of Performer, a linear attention-based transformer, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/pe/performer-pytorch Performer是一…...

Jupyter Notify 使用教程

Jupyter Notify 使用教程 【免费下载链接】jupyter-notify A Jupyter Notebook magic for browser notifications of cell completion 项目地址: https://gitcode.com/gh_mirrors/ju/jupyter-notify 项目介绍 Jupyter Notify 是一个为 Jupyter Notebook 设计的扩展&…...

react-shimmer自定义加载效果:打造属于你的独特加载动画

react-shimmer自定义加载效果:打造属于你的独特加载动画 【免费下载链接】react-shimmer 🌠 Async loading, performant Image component for React.js 项目地址: https://gitcode.com/gh_mirrors/re/react-shimmer react-shimmer是一个为React.j…...

diffvg底层原理揭秘:可微光栅化技术如何让矢量图形支持梯度下降优化

diffvg底层原理揭秘:可微光栅化技术如何让矢量图形支持梯度下降优化 【免费下载链接】diffvg Differentiable Vector Graphics Rasterization 项目地址: https://gitcode.com/gh_mirrors/di/diffvg diffvg是一个创新的开源项目,它实现了可微矢量图…...

系统颜色选择器:macOS 的色彩控制强化版

系统颜色选择器:macOS 的色彩控制强化版 【免费下载链接】System-Color-Picker 🎨 The macOS color picker as an app with more features 项目地址: https://gitcode.com/gh_mirrors/sy/System-Color-Picker 项目介绍 🎨 系统颜色选…...

微型Lisp开源项目指南

微型Lisp开源项目指南 【免费下载链接】micro-lisp 🎄A very small Lisp programming language 😀that used to be under 200 lines of C🎄 项目地址: https://gitcode.com/gh_mirrors/mi/micro-lisp 项目介绍 🌟 微型Lis…...

RLS历史回顾:Rust IDE工具链的演进之路

RLS历史回顾:Rust IDE工具链的演进之路 【免费下载链接】rls Repository for the Rust Language Server (aka RLS) 项目地址: https://gitcode.com/gh_mirrors/rl/rls 作为Rust语言的官方IDE工具链,RLS(Rust Language Server&#xff…...

开源项目《Aviator》安装与使用指南

开源项目《Aviator》安装与使用指南 【免费下载链接】aviator Level up your Aviator game! This app employs its prediction prowess to help you maximize your profit - and its completely free! 项目地址: https://gitcode.com/gh_mirrors/avia/aviator 本指南旨在…...

陆彦廷《势均力敌的我们2》收官,细节见人品,尽显绅士与真诚

近日,《势均力敌的我们2》正式收官,天平岛上为期十天的相处旅程,不知不觉就落下了帷幕。陆彦廷在一众嘉宾中,凭着骨子里的真诚和分寸感,成为了节目里让人印象深刻的存在。陆彦廷的聪明,教养和真诚&#xff…...

SAP GR(Group Reporting)合并报表内容及功能简介(一)-主数据结构

目录 主数据&结构 合并单元 合并组: 全局层次结构 主数据&结构 合并单元 合并单元(法定子公司): SAP S/4HANA 公司一对一地链接到合并单元。 SAP S/4HANA 公司标识与合并单元标识相同。 通用日记账的合并单元对应SAP中的公司,不在通用日记账中的合并单元代表…...

MobileChromeApps开发痛点全解析:从环境配置到API适配的完美解决方案

MobileChromeApps开发痛点全解析:从环境配置到API适配的完美解决方案 【免费下载链接】mobile-chrome-apps Chrome apps on Android and iOS 项目地址: https://gitcode.com/gh_mirrors/mo/mobile-chrome-apps 引言:你还在为MobileChromeApps开发…...