OV5640攝像頭模塊FPGA驅動及HDMI顯示

本設計用到的FPGA開發板是Digilent Nexys_Video 開發板,程序的基礎是正點原子爲其FPGA產品提供的驅動程序,由於板子硬件的不同,我做了一些改動,使之能在Nexys_Video上運行,正點原子程序在其官網可以下載。HDMI驅動用的是Digilent提供的IP核,在其官網可以下載。

vivado 版本 2018.1

攝像頭用的是這個

首先用Clocking Wizard生成攝像頭核HDMI IP核需要的65M時鐘。

攝像頭的驅動是用SCCB協議配置寄存器,正點原子給提供了,直接用就好了。

在其驅動最後的輸出模塊中,輸出了兩個信號:分別是cmos_frame_valid,cmos_frame_data。一個是有效信號,一個是數據。我們就用這兩個信號就可以了。

在正點原子原程序中,視頻流會被存儲在SDRAM中,這裏由於我的開發板資源很大,用BRAM就裝下了。

根據協議對寄存器的配置,輸出視頻流大小爲1024x768,每一個像素點是16位,所以,生成如下大小的雙端口BRAM

注:實際開發板上也有DDR3存儲器,但是其需要用MIG IP核驅動,相對麻煩,在有處理器的SOC中可以用MIG內核,我也已經實現過,如果有空我就再寫出來。

根據寫有效信號驅動寫地址變化

always @(posedge cam_pclk,negedge rst_n) begin
    if(~rst_n) begin
        addra<=0;
    end else begin
        if(wr_en) begin
            addra<=addra+1;
            if(addra==20'hc0000-1) addra<=0;
        end
    end
end

讀地址同理實現

always @(posedge clk_65m,negedge rst_n) begin
    if(~rst_n) begin
        addrb<=0;
    end else begin
        if(rd_en) begin
            addrb<=addrb+1;
            if(addrb==20'hc0000-1) addrb<=0;
        end
    end
end

最後連上HDMI IP核即可。由於該IP核是24位,並且綠藍像素位置貌似反了,所以要對數據進行處理。

 vid_pData<={rd_data[15:11],3'b0,rd_data[4:0],3'b0,rd_data[10:5],2'b0};

工程下載地址:

https://download.csdn.net/download/dongze2/11224991

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章