目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • Altera系列FPGA相关方案推荐
    • 我这里已有的PAL视频解码方案
  • 3、设计思路框架
    • 工程设计原理框图
    • 输入PAL相机
    • ADV7180芯片解读
    • BT656视频解码模块
    • 图像缓存架构
    • 输出视频格式转换
    • VGA输出架构
    • HDMI输出架构
    • 工程源码架构
  • 4、Quartus工程源码1详解:PAL视频转VGA版本
  • 5、Quartus工程源码2详解:PAL视频转HDMI版本
  • 6、上板调试验证并演示
    • 准备工作
    • PAL视频采集输出演示
  • 9、工程源码

Altera系列FPGA基于ADV7180解码PAL视频,纯verilog去隔行,提供2套Quartus工程源码和技术支持

1、前言

Altera系列FPGA现状:

Altera系列FPGA目前处于逐步退出市场状态,市场占有率很低、使用便捷性很低、开发生态很不完善,之前还可以凭借价格低廉在低端产品上使用,但如今国产FPGA的崛起让Altera唯一的优势也荡然无存;所以本博主奉劝还在学Altera系列FPGA的同学赶紧悬崖略吗回头是岸,别再浪费宝贵的时间了,未来的FPGA市场,高端市场非Xilinx莫属,中低端市场非国产FPGA莫属;

FPGA实现模拟视频去隔行现状:

目前FPGA实现模拟视频去隔行主要有两种方式,一种是使用HLS快速实现,然后封装为IP核调用,该方法设计简单,但仅能在Xilinx系列FPGA使用,比如Video Processing Subsystem;另一种是纯verilog代码去隔行,利用DDR或者SDRAM作为缓存,该方法设计灵活,但设计难度较大;本设计使用纯verilog代码去隔行方案,利用SDRAM作为缓存;

工程概述

本文使用Altera的Cyclone-IV系列FPGA做PAL视频解码系统;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为ADV7180芯片,ADV7180可输出PAL或者NTSC,本设计配置为PAL制式,输出BT656视频;FPGA首先用纯verilog代码实现的i2c配置模块对ADV7180芯片做初始化配置;然后FPGA接收ADV7180芯片输出的BT656视频流,并使用纯verilog代码实现的BT656解码模块,将输入的BT565视频解码为YUV422视频;然后YUV422视频送入图像缓存架构实现视频2帧缓存功能,本设计使用SDRAM作为缓存介质;然后Native视频时序控制图像缓存架构从SDRAM中读取视频,并做Native视频时序同步,输出YUV422视频;然后YUV422视频送入纯verilog代码实现的YUV422转YUV444模块实现转换并输出YUV444视频;然后YUV444视频送入纯verilog代码实现的YUV444转RGB888模块实现转换并输出RGB888视频;然后RGB888送入VGA输出模块输出VGA视频,通过VGA接口输出,这是VGA输出方式;或者送入纯verilog代码实现的RGB888转HDMI模块输出HDMI差分视频,通过HDMI接口输出,这是HDMI输出方式;针对市场主流需求,本设计提供2套Quartus工程源码,具体如下:
在这里插入图片描述
现对上述3套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Cyclone-IV-EP4CE10F17C8;;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为ADV7180芯片,ADV7180可输出PAL或者NTSC,本设计配置为PAL制式,输出BT656视频;FPGA首先用纯verilog代码实现的i2c配置模块对ADV7180芯片做初始化配置;然后FPGA接收ADV7180芯片输出的BT656视频流,并使用纯verilog代码实现的BT656解码模块,将输入的BT565视频解码为YUV422视频;然后YUV422视频送入图像缓存架构实现视频2帧缓存功能,本设计使用SDRAM作为缓存介质;然后Native视频时序控制图像缓存架构从SDRAM中读取视频,并做Native视频时序同步,输出YUV422视频;然后YUV422视频送入纯verilog代码实现的YUV422转YUV444模块实现转换并输出YUV444视频;然后YUV444视频送入纯verilog代码实现的YUV444转RGB888模块实现转换并输出RGB888视频;然后RGB888送入VGA输出模块输出VGA视频,通过VGA接口输出,输出分辨率为640x480@60Hz;最后视频通过板载VGA接口输出接口送显示器显示即可;该工程适用Altera系列FPGA实现PAL视频解码应用;

工程源码2

开发板FPGA型号为Cyclone-IV-EP4CE10F17C8;;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为ADV7180芯片,ADV7180可输出PAL或者NTSC,本设计配置为PAL制式,输出BT656视频;FPGA首先用纯verilog代码实现的i2c配置模块对ADV7180芯片做初始化配置;然后FPGA接收ADV7180芯片输出的BT656视频流,并使用纯verilog代码实现的BT656解码模块,将输入的BT565视频解码为YUV422视频;然后YUV422视频送入图像缓存架构实现视频2帧缓存功能,本设计使用SDRAM作为缓存介质;然后Native视频时序控制图像缓存架构从SDRAM中读取视频,并做Native视频时序同步,输出YUV422视频;然后YUV422视频送入纯verilog代码实现的YUV422转YUV444模块实现转换并输出YUV444视频;然后YUV444视频送入纯verilog代码实现的YUV444转RGB888模块实现转换并输出RGB888视频;然后RGB888送入纯verilog代码实现的RGB888转HDMI模块输出HDMI差分视频,通过HDMI接口输出,输出分辨率为640x480@60Hz;最后视频通过板载HDMI接口输出接口送显示器显示即可;该工程适用Altera系列FPGA实现PAL视频解码应用;

本博客描述了Altera系列FPGA实现PAL视频解码的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

Altera系列FPGA相关方案推荐

我专门开设了一个Altera系列FPGA专栏,里面收录了基于Altera系列FPGA的图像处理、UDP网络通信、GT高速接口、PCIE等博客,感兴趣的可以去看看,博客地址:
点击直接前往

我这里已有的PAL视频解码方案

我这里有多种FPGA解码PAL视频的方案,既有PAL解码HDMI输出,也有缩放拼接输出等等,感兴趣的可以去看我的PAL视频解码专栏,专栏地址:
点击直接前往

3、设计思路框架

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

输入PAL相机

视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;某宝价格也就几十块钱,我用的如下:
在这里插入图片描述
需要注意的是,PAL制式的CCD相机是隔行的模拟视频;大自然的信号都是模拟的,视频信号也不例外。视频信号是指电视信号、静止图象信号和可视电视图像信号。视频信号分为三种制式:PAL、NTSC 和 SECAM,接下来简单介绍一下这对于后期调试电路很有帮助。PAL 制又称为帕尔制。PAL 是英文 Phase Alteration Line 的缩写,意思是逐行倒相,也属于同时制。“PAL”有时亦被用来指 625 线,每秒 25 格,隔行扫描,PAL 色彩编码的电视制式。NTSC 是 National Television Standards Committee 的缩写,意思是“(美国)国家电视标准委员会”。NTSC 负责开发一套美国标准电视广播传输和接收协议。SECAM 制式,又称塞康制,SECAM 是法文 Sequentiel Couleur A Memoire 缩写,意为“按顺序传送彩色与存储”,是一个首先用在法国模拟彩色电视系统。这只是简单的概述,关于 PAL、NTSC 和 SECAM 更详细的资料请参考视频技术手册。既然 PAL、NTSC、SECAM 都是模拟信号,FPGA 处理的是数字信号(有些 FPGA内部自带 AD,可以处理模拟信号,例如 Altera 的 MAX10),因此中间需要一个芯片做转换,也就是一个 ADC,学名叫做视频解码芯片,本设计使用TW2867作为视频解码芯片。

然后简单区分一下隔行扫描(Interlace scan)和逐行扫描(Progressive scan)的概念。如下图所示,这是隔行扫描示意图,也就是先显示奇数行,然后再显示偶数行,这只是其中一种隔行扫描的方式,用途比较广泛,除此之外还有隔 2 行、隔 3 行扫描。
在这里插入图片描述
如下图所示,这是逐行扫描示意图,也就从第一行扫描,一直扫描到最后一行。目前显示器是逐行扫描的。
在这里插入图片描述

ADV7180芯片解读

本次设计使用的是专用模拟视频解码芯片 ADV7180,支持 3路模拟视频输入,视频输出是标准 BT656 格式。ADV7180芯片内部框图如下:
在这里插入图片描述
由于是芯片,其内部框架我们无需太过关心,只需要注意如何使用即可;ADV7180的使用只需要注意两点,一是需要i2c总线对芯片进行初始化配置,二是ADV7180输出BT656 视频,视频时序如下;
在这里插入图片描述

BT656视频解码模块

BT656视频解码模块将ADV7180解码后的BT656视频解码为YUV422视频,其中BT656数据格式如下:
在这里插入图片描述
如上图所示是一行 BT656 数据结构,分成 4 段:EAV(4-byte)、BLANKING(280-byte)、SAV(4-byte)和有效数据(1440-byte),接下来分别介绍。BLANKING:280-byte,0x80 和 0x10 交替出现。有效数据:1440-byte,一共 720 个像素,Y 占 720 个数据,Cb 和 Cr 分别占 360 个数据。EAV 和 SAV:分别占 4-byte,前三个字节相同,是 0XFF,0X00,0X00,最后一个不同,根据这个字节进行解码。
在这里插入图片描述
EAV 和 SAV 的结构如上图所示,其中 F、V、H 含义:
在这里插入图片描述
F 是场信号,0 表示场 1,1 表示场 2,也就是奇偶场。V 表示场有效,0 表示场数据有效,1 表示是垂直消隐。H 区分 EAV 和 SAV 信号。P3-P0 只是校验保护位,由 F、V、H 进行异或运算得到。如下图所示,这是一帧 BT656 数据格式,一共包括 625 行,每行 1728 个字节,有效数据大小是 720x576,分成 2 场,每场 720x288,其余行是消隐信号。
在这里插入图片描述
BT656 规定一行有 1728 个字节,一帧有 625 行,每秒传输 25 帧数据,8bit 总线并行传输。1728x625x25=27000000=27M,经过计算就知道 27MHz 的来历了。在这 625行中有用的数据是 576 行,在 BT656 视频格式中有效视频大小是 720x576,其余的当做消隐处理。BT656视频解码模块代码如下:
在这里插入图片描述

图像缓存架构

图像缓存架构实现的功能是将输入视频缓存到板载SDRAM中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果,其中SDRAM控制器用纯verilog代码实现,所以图像缓存架构就是实现用户数据到SDRAM的桥接作用;架构如下:
在这里插入图片描述
图像缓存架构由视频缓存帧更新模块+写视频控制逻辑+读视频控制逻辑+SDRAM控制器模块组成;SDRAM控制器实现了SDRAM初始化、读写时序控制、读写流程控制等功能,写视频控制逻辑、读视频控制逻辑实际上就是一个视频读写状态机,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;写视频控制逻辑每次写入一次突发传输的视频数据,记作Y,即每次向SDRAM中写入Y个像素,写M×N÷Y次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以忽略SDRAM复杂的控制时序,以简单地像使用FIFO那样操作SDRAM,从而达到读写SDRAM的目的,进而实现视频缓存;本设计图像缓存方式为2帧缓存;图像缓存模块代码架构如下:
在这里插入图片描述

输出视频格式转换

输出视频格式转换流程为:
YUV422视频转YUV444,然后YUV444转RGB888,目的是输出显示器,代码架构如下:
在这里插入图片描述

VGA输出架构

VGA输出使用Native视频时序同步RGB的视频流;硬件上采用权电阻网络方式模拟数字信号转模拟信号;

HDMI输出架构

HDMI输出包括Native视频时序和HDMI编码,Native视频时序的作用是产生传统VGA的、RGB的视频流;HDMI编码采用RTL逻辑编码方式;HDMI输出代码架构如下:
在这里插入图片描述

工程源码架构

以工程2为例,工程源码架构如下,其他工程与之类似:
在这里插入图片描述
我发布的工程源码均已编译通过,如下:
在这里插入图片描述

4、Quartus工程源码1详解:PAL视频转VGA版本

开发板FPGA型号:Altera–Cyclone-IV系列-EP4CE10F17C8;
开发环境:Quartus 18.1;
输入:PAL制式的CCD模拟相机,720x576的PAL隔行25帧视频;
输出:VGA,权电阻网络模拟,分辨率640x480@60Hz;
PAL视频解码方案:ADV7180芯片方案;
图像缓存方案:纯Verilog图像缓存,2帧缓存;
去隔行方案:纯Verilog代码去隔行;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Altera系列FPGA实现PAL视频解码的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、Quartus工程源码2详解:PAL视频转HDMI版本

开发板FPGA型号:Altera–Cyclone-IV系列-EP4CE10F17C8;
开发环境:Quartus 18.1;
输入:PAL制式的CCD模拟相机,720x576的PAL隔行25帧视频;
输出:HDMI,RTL逻辑编码,分辨率640x480@60Hz;
PAL视频解码方案:ADV7180芯片方案;
图像缓存方案:纯Verilog图像缓存,2帧缓存;
去隔行方案:纯Verilog代码去隔行;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Altera系列FPGA实现PAL视频解码的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、上板调试验证并演示

准备工作

需要准备的器材如下:
FPGA开发板,可联系博主获得;
ADV7180转接板,可联系博主获得;
PAL摄像头,可联系博主获得;
BNC线缆,可联系博主获得;
HDMI显示器;
我的开发板了连接如下:
在这里插入图片描述

PAL视频采集输出演示

PAL视频采集输出演示如下:

PALX1

9、工程源码

代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/84759.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/84759.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/84759.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】Windows安全中心扫描设置排除文件

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景说明 解决方法 背景说明 即使已经把实时防护等设置全都关了,但Windows还是会不定时给你扫描,然后把风险软件给删了…

OPenCV CUDA模块立体匹配------对立体匹配生成的视差图进行双边滤波处理类cv::cuda::DisparityBilateralFilter

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::DisparityBilateralFilter 是 OpenCV CUDA 模块中的一个类,用于对立体匹配生成的视差图进行双边滤波处理。这种滤波方法可…

自然语言处理期末复习

自然语言处理期末复习 一单元 自然语言处理基础 两个核心任务: 自然语言理解(NLU, Natural Language Understanding) 让计算机“读懂”人类语言,理解文本的语义、结构和意图。 典型子任务包括:分词、词性标注、句法分…

黄仁勋在2025年巴黎VivaTech大会上的GTC演讲:AI工厂驱动的工业革命(上)

引言 2025年6月12日,在巴黎VivaTech大会上,英伟达创始人兼CEO黄仁勋发表了题为"AI工厂驱动的工业革命"的GTC主题演讲。这场持续约1小时35分钟的演讲不仅详细阐述了英伟达在AI基础设施、智能体技术、量子计算及机器人领域的最新突破,更系统性地勾勒出了人工智能如…

DMC-E 系列总线控制卡----雷赛板卡介绍(六)

应用软件开发方法 DMC-E 系列总线运动控制卡的应用软件可以在 Visual Basic 、 Visual C++ 、 C# 等高级语言 环境下开发。应用软件开发之前,需保证 DMC-E 系列总线运动控制卡连接好从站,通过控制 卡 Motion 的 EtherCAT 总线配置界面扫描从站、设置总线通信周期…

题目类型——左右逢源

1、针对的题目:(不一定正确或完整) 数据结构为数组之类的线性结构(也许可以拓展),于是数组中每个元素和其他元素的相对关系为左右或前后需要对数组中每个元素求解或者说最终解要根据每个元素的解得出每个元…

RAG检索前处理

1. 查询构建(包括Text2SQL) 查询构建的相关技术栈: Text-to-SQLText-to-Cypher 从查询中提取元数据(Self-query Retriever) 1.1 Text-to-SQL(关系数据库) 1.1.1 大语言模型方法Text-to-SQL样…

OmoFun动漫官网,动漫共和国最新入口|网页版

OmoFun 动漫,又叫动漫共和国,是一个专注于提供丰富动漫资源的在线平台,深受广大动漫爱好者的喜爱。它汇集了海量的动漫资源,涵盖日本动漫、国产动漫、欧美动漫等多种类型,无论是最新上映的热门番剧还是经典老番&#x…

ue5的blender4.1groom毛发插件v012安装和使用方法(排除了冲突错误)

关键出错不出错是看这个文件pyalembic-1.8.8-cp311-cp311-win_amd64.whl,解决和Alembic SQL工具)的加载冲突! 其他blender版本根据其内部的python版本选择对应的文件解压安装。 1、安装插件!把GroomExporter_v012_Blender4.1.1(原…

windows安装jekyll

windows安装jekyll 安装ruby 首先需要下载ruby RubyInstaller for Windows - RubyInstaller国内镜像站 我的操作系统是win10所以我安装的最新版,你们安装的时候,也可以安装最新版,我这里就不附加图片了 如果你的ruby安装完成之后&#x…

DBever工具自适应mysql不同版本的连接

DBever工具的连接便捷性 最近在使用DBever工具连接不同版本的mysql数据库,发现这个工具确实比mysql-log工具要兼容性好很多,直接就可以连接不同版本的数据库,比如常见的mysql数据库版本:8.0和5.7,而且链接成功后&…

K8S认证|CKS题库+答案| 10. Trivy 扫描镜像安全漏洞

目录 10. Trivy 扫描镜像安全漏洞 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换到master并提权 3)、查看Pod和镜像对应关系 4)、查看并去重镜像名称 5)、扫描所有镜…

Rust高级抽象

Rust 的高级抽象能力是其核心优势之一,允许开发者通过特征(Traits)、泛型(Generics)、闭包(Closures)、迭代器(Iterators)等机制实现高度灵活和可复用的代码。今天我们来…

Vue里面的映射方法

111.getters配置项 112.mapstate和mapgetter 113.mapActions与mapMutations 114.多组件共享数据 115.vuex模块化,namespaces1 116.namespace2

Node.js特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用

我将从变量、函数、异步编程等方面入手,结合Node.js实际应用场景,为你详细阐述JavaScript核心知识在其中的运用: JavaScript核心知识在Node.js中的应用 在当今的软件开发领域,Node.js凭借其高效的性能和强大的功能,成…

负载均衡LB》》LVS

LO 接口 LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器集群,它具有良好可靠性、可扩展性和可…

Modbus TCP转DeviceNet网关配置温控仪配置案例

某工厂生产线需将Modbus TCP协议的智能仪表接入DeviceNet网络(主站为PLC,如Rockwell ControlLogix),实现集中监控。需通过开疆智能Modbus TCP转DeviceNet网关KJ-DVCZ-MTCPS完成协议转换。Modbus TCP设备:温控器&#x…

Lodash原型污染漏洞原理详解

文中涉及操作均来自靶场,切勿用于非授权渗透测试! 一、JavaScript原型链基础 要理解原型污染漏洞,首先需要掌握JavaScript中原型(prototype)和原型链(prototype chain)的基本概念。 1.1 什么是原型 JavaScript是一种基于原型的语言&#…

django 获取当前时间 格式 YYYY-MM-DD HH:Mm:ss

在 Django 中获取当前时间并以特定的格式显示,你可以使用 Python 的 datetime 模块结合 Django 的 timezone 模块。这里有两种主要的方法来做到这一点: 方法1:使用 datetime 和 timezone 首先,确保你已经导入了必要的模块&#x…

k8s使用自建nfs做持久化无法控制磁盘使用大小问题处理

如题,创建的pvc并无法控制用户实际使用多少nfs存储,使用xfs_quota来对用户nfs目录做磁盘配额管理 1、需使用xfs文件系统 2、/etc/fstab挂载中开启prjquota(项目配额) 具体操作如下 xfs_quota 使用说明/etc/fstab挂载磁盘 UUID&…