当前位置:首页 > 嵌入式 > 嵌入式硬件

引言

随着HDTV 的普及,以LCD-TV 为主的高清数字电视逐渐进入蓬勃发展时期。与传统CRT 电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter)、去隔行(De-interlacer)、视频缩放(Scaler)和视频图像增强(Video Enhancement)等等。由于HDTV 的带宽较高,720p 信号(1280×720?Hz)的像素速率达到74MHz,因此针对HDTV 的视频处理算法需要更高性能的器件。采用大规模高工艺的ASIC 芯片是目前这个问题的主要解决方案,Pixelworks、Genesis 等公司均推出了基于大规模ASIC 的解决方案。但是,随着FPGA 工艺的不断改善,其性价比与日俱增,尤其是Xilinx、Altera 等厂商纷纷采用90nm 工艺量产后,其价格不断降低,Xilinx 最新推出的Spartan-3E系列FPGA 120 万门的售价只有9 美元,已经在小量产品的IC 设计中开始替代结构化ASIC,在数字高清电视这类价格敏感型消费类电子产品中也开始大量采用。

本文介绍了如何在FPGA 中利用Block RAM 的特殊结构实现HDTV 视频增强算法中灰度直方图统计。

灰度直方图统计

灰度直方图统计是图像处理过程中很常用的一个步骤,简单来讲,就是对一幅图像各个灰度的像素进行计数,得到一张灰度分布表。例如,8 位量化的灰度图像统计结果就是256个值,分别代表0-255 每个灰度像素的数量,如图1 所示为Lena 图像的灰度直方图统计结果。直方图是分析一幅图像亮度分布特性有力的工具,根据它的结果可以进行诸如灰度拉伸、自动对比度、动态伽马调整等操作。

图1 Lena 图像的灰度直方图统计

FPGA算法统计

在计算机或者DSP 上实现直方图统计时,我们通常会使用数组结构,即在内存中开辟一个整数数组来进行计数,但是在FPGA 中定义数组是非常消耗资源的,尤其是当数组成员的位宽很大时。例如用触发器来统计256 灰度的720p 图像的直方图,将消耗4000 个逻辑单元(每个逻辑单元是一个四输入查找表),这几乎消耗了一个Spartan-3E 25 万门器件(XC3S250E)80%的逻辑资源。

幸运的是,FPGA 器件提供了一个很好的结构可以处理这类问题,这就是Block RAM。在Altera 和Xilinx 的各型号FPGA 器件上都集成了一种称为Block RAM 的片上内存,它们以若干Kbits 为一块,不同型号集成不同数量的块,例如在Spartan-3E 系列中以18Kbits 为一块,在规模最小的型号XC3S100E 上集成了4 块这样的内存,如图2 所示:

图2 Spartan-3E 系列FPGA 集成的Block RAM

这种内存很容易实现数组类型的结构,而且这种内存被设计成双端口方式,即可以用两组独立的地址数据总线来读写,因此可以用不到一块的Block RAM 就实现256×24 这样的高位宽计数器阵列来进行HDTV 视频图像的直方图统计,如图3 所示:

图3 用Block RAM 实现计数器阵列

以Block RAM 的结构为核心,按照以下几点来设计直方图统计算法:

1. Block RAM 使用双端口方式,端口A 用来将内存单元计数值读出,端口B 将计数值加一后写回该内存单元。

2. 内存的地址在像素有效时由像素灰度值选择,在行同步期间不计数,在场同步期间使用一个递增计数器在前256 个时钟将统计结果输出,在之后的256 个时钟将RAM 块清零。 3. 双端口读写时钟相位相差180 度,以避免双端口读写冲突。

4. 数据的读出、加一和写入采用了流水线结构以提高性能,所以在地址控制上要进行适当暂存以保证数据同步。

图4 为256 级灰度720p 视频图像直方图统计的算法实现功能框图:

图4 用FPGA 的Block RAM 实现直方图统计

结语

该算法借助FPGA 片上的高性能Block RAM(读写速度可以到200 兆以上),可以实现SMPTE 定义的从720p 到1080p 的各种HDTV 视频图像的实时直方图统计,仅占用FPGA不到一百个逻辑单元和一块Block RAM,是一种性价比较高的FPGA 实现直方图统计的算法,而且该算法具有很好的通用性,可以应用到各

种需要大量高位宽计数器的高速FPGA设计中。

参考文献:

1. Xilinx,Spartan-3E FPGA datasheet,2005.3
2. Xilinx,Using Block RAM in Spartan-3 Generation FPGAs,2005.3

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

随着科技的飞速进步,人工智能(AI)已经逐渐成为了引领新一轮科技革命和产业变革的核心驱动力。AI不仅在改变着我们的日常生活,还在推动各行各业的创新发展。展望未来,人工智能的发展将呈现出哪些趋势呢?本文将从技术、应用、伦理...

关键字: 人工智能 算法 AI技术

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用
关闭
关闭