0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种视频信号处理的设计方案

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-07-22 09:50 次阅读

图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼进而产生视知觉的实体。

随着电子技术和计算机技术的飞速发展,数字图像技术近年来得到极大的重视和长足的发展,并在科学研究、工业生产、医疗卫生、通信等方面得到广泛的应用。

视频信号由一系列连续的图像组成。对视频信号的处理已经成为数字图像处理领域中重要的一部分。例如机器人模式识别的过程就是一个视频信号处理的过程,电视制导导弹识别目标就是充分利用视频信号处理技术不断判断目标是否和预先设定目标图像一致。本篇将讲解如何用 FPGA 技术实现基本的视频信号处理。本篇的例子可以作为各位大侠进行视频信号处理时的一个参考,也可以在这个基础上根据需要进行扩展。

第三篇内容摘要:本篇会介绍程序测试与运行,包括测试程序、测试结果以及总结等相关内容。

五、程序测试与运行

由于整个 FPGA 程序包括 3 部分:处于 TOP 的主体程序,控制其他各个部分程序的运行;视频图像数据采集程序,从 SAA7113 获得数字图像数据并保存到 SRAM 中;SRAM 读写程序实现对 SRAM 的数据读写。测试程序需要仿真数据的全部流程。

5.1 测试程序

测试程序代码如下:

`include "timescale.v"moduletst_saa7113(error,dsprst,xreset,saareset,ARDY,ED_O,ED_OEN_O,SRAM_1_EA,SRAM_2_EA,SRAM_1_O_ED,SRAM_2_O_ED);    //内部寄存器    reg reset;    reg clk;//50MHz 时钟    reg llck;//SAA7113 的时钟    reg [7:0] vpo;//来自 saa7113 的图像数据    reg capture;//采集数据标志    reg toggle;//总线切换标志    reg [1:0] rst;        //输入    input error;    input dsprst,xreset,saareset;    input ARDY;    input [7:0] ED_O;    input ED_OEN_O;    input [18:0] SRAM_1_EA;    input [7:0] SRAM_1_O_ED;    input [18:0] SRAM_2_EA;    input [7:0] SRAM_2_O_ED;        //来自 dsp 的信号    reg CE3_;    reg ARE_;    reg AWE_;    reg [21:2] EA;    reg [7:0] ED_I;        //TO SRAM    reg [7:0] SRAM_1_IN_ED;    reg [7:0] SRAM_2_IN_ED;        //wires    //from saa7113    wire SRAM_CE_;    wire SRAM_OE_;    wire SRAM_WE_;    wire [18:0] la;    wire [7:0] ld;        //FROM DSP    wire CE_SRAM;    wire WE_SRAM;    wire OE_SRAM;    wire [7:0] ED_SRAM;    wire [18:0] EA_SRAM;        //连接各个子程序    LWBSAA7113 L_SAA7113 (                          .reset(reset),                          .clk(clk),                          .llck(llck),                          .vpo(vpo),                          .rst(rst),                          .capture(capture),                          .error(error),                          .SRAM_CE_(SRAM_CE_),                          .SRAM_OE_(SRAM_OE_),                          .SRAM_WE_(SRAM_WE_),                          .la(la),                          .ld(ld)                      );                          LWBDECODE L_DECODE (                        .reset(reset),                        .CE3_(CE3_),                        .ARE_(ARE_),                        .AWE_(AWE_),                        .EA(EA),                        .ED_I(ED_I),                        .ED_O(ED_O),                        .ED_OEN_O(ED_OEN_O),                        .ARDY(ARDY),                        .EA_SRAM(EA_SRAM),                        .ED_SRAM(ED_SRAM),                        .CE_SRAM(CE_SRAM),                        .WE_SRAM(WE_SRAM),                        .OE_SRAM(OE_SRAM),                        .dsprst(dsprst),                        .xreset(xreset),                        .saareset(saareset)                    );                        LWBBUSCHANGE L_BUSCHANGE (                              .EA_SRAM(EA_SRAM),                              .ED_SRAM(ED_SRAM),                              .CE_SRAM(CE_SRAM),                              .WE_SRAM(WE_SRAM),                              .OE_SRAM(OE_SRAM),                              .la(la),                              .ld(ld),                              .SRAM_CE_(SRAM_CE_),                              .SRAM_WE_(SRAM_WE_),                              .SRAM_OE_(SRAM_OE_),                              .SRAM_1_IN_ED(SRAM_1_IN_ED),                              .SRAM_2_IN_ED(SRAM_2_IN_ED),                              .toggle(toggle),                              .SRAM_1_EA(SRAM_1_EA),                              .SRAM_1_O_ED(SRAM_1_O_ED),                              .SRAM_2_EA(SRAM_2_EA),                              .SRAM_2_O_ED(SRAM_2_O_ED)                          );    //产生时钟信号    always #10 clk=~clk;    always #20 llck = ~llck;    initial        begin            $display("
 status : %t TestBench of saa7113 started! 

",$time);                        //initial value            clk = 0;            #7;            llck =0;                        //reset            reset = 1;                        //dsp 初始化            ARE_ = 1;            AWE_ = 1;            CE3_ = 1;                        //初始化            capture = 0;            toggle = 1;            #2;            reset = 0;            repeat(20) @(posedge clk);            reset = 1'b1; // negate reset                        //dsp 读取数据内容            SRAM_1_IN_ED = 8'h1d;            SRAM_2_IN_ED = 8'h2d;                       //dsp 地址总线            EA[21:16] = 6'b000000;            EA[15:7] = 9'b000000000;            EA[6:2]= 5'b00001;            #5;            CE3_ = 0;            ARE_ = 0;            //saa7113 输出内容            capture = 1;            #5;            @(posedge llck) vpo = 8'haa;            @(posedge llck) vpo = 8'hbb;            @(posedge llck) vpo = 8'hcc;            @(posedge llck) vpo = 8'hdd;            @(posedge llck) vpo = 8'hee;                        //场同步信号            //1            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00100000;//sav                       //2            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00100000;                        //数据开始            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00000000;                        //data            @(posedge llck) vpo = 8'h01;//Cb            @(posedge llck) vpo = 8'h02;//Yb            @(posedge llck) vpo = 8'h03;//Cr            @(posedge llck) vpo = 8'h04;//Yr--1                        @(posedge llck) vpo = 8'h05;//Cb            @(posedge llck) vpo = 8'h06;//Yb            @(posedge llck) vpo = 8'h07;//Cr            @(posedge llck) vpo = 8'h08;//Yr--2                        @(posedge llck) vpo = 8'h09;//Cb            @(posedge llck) vpo = 8'h0a;//Yb            @(posedge llck) vpo = 8'h0b;//Cr            @(posedge llck) vpo = 8'h0c;//Yr--3                        @(posedge llck) vpo = 8'h0d;//Cb            @(posedge llck) vpo = 8'h0e;//Yb            @(posedge llck) vpo = 8'h0f;//Cr            @(posedge llck) vpo = 8'h10;//Yr--4                        @(posedge llck) vpo = 8'h11;//Cb            @(posedge llck) vpo = 8'h12;//Yb            @(posedge llck) vpo = 8'h13;//Cr            @(posedge llck) vpo = 8'h14;//Yr--5                        @(posedge llck) vpo = 8'h15;//Cb            @(posedge llck) vpo = 8'h16;//Yb            @(posedge llck) vpo = 8'h17;//Cr            @(posedge llck) vpo = 8'h18;//Yr--6                        @(posedge llck) vpo = 8'h19;//Cb            @(posedge llck) vpo = 8'h1a;//Yb            @(posedge llck) vpo = 8'h1b;//Cr            @(posedge llck) vpo = 8'h1c;//Yr--7                        @(posedge llck) vpo = 8'h1d;//Cb            @(posedge llck) vpo = 8'h1e;//Yb            @(posedge llck) vpo = 8'h1f;//Cr            @(posedge llck) vpo = 8'h20;//Yr--8                        @(posedge llck) vpo = 8'h21;//Cb            @(posedge llck) vpo = 8'h22;//Yb            @(posedge llck) vpo = 8'h23;//Cr            @(posedge llck) vpo = 8'h24;//Yr--9                        @(posedge llck) vpo = 8'h25;//Cb            @(posedge llck) vpo = 8'h26;//Yb            @(posedge llck) vpo = 8'h27;//Cr            @(posedge llck) vpo = 8'h28;//Yr--10                        @(posedge llck) vpo = 8'h29;//Cb            @(posedge llck) vpo = 8'h3a;//Yb            @(posedge llck) vpo = 8'h3b;//Cr            @(posedge llck) vpo = 8'h3c;//Yr--11                        //数据结束            @(posedge llck) vpo = 8'hff;//ff            @(posedge llck) vpo = 8'h00;//00            @(posedge llck) vpo = 8'h00;//00            @(posedge llck) vpo = 8'b01110000;//end of field 1                        #20;            ARE_ = 1;            capture = 0;            #200;                        //开始切换            toggle = 0;            #100;            ARE_ = 0;                        //开始采集数据            capture = 1;                        //vertical blanking stage            //1            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00100000;//sav                        //2            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00100000;                        //data start            @(posedge llck) vpo = 8'hff;//begin            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'h00;            @(posedge llck) vpo = 8'b00000000;                        //data            @(posedge llck) vpo = 8'h01;//Cb            @(posedge llck) vpo = 8'h02;//Yb            @(posedge llck) vpo = 8'h03;//Cr            @(posedge llck) vpo = 8'h04;//Yr--1                        @(posedge llck) vpo = 8'h05;//Cb            @(posedge llck) vpo = 8'h06;//Yb            @(posedge llck) vpo = 8'h07;//Cr            @(posedge llck) vpo = 8'h08;//Yr--2                        @(posedge llck) vpo = 8'h09;//Cb            @(posedge llck) vpo = 8'h0a;//Yb            @(posedge llck) vpo = 8'h0b;//Cr            @(posedge llck) vpo = 8'h0c;//Yr--3                        @(posedge llck) vpo = 8'h0d;//Cb            @(posedge llck) vpo = 8'h0e;//Yb            @(posedge llck) vpo = 8'h0f;//Cr            @(posedge llck) vpo = 8'h10;//Yr--4                        @(posedge llck) vpo = 8'h11;//Cb            @(posedge llck) vpo = 8'h12;//Yb            @(posedge llck) vpo = 8'h13;//Cr            @(posedge llck) vpo = 8'h14;//Yr--5                        @(posedge llck) vpo = 8'h15;//Cb            @(posedge llck) vpo = 8'h16;//Yb            @(posedge llck) vpo = 8'h17;//Cr            @(posedge llck) vpo = 8'h18;//Yr--6                        @(posedge llck) vpo = 8'h19;//Cb            @(posedge llck) vpo = 8'h1a;//Yb            @(posedge llck) vpo = 8'h1b;//Cr            @(posedge llck) vpo = 8'h1c;//Yr--7                        @(posedge llck) vpo = 8'h1d;//Cb            @(posedge llck) vpo = 8'h1e;//Yb            @(posedge llck) vpo = 8'h1f;//Cr            @(posedge llck) vpo = 8'h20;//Yr--8                        @(posedge llck) vpo = 8'h21;//Cb            @(posedge llck) vpo = 8'h22;//Yb            @(posedge llck) vpo = 8'h23;//Cr            @(posedge llck) vpo = 8'h24;//Yr--9                        @(posedge llck) vpo = 8'h25;//Cb            @(posedge llck) vpo = 8'h26;//Yb            @(posedge llck) vpo = 8'h27;//Cr            @(posedge llck) vpo = 8'h28;//Yr--10                        @(posedge llck) vpo = 8'h29;//Cb            @(posedge llck) vpo = 8'h3a;//Yb            @(posedge llck) vpo = 8'h3b;//Cr            @(posedge llck) vpo = 8'h3c;//Yr--11                        //数据结束            @(posedge llck) vpo = 8'hff;//ff            @(posedge llck) vpo = 8'h00;//00            @(posedge llck) vpo = 8'h00;//00            @(posedge llck) vpo = 8'b01110000;//end of field 1            #20;                        //结束数据采集            capture = 0;                        #200;            //测试程序结束            $finish;        endendmodule

5.2 测试结果 仿真程序产生的视频图像数据如图 18 所示。开始的“aa bb cc dd ee ff”是无效数据,“ff 00 20”表示场同步信号。

665f8152-07bb-11ed-ba43-dac502259ad0.png

图 18 仿真产生的视频图像数据 经过 FPGA 处理后获得有效图像数据并产生相应的地址信号,如图 19 所示。由于只进行灰度运算,只取亮度信息,因此获得数据为“04 08 0c”,同时产生地址信号“00 01 02”。

667b3294-07bb-11ed-ba43-dac502259ad0.png

图 19 FPGA 采集得到的有效图像数据并产生的地址信号

对 SRAM 的读写控制,如图 20 所示。

669792d6-07bb-11ed-ba43-dac502259ad0.png

图 20 产生的对 SRAM 的读写控制 两块 SRAM 之间的切换,如图 21 所示。

66b71840-07bb-11ed-ba43-dac502259ad0.png

图 21 两块 SRAM 之间的切换 仿真结果表明整个视频信号处理程序完成了预先设定的设计目标。

七、总结

本篇首先介绍了视频信号的基本原理、组成等,然后讲解了进行视频信号处理的基本过程和框架。接下来结合实例讲解用 FPGA 及其他芯片组成视频处理的电路设计和 FPGA 的程序实现。最后用 Modelsim 仿真和测试了程序。本篇为各位大侠提供了一种视频信号处理的设计方案,仅供参考。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603273
  • 程序
    +关注

    关注

    117

    文章

    3787

    浏览量

    81036
  • 视频信号处理

    关注

    0

    文章

    2

    浏览量

    4978
收藏 人收藏

    评论

    相关推荐

    视频信号处理电路图

    视频信号处理电路图
    发表于 07-15 12:05 1273次阅读
    <b class='flag-5'>视频信号</b>预<b class='flag-5'>处理</b>电路图

    FPGA应用视频信号处理的基本过程是怎样的

    视频信号处理过程就是拍摄视频信号的逆过程。摄像头输出的是标准 PAL 制电视信号。摄像头通过光电转换实现图像到视频信号的转换,也就是扫描的
    发表于 12-04 09:36

    FPGA视频信号处理的框架是怎样的

    如图 7-5 所示的是般工程项目中视频信号处理的框架,由 3 个模块组成:• 视频信号转换模块 由视频信号
    发表于 12-05 09:22

    如何去实现一种CCD视频信号处理电路的设计?

    本文介绍了一种采用专用CCD视频信号处理芯片和CPLD技术来设计的CCD视频信号处理电路,并采用USB接口技术实现数据传输。
    发表于 06-04 07:14

    基于PCI总线的塔康视频信号产生电路设计

    针对某综合测试系统的测试需求,采用一种基于PCI总线的塔康(TACAN)视频信号产生电路设计方案,实现了塔康视频信号方位可调整的功能。介绍了系统的工作原理和设计要求;重点
    发表于 07-21 16:13 18次下载

    基于XRD4460的CCD视频信号处理电路的设计

    本文介绍了专用CCD视频信号处理芯片XRD4460的功能与特点,并利用该芯片设计一种CCD视频信号处理电路,给出了其详细的硬件和软件设计。该电路适用于CCD相机中的
    发表于 08-04 15:23 40次下载

    CCD视频信号处理电路

    CCD视频信号处理电路本文介绍了专用CCD视频信号处理芯片XRD4460的功能与特点,并利用该芯片设计一种CCD视频信号处理电路,给了其详细
    发表于 05-12 09:04 2429次阅读
    CCD<b class='flag-5'>视频信号处理</b>电路

    各种视频信号接口及定义

    各种视频信号格式及端子介绍 本刊读者都是有定电子基础的,视频信号是我们接触最多的显示信号,但您并不定对各种
    发表于 05-09 08:44 4304次阅读

    将同步信号添加到标清视频信号的通道设计方案

      本应用介绍了一种简单的低成本方案,将同步信号添加到标清视频信号的绿色通道。   有些视频
    发表于 11-27 10:00 1270次阅读
    将同步<b class='flag-5'>信号</b>添加到标清<b class='flag-5'>视频信号</b>的通道<b class='flag-5'>设计方案</b>

    一种基于DSP与FPGA实现场发射平板显示器视频信号处理系统的方案

    摘要:数字视频信号处理涉及对高速实时视频信号的传输和处理,要求相关电路系统具有强大的数据处理能力。介绍
    发表于 02-25 16:39 53次下载

    自适应视频信号传输解决方案

    在安防监控系统中,视频信号传输是整个系统中个至关重要的环节,选择何种介质和设备传送视频信号将直接关系到监控系统的质量和可靠性。目前,在监控系统中用来传输视频信号
    发表于 09-07 19:09 1610次阅读
    自适应<b class='flag-5'>视频信号</b>传输解决<b class='flag-5'>方案</b>

    视频信号发生器设计方案

    视频信号发生器设计方案除能产生多种数字化视频外,还能灵活更改所产生的视频各项参数,因此视频信号发生器具有
    发表于 12-28 16:08 1979次阅读
    <b class='flag-5'>视频信号</b>发生器<b class='flag-5'>设计方案</b>

    基于FPGA的实时视频信号处理平台的设计

    提出一种基于FPGA的实时视频信号处理平台的设计方法,该系统接收低帧率数字YCbCr 视频信号,对接收的视频信号进行格式和彩色空间转换、像素
    发表于 08-13 17:17 100次下载
    基于FPGA的实时<b class='flag-5'>视频信号</b><b class='flag-5'>处理</b>平台的设计

    如何使用DSP和FPGA实现场发射平板显示器视频信号处理系统的方案说明

    数字视频信号处理涉及对高速实时视频信号的传输和处理,要求相关电路系统具有强大的数据处理能力。介绍一种
    发表于 02-05 15:22 14次下载
    如何使用DSP和FPGA实现场发射平板显示器<b class='flag-5'>视频信号</b><b class='flag-5'>处理</b>系统的<b class='flag-5'>方案</b>说明

    基于FPGA的数字视频信号处理器设计

    今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇。 今天带来第篇,上篇,视频信号概述和视频信号
    的头像 发表于 05-19 10:56 1507次阅读
    基于FPGA的数字<b class='flag-5'>视频信号</b><b class='flag-5'>处理</b>器设计