ipv6網(wǎng)站建設(shè)如何自制網(wǎng)站
目錄
- 1、前言
- 2、設(shè)計思路和架構(gòu)
- 3、vivado工程詳解
- 4、上板調(diào)試驗證
- 5、福利:工程代碼的獲取
1、前言
本設(shè)計采用OV5640攝像頭MIPI模式作為輸入,分辨率為1280x720@60Hz,MIPI解碼方案采用Xilinx官方提供的MIPI CSI-2 RX Subsystem IP解碼MIPI視頻,通過DP接口輸出視頻。
FPGA圖像采集領(lǐng)域目前協(xié)議最復雜、技術(shù)難度最高的應(yīng)該就是MIPI協(xié)議了,MIPI解碼難度之高,令無數(shù)英雄競折腰,以至于Xilinx官方不得不推出專用的IP核供開發(fā)者使用,不然太高端的操作直接嚇退一大批FPGA開發(fā)者,就沒人玩兒了。
本文詳細描述了設(shè)計方案,工程代碼編譯通過后上板調(diào)試驗證,可直接項目移植,適用于在校學生、研究生項目開發(fā),也適用于在職工程師做項目開發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字成像和圖像傳輸領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請耐心看到最后;
關(guān)于MIPI協(xié)議,請自行搜索,csdn就有很多大佬講得很詳細,我就不多寫這塊了;
本設(shè)計只針對2line的MIPI相機;
如果要使用4line的MIPI相機,請參考我之前寫的文章4line MIPI解碼
2、設(shè)計思路和架構(gòu)
工程采用兩個 lane 的 MIPI 輸入,MIPI 攝像頭配置為 RAW10 輸出。通過mipi_csi2_rx_subsystem 模塊進行協(xié)議解析并轉(zhuǎn)換成 AXIS 流數(shù)據(jù),并通過Sensor Demosaic模塊將RAW 轉(zhuǎn)換成 RGB 數(shù)據(jù),之后經(jīng)過 Gammer 校正等模塊,進入 VDMA,之后進入 HP 口。
設(shè)計架構(gòu)如下:
先配置 ZYNQ 核,100MHz 用于數(shù)據(jù)傳輸,200MHz 用于 MIPI 模塊參考時鐘,如下圖:
配置 i2c 為 EMIO,用于配置攝像頭寄存器,GPIO EMIO 設(shè)置為 1,用于配置攝像頭使能,如下圖:
添加 mipi_csi2_rx_subsystem IP,用于 MIPI 數(shù)據(jù)的接收與解析,轉(zhuǎn)成 axi-stream 接口。
配置如下,數(shù)據(jù)格式選擇 RAW10,選擇 2 lane,Line Rate 配置為 1000Mbps,指的是最大支持的速率,也可以根據(jù)自己的需求填寫,范圍為 80-2500;Pixels Per Clock 默認配置為1,表示 1 個周期為 1 個像素;如下圖:
自此,輸入MIPI視頻就以完成了解碼,輸出為AXIS視頻流;后面就是圖像數(shù)據(jù)格式轉(zhuǎn)換和VDMA緩存以及vitis軟件配置了。
3、vivado工程詳解
提供2套工程源碼,對應(yīng)2種fpga,其他型號的fpga只需在vivado里更改fpga型號,然后重新編譯即可,很簡單,不多說;
工程1:
輸入:OV5640攝像頭MIPI模式,1280x720@60Hz;
FPGA型號:Zynq UltraScale Xczu4ev;
開發(fā)環(huán)境:vivado2020.2;
輸出:DP,1280x720@60Hz;
工程2:
輸入:OV5640攝像頭MIPI模式,1280x720@60Hz;
FPGA型號:Zynq UltraScale Xczu2cg;
開發(fā)環(huán)境:vivado2020.2;
輸出:DP,1280x720@60Hz;
以工程1為例,vivado工程BD如下:
綜合后的代碼架構(gòu)如下:
vitis軟件配置部分c代碼主函數(shù)源碼如下:
int main(void)
{int Status;int i ;Xil_DCacheDisable();Xil_ICacheDisable();for (i = 0; i < DISPLAY_NUM_FRAMES; i++){pFrames[i] = frameBuf[i];memset(pFrames[i], 0, DEMO_MAX_FRAME);}PsGpioSetup() ;XGpioPs_WritePin(&Gpio, CAM_EMIO, 0) ;usleep(1000000);XGpioPs_WritePin(&Gpio, CAM_EMIO, 1) ;usleep(1000000);i2c_init(&ps_i2c0, XPAR_XIICPS_0_DEVICE_ID,100000);xil_printf("DPDMA Generic Video Example Test \r\n");Status = DpdmaVideoExample(&RunCfg, pFrames[0]);if (Status != XST_SUCCESS) {xil_printf("DPDMA Video Example Test Failed\r\n");return XST_FAILURE;}gamma_lut_init();demosaic_init();vdma_write_init(XPAR_AXIVDMA_0_DEVICE_ID,HORSIZE,VERSIZE,DEMO_STRIDE,(unsigned int)pFrames[0]);sensor_init(&ps_i2c0);return 0;
}
4、上板調(diào)試驗證
由于某些不可抗力和高層次復雜因素,不便展示調(diào)試結(jié)果,請見諒;
5、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下: