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

目录

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名片。

此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:

相关推荐
仲南音16 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议