一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

基于FPGA的DVP接口實現(xiàn)

FPGA設(shè)計論壇 ? 來源:FPGA設(shè)計論壇 ? 2025-06-04 09:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、DVP簡介

DVP接口(Digital Video Port)是一種用于數(shù)字視頻傳輸?shù)牟⑿薪涌冢R娪?a target="_blank">嵌入式系統(tǒng)圖像傳感器中。DVP直接傳輸數(shù)字視頻信號,減少模數(shù)轉(zhuǎn)換需求,適合中低速視頻傳輸。數(shù)據(jù)線:通常為8、10、12或16根數(shù)據(jù)線,用于傳輸像素數(shù)據(jù)??刂菩盘柊ㄏ袼?a href="http://www.www27dydycom.cn/tags/時鐘/" target="_blank">時鐘(PCLK)、行同步(HSYNC 或 HREF)信號、場同步(VSYNC)等,用于同步數(shù)據(jù)傳輸。

DVP和VGA時序有相似之處,都使用行同步(HSYNC)和場同步(VSYNC)信號來同步圖像數(shù)據(jù)。區(qū)別在于DVP是數(shù)字接口,直接傳輸數(shù)字像素數(shù)據(jù),包含像素時鐘(PCLK)和數(shù)據(jù)線;VGA是模擬接口,傳輸模擬RGB信號,需數(shù)模轉(zhuǎn)換 。

本例介紹的DVP行同步信號采用 HREF,用于 ov5640 DVP數(shù)據(jù)接收采集。

(1)行時序

1.高電平有效:HREF為高電平時,表示正在傳輸有效像素數(shù)據(jù)。

2.像素傳輸:在HREF高電平期間,每個PCLK周期傳輸一個像素數(shù)據(jù)。

3.行結(jié)束:HREF從高電平變?yōu)榈碗娖?,?biāo)志一行數(shù)據(jù)傳輸完成。

4.像素數(shù)據(jù)周期:ov5640 DVP每個有效數(shù)據(jù)為8位,數(shù)據(jù)采集時需要根據(jù)輸出格式進(jìn)行調(diào)整,輸出RGB565格式需要兩個像素時鐘才能完成傳輸,先傳輸高8位,后第8位。

61026626-3c41-11f0-b715-92fbcf53809c.png

6121d844-3c41-11f0-b715-92fbcf53809c.png

(2)場時序

1.同步脈沖:VSYNC產(chǎn)生高電平脈沖(取決于極性,ov5640為高)表示新一幀開始。

2.有效數(shù)據(jù)期:新一幀開始一段時間后,每行數(shù)據(jù)通過HSYNC或HREF信號同步。

3.幀結(jié)束:一幀數(shù)據(jù)傳輸完成后,VSYNC再次產(chǎn)生脈沖,標(biāo)志下一幀的開始。

613ddcba-3c41-11f0-b715-92fbcf53809c.png

二、Verilog 實現(xiàn)

(1)設(shè)計要求

1. 對 ov5640 輸出RGB565格式的圖像數(shù)據(jù)進(jìn)行接收

2. 接收數(shù)據(jù)輸出給存儲器(如rom、fifo、ddr)進(jìn)行存儲,包含必要輸出端口

(2)設(shè)計要點

1. 場同步:每當(dāng) vsync 產(chǎn)生一次上升沿即代表新一幀的開始(上升沿通過打拍判斷)

2. 行同步:href 的每段高電平代表一行有效數(shù)據(jù)

3. 數(shù)據(jù)格式:一個pclk像素時鐘傳8位,而RGB565一個像素16位,需要兩個pclk像素時鐘才傳輸完一個像素數(shù)據(jù),因此需要進(jìn)行先緩存高8位數(shù)據(jù),并在接收第8位時拼接數(shù)據(jù)并輸出

4. 數(shù)據(jù)有效信號:高電平時代表當(dāng)前RGB565數(shù)據(jù)有效,可供后續(xù)存儲器作寫使能使用

(3)模塊代碼

`timescale 1ns / 1ps

module DVP_ctrl#(

parameter PIC_CNT_MAX = 4'd10 //舍棄前10幀不穩(wěn)定圖像數(shù)據(jù)

)(

input wire rst_n,

input wire ov5640_pclk, //攝像頭像素時鐘

input wire ov5640_href, //攝像頭行同步信號

input wire ov5640_vsync, //攝像頭場同步信號

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

output reg [15:0] RGB565_data, //圖像數(shù)據(jù)輸出(RGB565格式)

output wire data_valid //數(shù)據(jù)有效信號(給存儲器的寫使能信號)

);

reg pix_flag; //一像素數(shù)據(jù)結(jié)束標(biāo)志位

wire pic_flag; //一幀圖像結(jié)束標(biāo)志位

reg pic_valid; //幀有效標(biāo)志位

reg [3:0] pic_cnt; //幀計數(shù)器

reg [7:0] r_ov5640_data; //輸入數(shù)據(jù)緩存

reg ov5640_vsync_delay; //場同步信號打拍

reg pix_flag_delay; //一像素數(shù)據(jù)結(jié)束標(biāo)志位打拍

//***************************** 場同步 ****************************//

//場同步信號打拍(用于檢測vsync上升沿)

always@(posedge ov5640_pclk or negedge rst_n)

if(rst_n == 1'b0)

ov5640_vsync_delay <= 1'b0;

else

ov5640_vsync_delay <= ov5640_vsync;

//一幀圖像結(jié)束標(biāo)志位(vsync上升沿產(chǎn)生一次)

assign pic_flag = ((ov5640_vsync_delay == 1'b0) &&

(ov5640_vsync == 1'b1)) ? 1'b1 : 1'b0;

//前幾幀計數(shù),計滿產(chǎn)生幀有效信號

always @(posedge ov5640_pclk or negedge rst_n) begin

if (!rst_n) begin

pic_cnt <= 4'd0;

pic_valid <= 1'b0;

end else if (pic_flag) begin

if (pic_cnt == PIC_CNT_MAX) begin

pic_cnt <= 4'd0;

pic_valid <= 1'b1;

end else

pic_cnt <= pic_cnt + 4'd1;

end

end

//***************************** 行同步 ****************************//

//行同步

always @(posedge ov5640_pclk or negedge rst_n) begin

if (!rst_n) begin

pix_flag <= 1'b0;

r_ov5640_data <= 8'b0;

RGB565_data <= 8'b0;

end else if (ov5640_href) begin

if (!pix_flag) begin

r_ov5640_data <= ov5640_data; //先緩存高8位

pix_flag <= 1'b1;

end else begin

RGB565_data <= {r_ov5640_data , ov5640_data};//后拼接低8位輸出

pix_flag <= 1'b0;

end

end

end

//一像素數(shù)據(jù)結(jié)束標(biāo)志位打拍(用于產(chǎn)生像素數(shù)據(jù)有效信號)

always@(posedge ov5640_pclk or negedge rst_n)

if(rst_n == 1'b0)

pix_flag_delay <= 1'b0;

else

pix_flag_delay <= pix_flag;

//像素數(shù)據(jù)有效信號

assign data_valid = pic_valid & pix_flag_delay;

endmodule

(4)仿真代碼

仿真就是給DVP模塊模擬ov5640產(chǎn)生的圖像數(shù)據(jù),我用的deepseek寫了一版,但經(jīng)過測試發(fā)現(xiàn)不能直接使用,于是根據(jù)它的框架自己進(jìn)行了一些修改,可以通過參數(shù)設(shè)置模擬圖像數(shù)據(jù)的參數(shù)(仿真多少幀、一幀多少行、一行多少像素)。以下模擬輸出了10幀、一幀8行數(shù)據(jù)、一行16個像素點,同時DVP舍去前3幀圖像數(shù)據(jù)。

`timescale 1ns / 1ps

module DVP_data_gen_tb();

reg pclk; //像素時鐘 (10ns周期)

reg rst_n; //復(fù)位信號 (低電平有效)

reg vsync; //場同步信號

reg href; //行同步信號

reg [7:0] data; //像素數(shù)據(jù) (8bit)

wire data_valid; //數(shù)據(jù)有效信號

wire [15:0] RGB565_data; //輸出RGB565格式數(shù)據(jù) (16bit)

//模擬OV5640視頻數(shù)據(jù)生成

parameter WIDTH = 16, //寬(一行多少個像素)

HIGTH = 8, //高(一幀多少行數(shù)據(jù))

FRAME = 10; //幀(模擬發(fā)送多少幀數(shù)據(jù))

integer pixel_cnt = 0, //像素計數(shù)器

row_cnt = 0, //行計數(shù)器

frame_cnt = 0; //幀計數(shù)器

//時鐘(10ns周期)

always #5 pclk = ~pclk;

initial begin //初始化復(fù)位

pclk = 0;

rst_n = 0; #20;

rst_n = 1;

end

always @(posedge pclk or negedge rst_n) begin

if (!rst_n) begin

vsync <= 0;

href <= 0;

data <= 0;

pixel_cnt <= 0;

row_cnt <= 0;

frame_cnt <= 0;

end else begin

//******************************************模擬場同步信號 (VSYNC)

if (pixel_cnt == 0 && row_cnt == 0) begin

vsync <= 1; // 一幀開始,VSYNC拉高一個時鐘周期

end else begin

vsync <= 0; // VSYNC拉低

end

//******************************************模擬行同步信號 (HREF)

if (row_cnt < HIGTH*10 + 10) begin//一幀模擬HIGTH行,多余行模擬行與行之間的輸出間隔

if (row_cnt <10 || (row_cnt % 10)!=0)

row_cnt <= row_cnt + 1;

else begin

if (pixel_cnt < WIDTH) begin

href <= 1; //HREF高電平表示行數(shù)據(jù)傳輸

data <= data + 1; //像素數(shù)據(jù)每次自增1

pixel_cnt <= pixel_cnt + 1;

end else begin

//一行結(jié)束

href <= 0; //HREF低電平表示行結(jié)束

pixel_cnt <= 0;

row_cnt <= row_cnt + 1; //行計數(shù)器加1

end

end

end else begin//一幀結(jié)束

href <= 0;

data <= 0;

row_cnt <= 0; //重置行計數(shù)器

frame_cnt <= frame_cnt + 1; //幀計數(shù)器加1

end

//******************************************模擬FRAME幀后結(jié)束測試

if (frame_cnt == FRAME) begin

$finish; // 結(jié)束仿真

end

end

end

DVP_ctrl #(

.PIC_CNT_MAX (4'd3) //舍去前三幀圖像

) DVP_ctrl (

.ov5640_pclk (pclk),

.rst_n (rst_n),

.ov5640_vsync (vsync),

.ov5640_href (href),

.ov5640_data (data),

.data_valid (data_valid),

.RGB565_data (RGB565_data)

);

endmodule

三、仿真波形

完整波形:可以看到一共發(fā)送了10幀數(shù)據(jù),同時data_valid在前三幀保持為0,后面才開始變化,說明前三幀數(shù)據(jù)被成功舍去。

61585f68-3c41-11f0-b715-92fbcf53809c.png

一幀波形:1幀包含8行,1行有16個8位數(shù)據(jù)。

616a7572-3c41-11f0-b715-92fbcf53809c.png

一行波形:一個RGB565像素數(shù)據(jù)對應(yīng)兩個8位數(shù)據(jù),可以看到每接收2個數(shù)據(jù)就相應(yīng)拼接輸出1個RGB565數(shù)據(jù),同時data_valid數(shù)據(jù)有效信號與數(shù)據(jù)同步產(chǎn)生。

617e7716-3c41-11f0-b715-92fbcf53809c.png

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

    關(guān)注

    1645

    文章

    22050

    瀏覽量

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

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153772
  • 圖像傳感器
    +關(guān)注

    關(guān)注

    68

    文章

    1981

    瀏覽量

    130743
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112300
  • VGA
    VGA
    +關(guān)注

    關(guān)注

    5

    文章

    572

    瀏覽量

    64644

原文標(biāo)題:基于FPGA的DVP接口實現(xiàn)

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于Proteus的Arm處理器的SPI接口實現(xiàn)

    基于Proteus的Arm處理器的SPI接口實現(xiàn)
    發(fā)表于 02-10 10:41

    FPGA設(shè)計實例】FPGA接口實現(xiàn)文本液晶顯示模塊

    `本節(jié)知識介紹:FPGA接口實現(xiàn)文本液晶顯示模塊文本液晶顯示模塊是基于廉價和易于使用微控制器或FPGA接口實現(xiàn)的。下面是一個1行×16字符模塊:要控制液晶顯示模塊,你需要11個IO引腳
    發(fā)表于 03-14 11:11

    基于JTAG接口實現(xiàn)ARM的FPGA在線配置設(shè)計

    基于JTAG接口實現(xiàn)ARM的FPGA在線配置設(shè)計
    發(fā)表于 08-19 23:17

    學(xué)fpga的內(nèi)部結(jié)構(gòu)和各接口實驗怎么學(xué)

    學(xué)fpga的內(nèi)部結(jié)構(gòu)和各接口實驗怎么學(xué),看什么資料
    發(fā)表于 05-10 18:38

    基于FPGA的腦機接口實時系統(tǒng)設(shè)計

    地把瞬態(tài)誘發(fā)電位信號轉(zhuǎn)換為控制命令,實現(xiàn)了實時的腦機接口系統(tǒng)?;?b class='flag-5'>FPGA的腦機接口系統(tǒng),是一種新的方法,也是對腦機接口實現(xiàn)方法的有益探索。
    發(fā)表于 06-04 05:00

    如何使用編碼器接口實現(xiàn)定位?

    如何使用編碼器接口實現(xiàn)定位?
    發(fā)表于 02-11 07:32

    如果不使用FPGA自帶的SERDES,可否適用LVDS接口實現(xiàn)其功能?

    如果不使用FPGA自帶的SERDES,可否適用LVDS接口實現(xiàn)其功能?
    發(fā)表于 05-08 17:37

    通過USB接口實現(xiàn)FPGA 的SelectMap配置

    本文提出了一種基于USB 接口FPGA SelectMap 配置方式的實現(xiàn)方案。方案以大容量Spartan3 FPGA 作為配置目標(biāo),選用Cypress EZ-USB FX2LP 作
    發(fā)表于 05-26 10:25 ?28次下載

    應(yīng)用串行外圍接口實現(xiàn)多微控制器間通信

    應(yīng)用串行外圍接口實現(xiàn)多微控制器間通信:
    發(fā)表于 06-23 10:54 ?24次下載
    應(yīng)用串行外圍<b class='flag-5'>接口實現(xiàn)</b>多微控制器間通信

    基于JTAG接口實現(xiàn)ARM的FPGA在線配置設(shè)計

    基于JTAG接口實現(xiàn)ARM的FPGA在線配置設(shè)計 引 言???? 為了解決不同標(biāo)準(zhǔn)間無線接口技術(shù)的互通和兼容,人們提出了軟件無線電(Software Defined Radio,SDR)技術(shù)
    發(fā)表于 02-09 10:56 ?3526次閱讀
    基于JTAG<b class='flag-5'>接口實現(xiàn)</b>ARM的<b class='flag-5'>FPGA</b>在線配置設(shè)計

    基于FPGA的VGA接口實現(xiàn)和字符顯示

    基于FPGA的VGA接口實現(xiàn)和字符顯示論文
    發(fā)表于 10-29 17:18 ?8次下載

    ARM與FPGA接口實現(xiàn)的解析

    ARM與FPGA接口實現(xiàn)的解析(應(yīng)廣單片機)-該文檔為ARM與FPGA接口實現(xiàn)的解析詳述資料,講解的還不錯,感興趣的可以下載看看…………………………
    發(fā)表于 07-22 09:47 ?14次下載
    ARM與<b class='flag-5'>FPGA</b>的<b class='flag-5'>接口實現(xiàn)</b>的解析

    基于FPGA的SDRAM串口實

    基于FPGA的SDRAM串口實驗(嵌入式開發(fā)板實驗報告)-基于FPGA的SDRAM串口實驗,verilog語言編寫
    發(fā)表于 08-04 09:43 ?37次下載
    基于<b class='flag-5'>FPGA</b>的SDRAM串<b class='flag-5'>口實</b>驗

    C#-Interface接口實現(xiàn)

    C#-Interface接口實現(xiàn)(安徽理士電源技術(shù)有限公司招聘信息)-該文檔為C#-Interface接口實現(xiàn)講解文檔,是一份還算不錯的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,,,
    發(fā)表于 09-28 09:42 ?3次下載
    C#-Interface<b class='flag-5'>接口實現(xiàn)</b>

    基于XML語言描述的接口實現(xiàn)方法

    電子發(fā)燒友網(wǎng)站提供《基于XML語言描述的接口實現(xiàn)方法.pdf》資料免費下載
    發(fā)表于 11-06 10:39 ?0次下載
    基于XML語言描述的<b class='flag-5'>接口實現(xiàn)</b>方法