Xilinx Zynq-7000 시리즈 FPGA 다중 채널 비디오 처리: 이미지 스케일링 + 비디오 접합 디스플레이, 엔지니어링 소스 코드 및 기술 지원 제공


Xilinx Zynq-7000 시리즈 FPGA 다중 채널 비디오 처리: 이미지 스케일링 + 비디오 접합 디스플레이, 엔지니어링 소스 코드 및 기술 지원 제공

1. 소개

이미지 스케일링과 비디오 스플라이싱을 해본 적이 없어도 FPGA를 해봤다고 말하기가 부끄럽습니다. CSDN 사장님께서 하신 말씀이고 저는 그것을 굳게 믿습니다. . . 이 기사에서는 Xilinx Zynq7000 시리즈 FPGA Zynq7020을 사용하여 HLS 이미지 스케일링 + 비디오 접합을 구현합니다. 입력 비디오 소스는 OV5640 카메라 모듈을 사용하고 Zynq 소프트 코어의 온칩 i2c 컨트롤러는 OV5640을 1280x720@30Hz 해상도로 구성하기 위해 호출됩니다. 그런 다음 양방향 사용자 정의를 IP 캡처라고 하며 OV5640 카메라 비디오 DVP를 RGB888로 캡처합니다. 여기서 두 개의 입력은 동일한 OV5640에서 나옵니다. 즉, 하나는 두 개의 입력을 시뮬레이션하는 데 사용됩니다. 그런 다음 두 개의 Xilinx 공식 비디오 입력을 AXI4로 사용합니다. 스트림 IP 코어는 RGB 비디오 스트림을 AXI4-Stream 비디오 스트림으로 변환하기 위해 호출됩니다. 두 개의 사용자 정의 HLS 이미지 스케일링 IP 코어를 추가하여 입력 비디오에 대해 모든 크기의 이미지 스케일링 작업을 수행합니다. 이 작업은 Zynq 소프트 코어 SDK 소프트웨어를 통해 구성됩니다. 그 본질은 AXI_Lite를 통해 레지스터를 구성한 다음 Xilinx의 공식 VDMA IP를 사용하여 두 개를 호출하여 비디오에 대한 PS 측 DDR3 비디오 캐시 작업을 수행하고 Zynq를 호출하여 VDMA를 2프레임 프레임 버퍼로 구성하는 것입니다. AXI_Lite를 통해 레지스터 구성을 수행한 다음 두 개의 Xilinx 공식 Video Mixer IP를 호출하여 두 프레임을 버퍼링합니다. 캐시된 비디오는 비디오 접합 작업에 사용되며 Zynq는 두 비디오의 서로 다른 디스플레이 위치를 구성하기 위해 호출됩니다. 본질은 AXI_Lite를 통해 레지스터를 구성한 다음 두 개의 Xilinx 공식 비디오 타이밍 컨트롤러 IP와 AXI4-Stream-비디오 출력 IP를 호출하여 AXI4-Stream 비디오 스트림을 RGB 비디오 스트림으로 변환한 다음 사용자 정의 HDMI 전송 IP를 AXI4-Stream에 추가합니다. RGB 비디오를 TMDS 차동 비디오로 변환하고 디스플레이를 위해 모니터로 전송합니다.

vivado2019.1 버전에 대한 일련의 엔지니어링 소스 코드 및 기술 지원을 제공합니다.SDK 구성을 통해 세 가지 다른 스케일링 및 접합 솔루션 세트를 만들 수 있습니다. 세부 사항은 다음과 같습니다.

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;

솔루션의 자세한 출력 데모는 뒷부분의 "온보드 디버깅 검증 및 데모" 장을 참조하십시오. 세 가지 솔루션을 전환하거나 변경하려면 SDK 소프트웨어 코드만 수정하면 되며 FPGA 로직을 수정할 필요는 없습니다. 프로젝트;

이 블로그에서는 Xilinx Zynq-7000 시리즈 FPGA 다중 채널 비디오 처리: 이미지 스케일링 + 비디오 접합 디스플레이 설계 방식에 대해 자세히 설명합니다. 엔지니어링 코드는 보드에서 포괄적으로 컴파일 및 디버깅할 수 있으며 프로젝트에 직접 이식할 수 있습니다. 학교 학생 및 대학원생 프로젝트 개발에 적합하며 현장 엔지니어가 배우고 개선하는 데에도 적합하며 의료, 군사 및 기타 산업의 고속 인터페이스 또는 이미지 처리 분야에서 사용할 수 있습니다. IP 구성을 위해 Zynq 소프트 코어를 호출하고 Zynq 구성은 SDK에서 C 언어 소프트웨어 코드 형태로 실행되므로 전체 프로젝트는 FPGA 로직 설계와 SDK 소프트웨어 설계의 두 부분으로 구성됩니다. C 언어가 내장되어 있어 초보자나 초보자에게는 적합하지 않습니다.

완전하고 포괄적인 엔지니어링 소스 코드 및 기술 지원 제공
엔지니어링 소스 코드 및 기술 지원을 얻는 방법은 기사 마지막 부분에 나와 있습니다. 끝;

부인 성명

본 프로젝트와 소스코드에는 제가 직접 작성한 부분과 인터넷상의 공개 채널(CSDN, Xilinx 공식 홈페이지, Altera 공식 홈페이지 등)에서 얻은 부분이 모두 포함되어 있습니다. 기분이 상하셨다면 비공개 메시지를 보내 비판하고 이를 바탕으로 본 프로젝트와 해당 프로젝트의 소스코드는 독자나 팬에게 개인적인 공부나 연구를 위한 용도로 제한되어 있으며, 상업적인 목적으로의 사용을 금지합니다.독자나 팬 본인의 상업적 이용으로 인해 법적인 문제가 발생할 경우, 본 블로그와 해당 블로거는 아무런 관련이 없으므로 주의해서 이용해주시기 바랍니다. . .

2. 관련 솔루션 추천

FPGA 이미지 처리 솔루션

제 홈페이지에는 현재 FPGA 이미지 처리 열이 있습니다. 새 열에는 이미지 스케일링, 이미지 인식, 이미지 접합, 이미지 융합, 이미지 디포깅, 이미지 오버레이 등 제가 현재 보유하고 있는 FPGA 이미지 처리 솔루션이 포함되어 있습니다. , 이미지 회전, 이미지 향상, 이미지 문자 오버레이 등. 열 주소는 다음과 같습니다.
직접 이동하려면 클릭하세요.

FPGA 이미지 스케일링 솔루션

제 홈페이지에는 현재 FPGA 이미지 스케일링 컬럼이 있습니다. 새로운 컬럼에는 현재 보유하고 있는 FPGA 이미지 스케일링 솔루션이 포함되어 있습니다. 구현 방법으로는 HSL 기반의 이미지 스케일링과 순수 Verilog 코드 기반의 이미지가 있습니다. Zoom; 응용 관점에서 볼 때 단일 채널 비디오 이미지 스케일링, 다중 채널 비디오 이미지 스케일링, 다중 채널 비디오 이미지 스케일링 및 접합으로 나눌 수 있으며, 입력 비디오 분류에서는 OV5640 카메라 비디오 스케일링으로 나눌 수 있습니다. SDI 비디오 스케일링, MIPI 비디오 스케일링 등, 다음은 열 주소입니다:
직접 이동하려면 클릭하세요

권장되는 FPGA 비디오 접합 및 오버레이 융합 솔루션

현재 제 홈페이지에는 FPGA 비디오 스플라이싱, 오버레이, 퓨전에 대한 칼럼이 있는데, 새로운 칼럼에는 제가 현재 보유하고 있는 FPGA 비디오 스플라이싱, 오버레이, 퓨전 솔루션이 포함되어 있습니다. 구현 방법으로는 비디오 스플라이싱 기반이 있습니다. HSL과 순수 Verilog 기반의 비디오 스플라이싱 코드로 구현된 비디오 스플라이싱, 응용 관점에서 볼 때 단일 채널, 2채널, 3채널, 4채널, 8채널, 16채널 비디오로 나눌 수 있습니다. 접합; 비디오 스케일링 + 접합; 비디오 융합 오버레이; 입력 비디오 분류에서 OV5640 카메라 비디오 접합, SDI 비디오 접합, CameraLink 비디오 접합 등으로 나눌 수 있습니다. 다음은 열 주소입니다:< a i=1>클릭하면 바로 이동

3. 디자인 아이디어에 대한 자세한 설명

이미지 스케일링과 비디오 스플라이싱을 해본 적이 없어도 FPGA를 해봤다고 말하기가 부끄럽습니다. CSDN 사장님께서 하신 말씀이고 저는 그것을 굳게 믿습니다. . . 이 기사에서는 Xilinx Zynq7000 시리즈 FPGA Zynq7020을 사용하여 HLS 이미지 스케일링 + 비디오 접합을 구현합니다. 입력 비디오 소스는 OV5640 카메라 모듈을 사용하고 Zynq 소프트 코어의 온칩 i2c 컨트롤러는 OV5640을 1280x720@30Hz 해상도로 구성하기 위해 호출됩니다. 그런 다음 양방향 사용자 정의를 IP 캡처라고 하며 OV5640 카메라 비디오 DVP를 RGB888로 캡처합니다. 여기서 두 개의 입력은 동일한 OV5640에서 나옵니다. 즉, 하나는 두 개의 입력을 시뮬레이션하는 데 사용됩니다. 그런 다음 두 개의 Xilinx 공식 비디오 입력을 AXI4로 사용합니다. 스트림 IP 코어는 RGB 비디오 스트림을 AXI4-Stream 비디오 스트림으로 변환하기 위해 호출됩니다. 두 개의 사용자 정의 HLS 이미지 스케일링 IP 코어를 추가하여 입력 비디오에 대해 모든 크기의 이미지 스케일링 작업을 수행합니다. 이 작업은 Zynq 소프트 코어 SDK 소프트웨어를 통해 구성됩니다. 그 본질은 AXI_Lite를 통해 레지스터를 구성한 다음 Xilinx의 공식 VDMA IP를 사용하여 두 개를 호출하여 비디오에 대한 PS 측 DDR3 비디오 캐시 작업을 수행하고 Zynq를 호출하여 VDMA를 2프레임 프레임 버퍼로 구성하는 것입니다. AXI_Lite를 통해 레지스터 구성을 수행한 다음 두 개의 Xilinx 공식 Video Mixer IP를 호출하여 두 프레임을 버퍼링합니다. 캐시된 비디오는 비디오 접합 작업에 사용되며 Zynq는 두 비디오의 서로 다른 디스플레이 위치를 구성하기 위해 호출됩니다. 본질은 AXI_Lite를 통해 레지스터를 구성한 다음 두 개의 Xilinx 공식 비디오 타이밍 컨트롤러 IP와 AXI4-Stream-비디오 출력 IP를 호출하여 AXI4-Stream 비디오 스트림을 RGB 비디오 스트림으로 변환한 다음 사용자 정의 HDMI 전송 IP를 AXI4-Stream에 추가합니다. RGB 비디오를 TMDS 차동 비디오로 변환하고 디스플레이를 위해 모니터로 전송합니다.

vivado2019.1 버전에 대한 일련의 엔지니어링 소스 코드 및 기술 지원을 제공합니다.SDK 구성을 통해 세 가지 다른 스케일링 및 접합 솔루션 세트를 만들 수 있습니다. 세부 사항은 다음과 같습니다.

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;

솔루션의 자세한 출력 시연은 뒷부분의 "온보드 디버깅, 검증 및 시연" 장을 참조하세요. 세 가지 솔루션을 전환하거나 변경하려면 SDK 소프트웨어 코드만 수정하면 됩니다. FPGA 로직 프로젝트, vivado 프로젝트 소스 코드 디자인 블록 다이어그램은 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.
블록 다이어그램 설명: 화살표는 데이터 흐름 방향을 나타내고 화살표 내부의 텍스트는 데이터 형식을 나타내며 화살표 밖의 숫자는 데이터 흐름 방향의 단계를 나타냅니다.

HLS 이미지 스케일링 소개

프로젝트에 사용된 IP는 일반적으로 사용되는 IP이므로 여기서는 HLS 이미지 스케일링 IP에 중점을 둡니다.
지원되는 최대 해상도는 1920x1080@60Hz이지만 HLS 소스 코드는 해상도를 높이려면 FPGA 논리 리소스가 충분히 커야 한다는 전제가 있습니다.
입력 비디오 형식: AXI4-Stream;
출력 비디오 형식: AXI4-Stream; < /span> 모듈이 차지하는 FPGA 로직 리소스는 다음과 같습니다. < /span> FPGA 리소스를 주의 깊게 평가하십시오. 마음대로 수정 가능한 HLS 프로젝트 소스 코드를 제공합니다. , HLS 버전은 2019.1입니다. 라이브러리 함수를 호출하여 쉽게 사용할 수 있는 맞춤형 구성 API를 제공합니다.자세한 내용은 SDK 코드를 참조하세요.
에는 본질적으로 AXI_Lite를 통한 등록 구성인 SDK 소프트웨어 구성이 필요합니다. 현재는 Xilinx Zynq7000 시리즈 FPGA에만 적용 가능하지만 HLS 프로젝트의 장치 유형은 이에 맞게 수정될 수 있습니다. Artix7, Kintex7 등 기타 디바이스에




여기에 이미지 설명을 삽입하세요.

비디오 믹서 소개

프로젝트에 사용된 IP는 모두 공통적으로 사용되는 IP이므로 여기서는 Video Mixer IP에 중점을 둡니다.
최대 해상도 지원: 8K, 즉 최대 동영상 처리 가능 ~ 8K;< /span> Video Mixer 로직 리소스는 다음과 같습니다. FPGA 리소스를 주의 깊게 평가하십시오. 모듈은 더 작은 FPGA 로직 리소스를 차지합니다. HLS 비디오 접합과 비교하여 직접 작성한 공식 Video Mixer 리소스는 약 30% 더 작고 더 효율적입니다. 라이브러리 기능을 쉽게 사용할 수 있습니다. 자세한 내용은 SDK 코드를 참조하세요. SDK 소프트웨어 구성이 필요하며 이는 본질적으로 AXI_Lite를 통한 등록 구성입니다. 출력 비디오 형식: AXI4-Stream; 입력 비디오 형식: AXI4 -Stream;
최대 16개의 비디오 접합 및 오버레이 레이어를 지원합니다. 즉, 최대 16개의 비디오 채널을 접합할 수 있습니다.






여기에 이미지 설명을 삽입하세요.

4. 비바도 프로젝트 소개

PL 측 FPGA 로직 설계

개발 보드 FPGA 모델: Xilinx–Zynq7020–xc7z020clg400-2;
개발 환경: Vivado2019.1;
입력: OV5640 카메라, 해상도 1280x720p ;
출력: HDMI, 1080P 해상도에서 효과적인 스플라이싱 비디오 영역 표시;
엔지니어링 역할: Xilinx Zynq-7000 시리즈 FPGA 다중 채널 비디오 처리: 이미지 줌 + 비디오 접합 표시;
프로젝트 BD는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
프로젝트 코드 구조는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
리소스 소비 및 프로젝트의 전력 소비량은 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.

PS 측 SDK 소프트웨어 설계

PS 측 SDK 소프트웨어 엔지니어링 코드 구조는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
주요 기능은 다음 3가지 매크로 정의를 통해 3가지 다른 이미지 크기 조정 및 접합 솔루션을 설계하며, 코드는 다음과 같습니다.< /span>
여기에 이미지 설명을 삽입하세요.
3가지 이미지 크기 조정 및 접합 솔루션의 세부 내용은 다음과 같습니다.

方案1:输入ov5640,分辨率1280x720;输出分辨率960x1080,在输出屏幕左右两边拼接输出;
方案2:输入ov5640,分辨率1280x720;输出分辨率1920x540,在输出屏幕上下两边拼接输出;
方案3:输入ov5640,分辨率1280x720;输出分辨率960x540,在输出屏幕左上角和右下角两边拼接输出;

이전 매크로 정의에 따르면 main 함수는 해당 이미지 크기 조정 작업을 수행하고 관련 정보를 인쇄합니다. 코드는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

5. 프로젝트 이식 지침

Vivado 버전 불일치 처리

1: 귀하의 vivado 버전이 이 프로젝트의 vivado 버전과 일치하는 경우 프로젝트를 직접 엽니다.
2: 귀하의 vivado 버전이 이 프로젝트의 vivado 버전보다 낮은 경우 , 당신은 그것을 열어야합니다 프로젝트 후 파일 -> 다른 이름으로 저장을 클릭하십시오. 그러나 이 방법은 안전하지 않습니다. 가장 안전한 방법은 vivado 버전을 이 프로젝트의 vivado 버전 또는 상위 버전으로 업그레이드하는 것입니다.
여기에 이미지 설명을 삽입하세요.
3 : 귀하의 vivado 버전이 이 프로젝트의 vivado 버전보다 높은 경우 해결책은 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.
프로젝트를 연 후 IP가 잠겨 있음을 알 수 있습니다. 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.
이때 IP를 업그레이드해야 합니다. 다음과 같이 하십시오:
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

FPGA 모델 불일치 처리

귀하의 FPGA 모델이 내 것과 일치하지 않으면 FPGA 모델을 변경해야 합니다. 작업은 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
FPGA 모델을 변경한 후 IP도 업그레이드해야 합니다. .IP 업그레이드 방법은 앞서 설명한 바 있습니다. ;

기타 주의사항

1: 각 보드의 DDR이 반드시 동일할 필요는 없으므로 MIG IP는 자신의 회로도에 따라 구성해야 합니다. 여기에서 원래 프로젝트의 MIG를 직접 삭제하고 다시 추가할 수도 있습니다. IP를 재구성하고 이를 재구성합니다.
2: 자신의 회로도에 따라 핀 제약 조건을 수정하고 xdc 파일에서 수정하면 됩니다.
3: 순수 FPGA 이식 Zynq에 대한 작업은 프로젝트에서 수행되어야 합니다. zynq 소프트 코어 추가;

6. 보드 디버깅, 검증 및 시연

준비

Zynq7000 시리즈 개발 보드,
OV5640 카메라,
HDMI 디스플레이 또는 LCD 디스플레이, 제가 사용한 LCD 디스플레이의 해상도는 4.3인치 800x480입니다.

출력 정적 프레젠테이션

ov5640 입력 해상도는 1280x720, HDMI 출력 해상도는 960x1080;
여기에 이미지 설명을 삽입하세요.
ov5640 입력 해상도는 1280x720, HDMI 출력 해상도는 1920x540;
여기에 이미지 설명을 삽입하세요.
ov5640 입력 해상도 속도 1280x720, HDMI 출력 해상도 960x540;
여기에 이미지 설명을 삽입하세요.

출력 동적 데모

짧은 비디오가 녹화되었으며 출력 동적 데모는 다음과 같습니다.

줌 스티칭

7. 이점: 프로젝트 소스 코드 얻기

이점: 엔지니어링 코드 획득
코드가 너무 커서 이메일로 보낼 수 없습니다. 특정 네트워크 디스크 링크를 통해 전송됩니다.
자료 획득 방법 : 비공개 또는 글 마지막에 V명함.
네트워크 디스크 정보는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/qq_41667729/article/details/134624480