HW/System on Chip

SoC programming 실습(1/2)

seungH 2025. 3. 31. 11:43

프로젝트 생성 → Designing with IP Integrator → Program coding → program debugging

Xilinx SDK(Software Development Kit)를 이용하여 실습을 해보자.

 

프로젝트 생성

vivado에서 빈 프로젝트를 생성한다.

 

Designing with IP Integrator

IP Integrator : system의 각 IP들을 계층적으로 통합하는 tool

IP integrator → Create Block Design 버튼을 누르면

이런식으로 gui환경 (design canvas)에서 block based design을 수행할 수 있다.

 

이번 실습에서는 zynq 프로세서를 불러오고 zynq프로세서에서 uart통신을 하는 실습을 진행할 예정이므로, design canvas에는 zynq core만 있으면 된다.

불러온 초기의 zynq에는 이번 실습에서 사용하지 않는 여러 기능들이 켜져있다. 이것을 점검해야 한다.

1. PS-PL Configuration → AXI Non Secure Enablement → GP Master AXI Interface → M AXI GP0 interface → check 해제

이번 실습은 PS영역의 uart만 사용할 예정이므로 ps와 pl간의 AXI인터페이스를 사용하지 않는다. 따라서 이 설정을 비활성화하여 PS가 GP0 인터페이스를 통해 PL로 데이터를 전송하는 기능을 비활성화 한다.

 

2. MIO Configuration → I/O Peripherals → UART 1 → check 설정 후 MIO 48 .. 49 선택 → Bank 1 I/O Voltage에서 LVCMOS 1.8V로 변경

UART기능을 사용할 것이므로 이 기능을 클릭하고 전압을 1.8.V로 바꾸는데, 이는 데이터시트에서 확인할 수 있다. 이 의미는 MIO(Multi-Purpose I/O)핀인 48번, 49번(RX, TX)를 통신을 위해 설정하고 1.8V로 설정한다는 의미이다.

 

3. DDR Configuration → Enable DDR → check 해제

DDR메모리는 시스템에서 데이터를 빠르게 읽어오는 메모리이다. 이는 off-chip memory에 존재하는데, 이번 실습은 on-chip memory로만 사용해도 충분하기 때문에 외부 ddr 메모리를 사용하지 않는다.

 

run block automation을 하면 설정에 맞게 칩이 변환된다.

이렇게 생성된 칩의 HDL Wrapper를 만들어야한다. 내부 구조를 추상화하고 인터페이스만 정의하는 느낌이다.

또한 sdk에서 작업하기 위해서는 이 wrapper작업이 필수적이다.

이렇게 설계한 하드웨어를 SDK로 넘겨서 코딩을 진행한다.

 

 

Program Coding

지금 현재 상태는 vivado에서 하드웨어를 불러오기만 한 상태이고, 이 하드웨어를 동작하기 위한 sw를 업로드해야 한다.

하드웨어에서 현재 c언어를 실행할 준비가 다 되어있고 업로드만 하면 그 instruction의 주소가 바로 실행된다. ->업로드를 하자.

 

c언어를 코딩할 텐데, 현재 MMIO방식으로 제어하고자 하는 장치의 메모리 주소를 모르는 상태이다. 따라서 관련 라이브러리를 include하여야 한다.

1. 빈 프로젝트를 만든다.

File → New → Application Project 

2. 이 빈 프로젝트에 우리가 이전에 만든 하드웨어를 불러와야한다.

Import window(Select) → General → File System click → Next click

Import window(File system) ➢ From directory Browse… click → 컴퓨터 → 로컬 디스크 (C:) → 비바도 폴더

 

이렇게 한다면 내가 생성한 하드웨어에 맞는 BSP파일이 생성된다.

예를들어 vivado에서 uart만 사용하고 나머지는 사용하지 않게 setting을 한다면 bsp파일에서 다른 장치는 다 끄고 uart를 위한 함수가 생성이 되는 느낌이다.

이번에 사용할 uart에 대한 함수는 여기에 정의되어 있다.

➢ xuartps_hw.h

  ▪ UART device의 hardware interface에 관련된 내용 포함

  ▪ Register address, bit mask, macro definition

➢ xuartps_hw.c

  ▪ Software driver

  ▪ Transmit/receive byte, hardware reset

 

다음 글에서 UART device register에 대하여 알아보자.

'HW > System on Chip' 카테고리의 다른 글

Zynq Processing System  (0) 2025.03.31
Introduction to System on Chip  (0) 2025.03.31