본문 바로가기
Digital Logic/Zybo z7 프로젝트

[Zybo z7-20 보드 실습] PCam 5C - FPGA Design & IP 분석

by 고뭉나무 2021. 5. 25.

이번 포스팅에서는 지난 두번의 포스팅을 통해 다룬 PCam 5C 모듈의 FPGA IP에 대해 분석해보겠습니다.

2021.05.19 - [Digital Logic/FPGA] - [Zybo z7-20 보드 실습] Pcam 5C 영상 출력 (MIPI - HDMI)

2021.05.21 - [Digital Logic/FPGA] - [Zybo z7-20 보드 실습] Pcam 5C 영상 출력 (OV5640 Register 제어)

 

PCam 5C 모듈에 대한 IP Source가 있어 카메라를 보드에 연결하고 HDMI로 실시간 영상을 볼 수 있었지만 이를 응용하고 다른 통신으로 제어하기 위해선 분석이 필수이므로 이번 시간을 통해 파헤쳐 보도록 하겠습니다.

 

원하는 모듈/프로젝트의 Design 결과를 분석할 때는 2가지가 가장 중요합니다.

'Power'와 'Timing'

'얼마나 적은 전력으로 동작시키는 가'와 '얼마나 적은 타이밍으로 동작시키는 가'가 관건입니다.

 

Power

총 1.9W가 소모되며 고정 값은 8%, 변동 값은 92%이다.

그 중 PS7(Processing System 7)이 가장 높은 비중을 차지하고 있다. 여기엔 video_dynclk, clk_wiz_0, MIPI_D_PHY_RX_0 등의 IP가 들어있다. 

사실 대부분의 기능을 동작하는 요소가 PS7에 들어가 있어 소모 전력이 높다.

 

Timing

Timing 결과는 '-'이면 목표 타이밍보다 빨리 수행된 것이고, '+'이면 delay가 발생한 것이다.

그렇게 때문에 0 ns에 가까운 것이 좋다.

 

 

Utilization

MMCM, clock의 사용이 가장 높은 비중을 차지하고 IO, LUT 순으로 차지하고 있다.

각 요소들의 쓰임 및 정의는 아래 포스팅을 참고하면 좋다.

2021.04.11 - [Digital Logic/FPGA] - FPGA 란? (구조, 요소들의 기능)

 

 

IP Block design

 

Schematic

 

IP 파일 분석

IP_user_files - system

*모두 'Xilinx'에서 공유하는 오픈 소스이다.

 

  • system_AXI_BayerToRGB_1_0.vhd
  • system_AXI_GammaCorrection_0_0.vhd
  • system_axi_vdma_0_0.vhd
  • system_clk_wiz_0_0.v
  • system_DVIClocking_0_0.vhd
  • system_MIPI_CSI_2_RX_0_0.vhd*
  • system_MIPI_D_PHY_RX_0_0.vhd*
  • system_rgb2dvi_0_0.vhd
  • system_rst_vid_clk_dyn_0.vhd
  • system_v_axi4s_vid_out_0_0.vhd
  • system_video_dynclk_0.vhd
  • system_vtg_0.vhd

 

ipdefs - local

*개인이 제작한 소스이다.

 

  • AXI_BayerToRGB
    -- Purpose:
    --   This component performs image conversion from Bayer to RGB ("Demosaic"), based on a 2x2 Bayer pixel matrix.
    --   The component receives 4 pixels at a time, through its AXI Stream Slave interface. It outputs one pixel at a time, on the AXI Stream Master interface.
    --   The component is designed as a pipeline, so once its input-to-output latency is covered, it will give out pixels every clock cycle, as long as it receives one pixel at its input at least every 4 clock cycles.
    --   If the downstream AXI component backs off, this component will also stop receiving and processing new pixels, until the downstream AXI component is ready to receive data again.
    --   If the upstream AXI component stops sending data, this component will also stop sending new data downstream, until it receives new data.
    --   Component specifications:
    --     Input sample format: Bayer (single color)
    --     Input sample size: 10 bits
    --     Input sample count: 4 at a time
    --     Output sample format: RGB
    --     Output sample size: 32 bits (10 bits per color) + 2 unused bits
    --     Output sample count: 1 at a time
    --     Maximum resolution: 2048 x <any value> pixels;
    --     Input-to-output latency: 4 StreamClk cycles.
  • LineBuffer.vhd
    -- Purpose:
    -- This component is line buffer implemented in Block RAM. Its width is defined by kLineBufferWidth generic parameter.
  • AXI_GammaCorrection.vhd
    -- Purpose:
    -- This component performs image Gamma correction. The gamma correction factor is specified in the "StoredGammaCoefs" subcomponent header comments.
    --   The component receives 1 pixel at a time, through its AXI Stream Slave interface. It outputs one pixel at a time, on the AXI Stream Master interface.
    --   Component specifications:
    --     Input sample format: RGB
    --     Input sample size: 32 bits (10 bits per color)
    --     Input sample count: 1 at a time
    --     Output sample format: RGB
    --     Output sample size: 24 bits (8 bits per color)
    --     Output sample count: 1 at a time
    --     Gamma factor value: Selectable among 1.0, 1.5, 1.8 and 2.2 values.
  • StoredGammaCoefs.vhd
    -- Purpose:
    -- This component is a ROM containing all the possible 8-bit pixel values for the following gamma correction factors: 1.0, 1.5, 1.8 and 2.2.

 

Xilinx MIPI IP Cores*

Zybo z7-20 보드와 PCam 5C 카메라를 연결한 Interface는 'MIPI'이다.

MIPI의 CSI라는 interface를 사용했고 D-PHY도 이용하였다. 이 부분은 위의 IP 파일 분석에서 * 쳐진 항목으로 확인할 수 있다.

그래서 카메라 interface에 관련된 IP는 아래 2가지라고 볼 수 있다.

  • system_MIPI_CSI_2_RX_0_0.vhd*
  • system_MIPI_D_PHY_RX_0_0.vhd*

https://www.xilinx.com/products/technology/mipi.html

  • CSI: Camera Serial Interface
  • DSI: Display Serial Interface

그리고 위의 두 가지 interface는 D-PHY 라는 PHY 사양을 사용한다.

 

https://www.xilinx.com/support/documentation/application_notes/xapp894-d-phy-solutions.pdf

 

 

이로써 PCam 5C - FPGA Design & IP 분석을 해보았습니다.

이 분석을 한 이유는 다음 프로젝트인 'Zybo z7-20에 GigE interface의 카메라를 연결하여 영상 출력하기'로 한발짝 다가가기 위해서 였습니다.

위의 MIPI CSI와 MIPI D-PHY의 IP 파일을 GigE IP로 변경하면 될 것 같습니다.

Zybo z7-20 board

물론 Zybo에서 제공하는 IP가 VHDL인 것부터 쉽지 않지만..(필자는 verilog만 배웠음..) 

하나씩 하다보면 답이 나오겠죠.

 

그럼 다음 프로젝트에서 뵙겠습니다 :)

반응형

댓글