Verilog视频信号图形显示 FPGA(iCE40)
您需要一块带视频输出的 FPGA 板。 我们将在 640x480 下工作,几乎任何视频输出都可以在此像素工作。 它有助于轻松地对 FPGA 板进行编程并相当熟悉 Verilog。 如果您没有开发板,请不要担心,您可以使用 Verilator 模拟器。
材料
- Lattice iCE40
- 即用型开发平台(Xilinx Artix-7)
- 视频板(Xilinx Artix-7)
- 使用 SDL(简单直接媒体层) 进行 Verilator 模拟
屏幕是一个微型宇宙,有自己的空间和时间。从远处看,屏幕显示出平滑的二维图像。 近距离观察,它会分解成许多单独的色块:红色、绿色和蓝色。 我们将这种复杂性隐藏在像素的抽象概念后面:我们可以控制的屏幕的最小部分。 典型的高清屏幕为 1920 x 1080:总共 200 万像素。 即使 640x480 的显示屏也有超过 300,000 个像素。屏幕每秒刷新多次,从而产生运动的错觉。 在 60 Hz 频率下,1920x1080 屏幕每秒绘制 1.24 亿像素! 快速处理大量数据的需求是在硬件级别处理图形的一大挑战。
显示连接器和布线各不相同,但 VGA、HDMI 和 DisplayPort 具有相似的数据设计。 颜色有三个通道,通常是红色、绿色和蓝色,以及水平和垂直同步信号。 可能还有音频和配置数据,但现在这并不重要。红、绿、蓝通道依次承载每个像素的颜色。当屏幕接收到水平同步和垂直同步上的新帧时,屏幕开始新的一行。同步信号是消隐间隔的一部分。
消隐间隔允许阴极射线管 (CRT) 中的电子枪移动到下一行(水平回扫)或屏幕顶部(垂直回扫)。 现代数字显示器保留了消隐间隔,并将其重新用于传输音频和其他数据。
驱动显示器
选择显示时序后,我们就可以创建视频信号了。有四个阶段:
- 像素时钟
- 显示信号
- 绘制图形
- 视频输出(VGA、HDMI、DisplayPort)
像素时钟
我们知道我们需要 25.2 MHz 的频率,但是如何实现它呢?
FPGA 包括锁相环 (PLL),用于生成自定义时钟频率。遗憾的是,并没有配置 PLL 的标准方法。我们需要特定于供应商的设计。
我已经为我们的板子提供了实施方案:
iCE40板子:
module clock_480p (input wire logic clk_12m, // input clock (12 MHz)input wire logic rst, // resetoutput logic clk_pix, // pixel clockoutput logic clk_pix_locked // pixel clock locked?);localparam FEEDBACK_PATH="SIMPLE";localparam DIVR=4'b0000;localparam DIVF=7'b1000010;localparam DIVQ=3'b101;localparam FILTER_RANGE=3'b001;logic locked;SB_PLL40_PAD #(.FEEDBACK_PATH(FEEDBACK_PATH),.DIVR(DIVR),.DIVF(DIVF),.DIVQ(DIVQ),.FILTER_RANGE(FILTER_RANGE)) SB_PLL40_PAD_inst (.PACKAGEPIN(clk_12m),.PLLOUTGLOBAL(clk_pix), // use global clock network.RESETB(rst),.BYPASS(1'b0),.LOCK(locked));endmodule
开发平台:
module clock_480p (input wire logic clk_12m, // input clock (12 MHz)input wire logic rst, // resetoutput logic clk_pix, // pixel clockoutput logic clk_pix_locked // pixel clock locked?);localparam FEEDBACK_PATH="SIMPLE";localparam DIVR=4'b0000;localparam DIVF=7'b1000010;localparam DIVQ=3'b101;localparam FILTER_RANGE=3'b001;logic locked;SB_PLL40_PAD #(.FEEDBACK_PATH(FEEDBACK_PATH),.DIVR(DIVR),.DIVF(DIVF),.DIVQ(DIVQ),.FILTER_RANGE(FILTER_RANGE)) SB_PLL40_PAD_inst (.PACKAGEPIN(clk_12m),.PLLOUTGLOBAL(clk_pix), // use global clock network.RESETB(rst),.BYPASS(1'b0),.LOCK(locked));endmodule
显示信号
我们可以从像素时钟和显示时序生成同步信号。我们还想报告当前的屏幕位置以了解何时绘制内容。
我们用一个简单的显示模块来完成这两件事:
module sim_480p (input wire logic clk_pix, input wire logic rst_pix, output logic [9:0] sx, output logic [9:0] sy, output logic hsync, output logic vsync, output logic de );parameter HA_END = 639; parameter HS_STA = HA_END + 16; parameter HS_END = HS_STA + 96; parameter LINE = 799; parameter VA_END = 479; parameter VS_STA = VA_END + 10; parameter VS_END = VS_STA + 2; parameter SCREEN = 524; always_comb beginhsync = ~(sx >= HS_STA && sx < HS_END); vsync = ~(sy >= VS_STA && sy < VS_END); de = (sx <= HA_END && sy <= VA_END);endalways_ff @(posedge clk_pix) beginif (sx == LINE) begin // last pixel on line?sx <= 0;sy <= (sy == SCREEN) ? 0 : sy + 1; // last line on screen?end else beginsx <= sx + 1;endif (rst_pix) beginsx <= 0;sy <= 0;endend
endmodule
测试台
绘制图形
视频输出
Verilator仿真
关联项目
- 驱动 32×32 RGB LED 矩阵
- FPGA游戏台
- VGA时钟
- 光束射线追踪器赛车
- FPGA 媒体播放器
参阅一:亚图跨际
参阅二:亚图跨际
相关文章:
Verilog视频信号图形显示 FPGA(iCE40)
您需要一块带视频输出的 FPGA 板。 我们将在 640x480 下工作,几乎任何视频输出都可以在此像素工作。 它有助于轻松地对 FPGA 板进行编程并相当熟悉 Verilog。 如果您没有开发板,请不要担心,您可以使用 Verilator 模拟器。 材料 Lattice iCE…...
【LeetCode 面试经典150题】26. Remove Duplicates from Sorted Array 在有序数组中移除重复元素
26. Remove Duplicates from Sorted Array 题目大意 Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then …...
linux系统下sql脚本的执行与导出
terminal中执行 执行 mysql -u [username] -p -D [databasename] < [XXX.sql] 导出 mysql -u [username] -p [datbasename] > [XXX.sql] 导出的数据库名自定义。 mysql -u [username] -p [databasename] [tablename] > [xxx.sql] 导出表名自定义 mysql shell 执行 …...
MyBatis学习一:快速入门
前言 公司要求没办法,前端也要了解一下后端知识,这里记录一下自己的学习 学习教程:黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通 文档: https://mybatis.net.cn/index.html MyBatis 快速入门…...
零售业物流这个防漏水技术,居然没有翻车!
随着科技的不断发展,水浸监控系统在各个领域得到了广泛应用。水浸监控不仅仅是为了保护建筑结构和设备,更是为了防范因水灾引起的生命安全和财产损失。 因此,为了有效预防和应对水浸事件,水浸监控系统应运而生,成为各行…...
主浏览器优化之路1——你现在在用的是什么浏览器?Edge?谷歌?火狐?360!?
上一世,我的浏览器之路 引言为什么要用两个浏览器为什么一定要放弃火狐结尾给大家一个猜数字小游戏(测运气) 引言 小时候,我一开始上网的浏览器是2345王牌浏览器吧, 因为上面集成了很多网站,我记得上面有7…...
gitlab请求合并分支
直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口: 仓库控制台的这两个地方都…...
使用Vue3开发学生管理系统模板1
环境搭建 通过解压之前《Vue3开发后台管理系统模板》的代码,我们能够得到用户增删改查的页面,我们基于用户增删改查的页面做进一步的优化。 创建学生增删改查页面 第一步:复制用户增删改查页面,重命名为StudentCRUD.vue <…...
【cmake实战:番外】交叉编译——Linaro
【cmake实战:番外】交叉编译——Linaro 一、交叉编译1、交叉编译简介2、为什么会有交叉编译 二、交叉编译链1、什么是交叉编译链2、交叉编译工具 三、Linaro1、下载2、解压3、demo3.1、toolchain_aarch64.cmake3.2、CMakeLists.txt3.3、main.cpp 4、执行编译5、查看…...
2024年年初Java5年实战面试题(北京)
高阶篇: 一、在面对千万条并发请求的情况下,如果数据库频繁查询导致崩溃,可以采取以下措施来解决问题: 1.缓存数据:可以使用缓存技术来减少对数据库的查询次数。将经常查询的数据存储在缓存中,例如使用Redis等内存数据库ÿ…...
【Apache-2.0】springboot-openai-chatgpt超级AI大脑产品架构图
springboot-openai-chatgpt: 一个基于SpringCloud的Chatgpt机器人,已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话,聊天机器人会根据用户的输入自动生成回复。同时也支持画图&a…...
如何在iPhone设备中查看崩溃日志
目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…...
对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)
前言 一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个…...
微服务-理论(CAP,一致性协议)
CAP理论 关于CAP理论的介绍可以直接看这篇文章 CAP分别是什么? 一致性(Consistency 一致性包括强一致性,弱一致性,最终一致性。 一致性其实是指数据的一致性,为什么数据会不一致呢? 如上面这张图&…...
CTFshow web入门web128-php特性31
开启环境: 一个新的姿势,当php扩展目录下有php_gettext.dll时: _()是一个函数。 _()gettext() 是gettext()的拓展函数,开启text扩展get_defined_vars — 返回由所有已定义变量所组成的数组。 call_user_func — 把第一个参数作为回调函数调…...
再见2023,你好2024(附新年烟花python实现)
亲爱的朋友们: 写点什么呢,我已经停更两个月了。2023年快结束了,时间真的过得好快,总要写点什么留下纪念吧。这一年伴随着许多挑战和机会,给了我无数的成长和体验。坦白说,有时候我觉得自己好像是在时间的…...
Redis 的常用命令
一、Redis 通用命令 TYPE key:返回 key 所储存的值的类型。 OBJECT ENCODING key:返回key所储存的值的底层编码方式。 DEL key:该命令用于在 key 存在时删除 key。 EXPIRE key seconds:设置指定key的过期时间。 RENAME key newke…...
【模拟电路】模拟集成电路之神-NE555
一、集成电路NE555简介 二、功能框图与引脚说明 三、比较器(运放) 四、反相门(非门) 五、或非门 六、双稳态触发器 七、NE555的工作原理 集成电路NE555的芯片手册 C5157696 一、集成电路NE555简介 NE555起源于上个世纪70年代&a…...
收集最新的 Sci-Hub 网址(本文章持续更新2024)
自用收集最新的 Sci-Hub 网址 本文章持续更新收集 Sci-Hub 的可用网址链接仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友,由于网站限制,不一定所有网址都能在您所在的位置访问,通常情况下,一…...
针对NPC客户端的升级(脚本执行)
上一次我们使用NPS自动注册的方式,在被控端上实现了自动创建NPC客户端链接。 Linux主机自动注册NPS客户端(脚本化) 但是在使用过程中我发现存在很多的问题,如果被控端重启客户端或者出现了多个NPS时会造成冲突,所以考虑…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
