시스템 다이어그램 분석
- Processing System (PS)
- Zynq SoC의 PS는 AXI 인터페이스를 통해 PL과 데이터를 주고받습니다.
- AXI SmartConnect는 다양한 AXI 슬레이브 장치들로 데이터를 라우팅합니다.
- Programmable Logic (PL)
- bram_inf_0: BRAM을 제어하는 사용자 정의 모듈로, 데이터 및 주소 생성, 쓰기 활성화 등을 담당합니다.
- AXI BRAM Controller: BRAM 접근을 위한 AXI 인터페이스를 제공합니다.
- AXI GPIO: PS와 PL 사이의 간단한 신호 전달을 위한 GPIO 인터페이스입니다.
- Memory
- Block Memory Generator: PL 내에 구성된 BRAM으로, 데이터 저장 및 접근에 사용됩니다.
- DDR: 메인 메모리로, 데이터의 저장 및 처리에 사용됩니다.
Vitis C 코드 분석
코드는 몇 가지 주요 단계로 구성됩니다:
- GPIO 초기화 및 설정
- XGpio 객체를 사용하여 GPIO 인스턴스를 초기화하고, 데이터 방향을 설정합니다. 입력 GPIO는 모든 비트를 입력으로, 출력 GPIO는 출력으로 설정합니다.
- 메모리 초기화
- src 포인터는 BRAM의 시작 주소를 가리키고, dst 포인터는 DDR의 특정 오프셋 주소를 가리킵니다.
- 초기에, BRAM과 DDR 메모리 영역을 0으로 클리어합니다.
- GPIO 입력 읽기
- 입력 GPIO를 지속적으로 폴링하여 특정 신호(여기서는 0x01)를 기다립니다. 이 신호는 PL에서 PS로 특정 이벤트나 상태가 변경되었음을 알리는 데 사용됩니다.
- 데이터 복사 및 검증
- BRAM에서 DDR로 데이터를 복사합니다. 각 복사 단계 후, 해당 데이터를 printf를 사용하여 출력하여 검증합니다.
전체적인 작동 흐름
- 시스템이 시작되면 PS는 GPIO를 통해 PL의 상태를 확인하고, 준비가 완료되면 BRAM에서 DDR로 데이터를 복사합니다.
- 데이터가 모두 복사된 후, 결과를 터미널로 출력하여 사용자가 확인할 수 있습니다.
이 프로세스는 하드웨어와 소프트웨어 간의 상호작용을 효과적으로 보여주며, Zynq-7000 SoC의 강력한 처리 능력과 유연성을 활용할 수 있는 좋은 예입니다. 사용자는 이 정보를 바탕으로 시스템의 다른 부분에 대한 통찰력을 얻거나 필요한 경우 시스템을 조정할 수 있습니다.
주요 구성 요소
- Processing System (PS)
- ZYNQ7 Processing System: 이것은 모든 처리 작업의 중심으로 ARM 기반 프로세서와 주변장치를 포함합니다. DDR 메모리와의 인터페이스, 고정된 입출력(FIXED_IO), 그리고 다양한 클럭 신호를 관리합니다.
- AXI SmartConnect
- 소스 (S00_AXI): PS에서 데이터를 받습니다.
- 목적지 (M00_AXI, M01_AXI, M02_AXI): 각각 다른 AXI 슬레이브 장치로 데이터를 라우팅합니다. 이는 데이터를 필요한 곳으로 효율적으로 분배하는 역할을 합니다.
- AXI BRAM Controller
- BRAM_PORTA: 이 포트를 통해 BRAM으로 데이터 접근이 이루어집니다. 데이터 읽기 및 쓰기 작업을 중재합니다.
- Block Memory Generator (BRAM)
- BRAM_PORTA & BRAM_PORTB: BRAM 내부에서 데이터가 저장되고 접근될 수 있는 두 개의 포트를 제공합니다. 이는 데이터의 저장과 추출이 이루어지는 장소입니다.
- AXI GPIO
- 입력(GPIO_IN)과 출력(GPIO_OUT)을 위한 인터페이스를 제공하여 PS와 외부 세계 또는 PL의 다른 구성 요소와의 간단한 데이터 교환을 가능하게 합니다.
데이터 흐름 설명
- 데이터 전송 시작
- PS는 필요한 데이터 처리를 수행한 후, 이 데이터를 AXI SmartConnect를 통해 필요한 외부 장치나 내부 PL 구성 요소로 전송합니다.
- 데이터 라우팅
- AXI SmartConnect는 PS로부터의 데이터를 받아 각 슬레이브 장치로 효율적으로 라우팅합니다. 예를 들어, BRAM으로 데이터를 보내기 위해 M00_AXI 포트를 사용할 수 있습니다.
- 메모리 접근
- 데이터가 BRAM Controller를 통해 BRAM에 전달됩니다. 여기서는 AXI 인터페이스를 통해 데이터 쓰기 및 읽기가 이루어집니다.
- GPIO 통신
- 외부 입력을 받거나 외부로 신호를 보내는 역할을 하는 GPIO를 통해 추가적인 상호작용이 이루어질 수 있습니다. 예를 들어, 처리 상태를 나타내는 LED를 제어하거나 외부 스위치의 입력을 받을 수 있습니다.
- 외부와의 상호작용
- GPIO_OUT을 통해 외부로 데이터나 신호를 전송하고, GPIO_IN을 통해 외부로부터 신호를 수신합니다.
이러한 설계는 Zynq-7000 SoC의 PS와 PL의 강력한 기능을 활용하여 복잡한 데이터 처리와 메모리 관리, 외부 인터페이스와의 통신을 가능하게 합니다. 다이어그램은 이러한 작업들이 어떻게 서로 연결되어 있는지를 보여주며, 각 구성 요소가 시스템 내에서 어떤 역할을 하는지 이해하는 데 도움을 줍니다.
데이터 흐름 상세
- 처리 시스템에서의 데이터 처리 (PS)
- ZYNQ7 Processing System: 데이터 처리의 핵심 부분입니다. CPU는 필요한 계산을 수행하고 데이터를 처리합니다. 이 데이터는 다양한 외부 장치나 내부 구성 요소로 전송될 준비가 됩니다.
- AXI 인터페이스를 통한 데이터 라우팅 (AXI SmartConnect)
- 입력 (S00_AXI): PS로부터 데이터가 이 인터페이스를 통해 AXI SmartConnect로 들어옵니다.
- 출력 (M00_AXI, M01_AXI, M02_AXI): SmartConnect는 들어온 데이터를 적절한 목적지로 라우팅합니다. 각 출력 포트는 다른 장치로 연결되어 있어 데이터를 필요한 곳으로 정확히 전달합니다.
- M00_AXI: 주로 메모리 관련 작업을 위해 BRAM Controller에 연결됩니다.
- M01_AXI: 일반적으로 다른 메모리 장치나 특정 입력/출력 장치에 연결될 수 있습니다.
- M02_AXI: 추가적인 입력/출력 장치나 센서 등 외부 인터페이스로 데이터를 전송하는 데 사용됩니다.
- 블록 메모리 접근 (AXI BRAM Controller 및 Block Memory Generator)
- AXI BRAM Controller: 이 컨트롤러는 AXI 프로토콜을 사용하여 BRAM과의 데이터 통신을 관리합니다. 메모리에 데이터를 쓰거나 읽는 명령을 처리합니다.
- Block Memory Generator: 실제 메모리 블록이며, 데이터를 저장하고 검색하는 데 사용됩니다. 여기서 데이터는 주어진 주소에 따라 저장되거나 접근됩니다.
- 일반 목적 입/출력 (GPIO)
- AXI GPIO: 간단한 데이터 신호를 처리하는 데 사용됩니다.
- 입력 (GPIO_IN): 외부에서 신호나 데이터를 받아들입니다. 예를 들어, 외부 버튼의 클릭이나 스위치 상태 등을 감지할 때 사용됩니다.
- 출력 (GPIO_OUT): 외부에 신호를 보냅니다. LED를 제어하거나 외부 장치에 트리거 신호를 보내는 데 사용할 수 있습니다.
- AXI GPIO: 간단한 데이터 신호를 처리하는 데 사용됩니다.
데이터의 흐름과 상호작용
- 데이터 생성: PS에서 데이터가 처리되고, 이 데이터는 AXI SmartConnect를 통해 적절한 장치로 전송됩니다.
- 데이터 라우팅: SmartConnect는 데이터를 필요한 장치로 정확하고 효율적으로 라우팅합니다.
- 메모리 작업: 데이터는 BRAM에 저장되거나, BRAM에서 읽힙니다. 이 과정은 AXI BRAM Controller를 통해 관리됩니다.
- 외부 상호작용: GPIO를 통해 외부 장치와의 데이터 교환 및 상호작용이 이루어집니다.
이 데이터 흐름은 시스템 전체의 효율적인 운영을 보장하며, 각 구성 요소는 특정 작업을 수행하기 위해 서로 협력합니다. 이러한 상호작용은 시스템의 성능을 최적화하고, 다양한 응용 프로그램에서 요구하는 다기능 처리를 가능하게 합니다.