精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的數字視頻信號處理器設計(附代碼)

FPGA技術江湖 ? 來源:FPGA技術江湖 ? 作者:FPGA技術江湖 ? 2022-11-07 10:49 ? 次閱讀

導讀

圖像是用各種觀測系統以不同形式和手段觀測客觀世界而獲得的,可以直接或間接作用于人眼進而產生視知覺的實體。

隨著電子技術和計算機技術的飛速發展,數字圖像技術近年來得到極大的重視和長足的發展,并在科學研究、工業生產、醫療衛生、通信等方面得到廣泛的應用。

視頻信號由一系列連續的圖像組成。對視頻信號的處理已經成為數字圖像處理領域中重要的一部分。例如機器人模式識別的過程就是一個視頻信號處理的過程,電視制導導彈識別目標就是充分利用視頻信號處理技術不斷判斷目標是否和預先設定目標圖像一致。本篇將講解如何用 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;
        end
endmodule

5.2 測試結果

仿真程序產生的視頻圖像數據如圖 18 所示。開始的“aa bb cc dd ee ff”是無效數據,“ff 00 20”表示場同步信號。

37923074-5ca0-11ed-a3b6-dac502259ad0.png

圖 18 仿真產生的視頻圖像數據

經過 FPGA 處理后獲得有效圖像數據并產生相應的地址信號,如圖 19 所示。由于只進行灰度運算,只取亮度信息,因此獲得數據為“04 08 0c”,同時產生地址信號“00 01 02”。

37be5ae6-5ca0-11ed-a3b6-dac502259ad0.png

圖 19 FPGA 采集得到的有效圖像數據并產生的地址信號

對 SRAM 的讀寫控制,如圖 20 所示。

37d99c20-5ca0-11ed-a3b6-dac502259ad0.png

圖 20 產生的對 SRAM 的讀寫控制

兩塊 SRAM 之間的切換,如圖 21 所示。

3808eebc-5ca0-11ed-a3b6-dac502259ad0.png

圖 21 兩塊 SRAM 之間的切換

仿真結果表明整個視頻信號處理程序完成了預先設定的設計目標。

七、總結

本篇首先介紹了視頻信號的基本原理、組成等,然后講解了進行視頻信號處理的基本過程和框架。接下來結合實例講解用 FPGA 及其他芯片組成視頻處理的電路設計和 FPGA 的程序實現。最后用 Modelsim 仿真和測試了程序。本篇為各位大俠提供了一種視頻信號處理的設計方案,僅供參考。

本篇到此結束,各位大俠,有緣再見!

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19159

    瀏覽量

    229115
  • FPGA
    +關注

    關注

    1626

    文章

    21665

    瀏覽量

    601808
  • 數字視頻信號

    關注

    0

    文章

    4

    瀏覽量

    6982

原文標題:基于FPGA的數字視頻信號處理器設計(附代碼)

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何用FPGA技術實現基本的視頻信號處理

    今天給大俠帶來基于FPGA數字視頻信號處理器設計,由于篇幅較長,分三篇。今天帶來第三篇,下篇,程序測試與運行。話不多說,上貨。
    發表于 07-18 11:04 ?1266次閱讀

    FPGA應用視頻信號處理的基本過程是怎樣的

    一場圖像加入一個場同步信號。同時為了保證掃描逆程光柵不顯示,應加入和同步信號同周期的消隱信號。對視頻信號進行處理,需要先進行 A/D 轉換、
    發表于 12-04 09:36

    FPGA數字視頻信號的格式

    PAL 制電視信號轉化為數字視頻信號后的具體格式如圖 7-3 所示,一般數據格式符合 ITU656 YUV 4:2:2 標準(在后面的章節將結合數字視頻處理器數字視頻格式詳細介紹)。
    發表于 12-05 09:17

    FPGA視頻信號處理的框架是怎樣的

    (Digital Signal Processor,數字信號處理器)完成計算,也可以選擇 FPGA。? 通信模塊 實現與外界的數據交換。雖然視頻信號
    發表于 12-05 09:22

    HIV025數字視頻信號處理器相關資料分享

    HIV025數字視頻信號處理器介紹
    發表于 03-30 06:10

    數字視頻信號處理集成電路HTV025電子資料

    概述:HTV025是一款數字視頻信號處理集成電路,其具有多路信號輸入、輸出接口。
    發表于 04-08 07:20

    用EDMA傳輸數字視頻信號

    提出了如何利用EDMA將數字視頻信號從較小的緩沖區轉移到較大的存儲,經過排序組成一幅完整的圖像的方法。    關鍵詞:EDMA
    發表于 05-05 20:38 ?882次閱讀
    用EDMA傳輸<b class='flag-5'>數字視頻信號</b>

    一種基于DSP與FPGA實現場發射平板顯示視頻信號處理系統的方案

    摘要:數字視頻信號處理涉及對高速實時視頻信號的傳輸和處理,要求相關電路系統具有強大的數據處理能力。介紹一種以DSP和
    發表于 02-25 16:39 ?53次下載

    數字視頻信號及其測試

    數字電視系統較模擬系統有無可比擬的優勢隨著技術的成熟及價格的降低數字視頻設備已逐漸成為廣播電視設備的主流本文就數字視頻信號格式系統的測試與評估方法作一探討
    發表于 05-26 18:00 ?64次下載
    <b class='flag-5'>數字視頻信號</b>及其測試

    多制式數字視頻信號轉換電路的開發實踐

    介紹了多制式數字視頻信號轉換電路的實驗設計。其主要功能是對模擬視頻信號進行解碼和數字化,并作隔行/逐行轉換、尺度變換、幀頻轉換等處理,同時為PDP整機提供行、場同步信
    發表于 01-09 17:47 ?14次下載
    多制式<b class='flag-5'>數字視頻信號</b>轉換電路的開發實踐

    基于FPGA的實時視頻信號處理平臺的設計

    提出一種基于FPGA的實時視頻信號處理平臺的設計方法,該系統接收低幀率數字YCbCr 視頻信號,對接收的
    發表于 08-13 17:17 ?100次下載
    基于<b class='flag-5'>FPGA</b>的實時<b class='flag-5'>視頻信號</b><b class='flag-5'>處理</b>平臺的設計

    采用FPD-Link III技術實現數字視頻信號遠傳設計

    針對高帶寬數字視頻信號的特點和某些應用場景下信號遠傳的需求,提出一種基于FPD-Link lII傳輸技術的數字視頻信號遠傳設計。該設計采用型號為DS90ub925的串行芯片和型號為
    發表于 11-15 11:27 ?32次下載
    采用FPD-Link III技術實現<b class='flag-5'>數字視頻信號</b>遠傳設計

    如何使用DSP和FPGA實現場發射平板顯示視頻信號處理系統的方案說明

    數字視頻信號處理涉及對高速實時視頻信號的傳輸和處理,要求相關電路系統具有強大的數據處理能力。介紹一種以DSP和
    發表于 02-05 15:22 ?14次下載
    如何使用DSP和<b class='flag-5'>FPGA</b>實現場發射平板顯示<b class='flag-5'>器</b><b class='flag-5'>視頻信號</b><b class='flag-5'>處理</b>系統的方案說明

    基于AIT2139全數字視頻信號處理器實現視頻轉換的應用方案

    AIT2139是一種單片?晶控?全數字視頻信號處理器?文章在介紹視頻轉換芯片AIT2139的基礎上,給出了用其設計VGA-TV視頻轉換的原
    的頭像 發表于 03-17 17:14 ?3292次閱讀
    基于AIT2139全<b class='flag-5'>數字視頻信號</b><b class='flag-5'>處理器</b>實現<b class='flag-5'>視頻</b>轉換<b class='flag-5'>器</b>的應用方案

    基于FPGA數字視頻信號處理器設計

    今天給大俠帶來基于FPGA數字視頻信號處理器設計,由于篇幅較長,分三篇。 今天帶來第一篇,上篇,視頻信號概述和視頻信號
    的頭像 發表于 05-19 10:56 ?1461次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>數字視頻信號</b><b class='flag-5'>處理器</b>設計