0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的DVP協(xié)議實(shí)現(xiàn)標(biāo)準(zhǔn)圖像數(shù)據(jù)流轉(zhuǎn)換

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 2025-02-11 14:22 ? 次閱讀

一、什么是DVP?

DVP(Digital Video Port) 是傳統(tǒng)的sensor輸出接口,采用并行輸出方式,d數(shù)據(jù)位寬有8bit、10bit、12bit、16bit,是CMOS電平信號(重點(diǎn)是非差分信號),PCLK最大速率為96MHz,接口如下圖:

4b2e1e96-e82f-11ef-9310-92fbcf53809c.png

PCLK:pixel clock ,像素時(shí)鐘,每個(gè)時(shí)鐘對應(yīng)一個(gè)像素?cái)?shù)據(jù);

HSYNC:horizonal synchronization,行同步信號

VSYNC:vertical synchronization,幀同步信號;

DATA:像素?cái)?shù)據(jù),視頻數(shù)據(jù),具體位寬要看ISP是否支持;

XCLK:或者M(jìn)CLK,ISP芯片輸出給驅(qū)動(dòng)sensor的時(shí)鐘;

SCL,SDA:IIC用來讀寫sensor的寄存器,配置sensor。

DVP協(xié)議是攝像頭中常用的協(xié)議,除了DVP協(xié)議攝像頭中還有其他常用的協(xié)議如:MIPI、LVDS等協(xié)議。其整體協(xié)議時(shí)序圖如圖:

4b47263e-e82f-11ef-9310-92fbcf53809c.png

4b5a6d20-e82f-11ef-9310-92fbcf53809c.png

圖中PIXCLK信號即是PCLk信號,F(xiàn)V是幀同步信號,LV是行同步信號,輸出的P0~Pn就是像素?cái)?shù)據(jù)。

二、OV7670攝像頭的DVP協(xié)議時(shí)序

(1)水平時(shí)序

4b6ec54a-e82f-11ef-9310-92fbcf53809c.png

(2)和VGA對應(yīng)的幀時(shí)序

DVP協(xié)議和VGA接口協(xié)議基本一樣,只是VSYNC信號高低電平相反了。還有DVP協(xié)議的HREF信號是在HERF為高電平是直接輸出像素?cái)?shù)據(jù),而VGA接口的HSYNC信號在HSYNC為高時(shí)先后輸出顯示后沿、有效圖像數(shù)據(jù)、顯示前沿。

4b75fbd0-e82f-11ef-9310-92fbcf53809c.png

(3)這里對OV7670攝像頭配置輸出的是RGB565圖像數(shù)據(jù),其時(shí)序?yàn)椋?/p>

4b7fa19e-e82f-11ef-9310-92fbcf53809c.png

(4)配置成RGB555和RGB444輸出時(shí)序如圖:

4b8cf236-e82f-11ef-9310-92fbcf53809c.png

RGB555

4b96f862-e82f-11ef-9310-92fbcf53809c.png

RGB444

三、RTL設(shè)計(jì)

從上邊所看的時(shí)序圖可以將DVP協(xié)議轉(zhuǎn)換成標(biāo)準(zhǔn)的圖像的數(shù)據(jù)流,代碼如下:

// Company :

// Engineer :

// -----------------------------------------------------------------------------

// https://blog.csdn.net/qq_33231534 PHF's CSDN blog

// -----------------------------------------------------------------------------

// Create Date : 2020-09-24 2257

// Revise Data : 2020-09-24 2257

// File Name : ov7670_data_16rgb565.v

// Target Devices : XC7Z015-CLG485-2

// Tool Versions : Vivado 2019.2

// Revision : V1.1

// Editor : sublime text3, tab size (4)

// Description : DVP協(xié)議(digital video port)獲取ov7670數(shù)據(jù)并轉(zhuǎn)換成16位RGB565圖像數(shù)據(jù)

module ov7670_data_16rgb565(

inputclk,//輸入為攝像頭輸入時(shí)鐘pclk 25MHz

inputrst_n,//系統(tǒng)復(fù)位

inputvsync,//場同步信號

inputhref,//行同步信號

input[7:0]din,//ov7670攝像頭數(shù)據(jù)輸入

inputinit_done,//ov7670攝像頭初始化結(jié)束標(biāo)志

outputreg[15:0]data_rgb565,//轉(zhuǎn)換成16位RGB565圖像數(shù)據(jù)

outputregdata_rgb565_vld //16位RGB565圖像數(shù)據(jù)有效標(biāo)志

);

regvsync_r;

reghref_r;

reg[7:0]din_r;

regvsync_r_ff0;

regvsync_r_ff1;

regdata_start;

reg[3:0]frame_cnt;

regframe_vaild;

wirevsync_r_pos;

regdata_en;

//外部信號打一拍

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

vsync_r <= 0;

href_r <= 0;

din_r <= 8'd0;

end

else begin

vsync_r <= vsync;

href_r <= href;

din_r <= din;

end

end

//場同步信號上升沿檢測

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

vsync_r_ff0 <= 0;

vsync_r_ff1 <= 0;

end

else begin

vsync_r_ff0 <= vsync_r;

vsync_r_ff1 <= vsync_r_ff0;

end

end

assign vsync_r_pos = (vsync_r_ff0 && ~vsync_r_ff1);

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

data_start <= 0;

end

else if (init_done) begin

data_start <= 1;

end

else begin

data_start <= data_start;

end

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

frame_cnt <= 0;

end

else if (data_start && frame_vaild==0 && vsync_r_pos) begin

frame_cnt <= frame_cnt + 1'b1;

end

else begin

frame_cnt <= frame_cnt;

end

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

frame_vaild <= 0;

end

else if (frame_cnt >= 10) begin

frame_vaild <= 1;

end

else begin

frame_vaild <= frame_vaild;

end

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

data_en <= 0;

end

else if (href_r && frame_vaild) begin

data_en <= ~data_en;

end

else begin

data_en <= 0;

end

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

data_rgb565_vld <= 0;

end

else if (data_en) begin

data_rgb565_vld <= 1;

end

else begin

data_rgb565_vld <= 0;

end

end

always @(posedge clk or negedge rst_n) begin

if (!rst_n) begin

data_rgb565 <= 16'd0;

end

else if (data_en) begin

data_rgb565 <= {data_rgb565[15:8],din_r};

end

else begin

data_rgb565 <= {din_r,data_rgb565[7:0]};

end

end

endmodule

測試代碼:

`timescale 1ns/1ns

module ov7670_data_16rgb565_tb (); /* this is automatically generated */

reg rst_n;

reg clk;

localparam clk_period = 20;

reg vsync;

reg href;

reg [7:0] din;

reg init_done;

wire [15:0] data_rgb565;

wire data_rgb565_vld;

ov7670_data_16rgb565 inst_ov7670_data_16rgb565

(

.clk (clk),

.rst_n (rst_n),

.vsync (vsync),

.href (href),

.din (din),

.init_done (init_done),

.data_rgb565 (data_rgb565),

.data_rgb565_vld (data_rgb565_vld)

);

initial clk = 1;

always #(clk_period/2) clk = ~clk;

initial begin

#2;

rst_n = 0;

vsync = 0;

href = 0;

din = 0;

init_done = 0;

#(clk_period*20);

rst_n = 1;

#(clk_period*20);

init_done = 1;

#clk_period;

init_done = 0;

#(clk_period*20);

repeat(12)begin

#(clk_period*500);

dvp_data();

end

#(clk_period*20);

$stop;

end

task dvp_data;

integer i,j;

begin

vsync = 0;

#(clk_period*10);

vsync = 1;

#(clk_period*10);

vsync = 0;

#(clk_period*100);

for(i=0;i<480;i=i+1)begin

for(j=0;j<640*2;j=j+1)begin

href = 1;

#(clk_period);

din = din + 1'b1;

end

href = 0;

#(clk_period*100);

end

din = 0;

end

endtask

endmodule

仿真圖如圖所示:

(1)傳輸12幀圖像數(shù)據(jù)

4ba8ea9a-e82f-11ef-9310-92fbcf53809c.png

可以看到,data_rgb565_vld數(shù)據(jù)有效信號在10幀圖像數(shù)據(jù)后才有輸出,這是為了在初始化后圖像數(shù)據(jù)可能會(huì)有不穩(wěn)定情況,因此將前十幀圖像丟棄。

(2)1幀圖像數(shù)據(jù)(注意看幀同步信號)

4bbda520-e82f-11ef-9310-92fbcf53809c.png

(3)傳輸數(shù)據(jù)部分細(xì)節(jié)

4bd0612e-e82f-11ef-9310-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1637

    文章

    21847

    瀏覽量

    608725
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5392

    瀏覽量

    121968
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8782

    瀏覽量

    152459
  • 圖像數(shù)據(jù)
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    11366
  • dvp
    dvp
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    9151

原文標(biāo)題:基于FPGA的DVP協(xié)議實(shí)現(xiàn)標(biāo)準(zhǔn)圖像數(shù)據(jù)流轉(zhuǎn)換

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 1人收藏
  • fffsamet1

評論

相關(guān)推薦

FPGA配置TVP5150,把PAL制標(biāo)準(zhǔn)視頻轉(zhuǎn)換成BT656數(shù)據(jù)格式,能否把數(shù)據(jù)流直接給SAA7121?

FPGA配置TVP5150,把PAL制標(biāo)準(zhǔn)視頻轉(zhuǎn)換成BT656數(shù)據(jù)格式,請問能否把數(shù)據(jù)流直接給SAA7121這樣的編碼芯片,我這么做的,
發(fā)表于 02-11 07:14

基于FPGA的數(shù)字視頻轉(zhuǎn)換接口的設(shè)計(jì)與實(shí)現(xiàn)

數(shù)據(jù)流發(fā)送,通過DVI-I端口發(fā)送給顯示終端顯示。本設(shè)計(jì)方案中,MT9M111輸出圖像的分辨率為1280×960。 圖1 系統(tǒng)采集與顯示過程 在現(xiàn)實(shí)景物的采集與顯示過程中,視頻轉(zhuǎn)換接口功能的
發(fā)表于 12-11 10:59

采用FPGA的數(shù)字視頻接口轉(zhuǎn)換設(shè)備設(shè)計(jì)

。圖像傳感器MT9M111采集到現(xiàn)實(shí)景物后,將生成的ITU-R BT.656數(shù)據(jù)流由ITU數(shù)據(jù)輸出端口發(fā)送給視頻轉(zhuǎn)換接口。視頻轉(zhuǎn)換接口將IT
發(fā)表于 04-17 07:00

采用FPGA作為主控芯片的數(shù)字視頻接口轉(zhuǎn)換設(shè)備

的ITU-R BT.656數(shù)據(jù)流轉(zhuǎn)換成TMDS數(shù)據(jù)流發(fā)送,通過DVI-I端口發(fā)送給顯示終端顯示。本設(shè)計(jì)方案中,MT9M111輸出圖像的分辨率為1280×960。 圖1 系統(tǒng)采集與顯示過程在現(xiàn)實(shí)景物的采集與顯示
發(fā)表于 04-22 07:00

采用FPGA的數(shù)字視頻接口轉(zhuǎn)換設(shè)備

端口送來的ITU-R BT.656數(shù)據(jù)流轉(zhuǎn)換成TMDS數(shù)據(jù)流發(fā)送,通過DVI-I端口發(fā)送給顯示終端顯示。本設(shè)計(jì)方案中,MT9M111輸出圖像的分辨率為1280×960。圖1 系統(tǒng)采集與顯示過程在現(xiàn)實(shí)
發(fā)表于 04-23 07:00

采用FPGA實(shí)現(xiàn)數(shù)字視頻轉(zhuǎn)換接口設(shè)計(jì)

1所示。圖像傳感器MT9M111采集到現(xiàn)實(shí)景物后,將生成的ITU-R BT.656數(shù)據(jù)流由ITU數(shù)據(jù)輸出端口發(fā)送給視頻轉(zhuǎn)換接口。視頻轉(zhuǎn)換接口
發(fā)表于 05-05 09:29

采用FPGA的數(shù)字視頻接口轉(zhuǎn)換設(shè)備設(shè)計(jì)

引言本文從實(shí)際應(yīng)用的角度出發(fā),采用FPGA作為主控芯片,設(shè)計(jì)了一款數(shù)字視頻接口轉(zhuǎn)換設(shè)備,該設(shè)備針對于MT9M111這款數(shù)字圖像傳感器產(chǎn)生的ITU-R BT.656格式數(shù)據(jù)進(jìn)行采集、色彩
發(fā)表于 05-29 05:00

【工程源碼】基于FPGA的OV5640數(shù)據(jù)流接收和應(yīng)用基本邏輯設(shè)計(jì)

本文和設(shè)計(jì)代碼由FPGA愛好者小梅哥編寫,未經(jīng)作者許可,本文僅允許網(wǎng)絡(luò)論壇復(fù)制轉(zhuǎn)載,且轉(zhuǎn)載時(shí)請標(biāo)明原作者。OV5640提供了一個(gè)DVP接口用來輸出采集到的圖像數(shù)據(jù)流,本文提供了一個(gè)將
發(fā)表于 02-18 19:56

基于FPGA和EPP的圖像傳感器高速數(shù)據(jù)采集

。因此,為了采集數(shù)據(jù)量大的圖像數(shù)據(jù),本文采用了具有較高傳輸速率的增強(qiáng)型并行口協(xié)議(EPP)和FPGA,實(shí)
發(fā)表于 04-30 07:47

yuv422p格式數(shù)據(jù)流轉(zhuǎn)換成RGB888格式數(shù)據(jù)流

yuv422p格式數(shù)據(jù)流轉(zhuǎn)換成RGB888格式數(shù)據(jù)流,親測可用
發(fā)表于 02-25 18:12 ?14次下載

基于FPGA芯片的數(shù)據(jù)流結(jié)構(gòu)分析

Virtex 型FPGA 芯片是Xilinx 公司芯片系列中的一種,Virtex 系列的數(shù)據(jù)流及配置邏輯與XC4000 的數(shù)據(jù)流及配置邏輯有顯著不同,但卻與Xilinx 的FPGA
發(fā)表于 11-18 11:37 ?2487次閱讀

FPGA與ADC數(shù)字數(shù)據(jù)輸出接口的協(xié)議標(biāo)準(zhǔn)

場可編程門陣列(FPGA)與模數(shù)轉(zhuǎn)換器(ADC)輸出的接口是一項(xiàng)常見的工程設(shè)計(jì)挑戰(zhàn)。本文簡要介紹各種接口協(xié)議標(biāo)準(zhǔn),并提供有關(guān)在高速數(shù)據(jù)
的頭像 發(fā)表于 09-15 10:29 ?6178次閱讀
<b class='flag-5'>FPGA</b>與ADC數(shù)字<b class='flag-5'>數(shù)據(jù)</b>輸出接口的<b class='flag-5'>協(xié)議</b>及<b class='flag-5'>標(biāo)準(zhǔn)</b>

如何使用FPGA實(shí)現(xiàn)Bayer到RGB圖像格式轉(zhuǎn)換的設(shè)計(jì)

利用FPGA處理數(shù)據(jù)量大、處理速度快,結(jié)合CMOS圖像傳感器MT9M001和BayerCFA格式圖像的特點(diǎn),設(shè)計(jì)一種基于FPGA
發(fā)表于 01-25 16:04 ?6次下載
如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>Bayer到RGB<b class='flag-5'>圖像</b>格式<b class='flag-5'>轉(zhuǎn)換</b>的設(shè)計(jì)

電子發(fā)燒友

中國電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品