목차
IP 생성
Block Design 생성 및 xsa 파일 생성 및 내보내기
Vitis를 통한 하드웨어 실행
- Switch 동작에 따라 점멸 속도가 각기 다른 LED를 조절하는 IP를 생성할 것이다.
IP란?
Intellectual Property는 특정한 기능을 수행하는 사전 설계된 모듈이나 블록을 의미한다. IP는 재사용 가능한 설계 요소로, 설계자가 FPGA, ASIC, 또는 SoC와 같은 하드웨어 시스템을 설계할 때, 기존에 블록을 사용하여 설계 시간을 줄이고 개발의 효율성을 높일 수 있다.
- Module, XDC file 생성
4개의 Switch와 LED의 FPGA Board의 Pin 번호에 맞게 설정한 xdc File과 Counter를 이용하여 출력 값을 지정한 Clock 속도에 맞게 Toggle 시키는 모듈 및 Switch, LED를 동작시키는 모듈을 작성한다.
- DUT 검증
설계한대로 동작하는지 Simulation을 통해 확인한다.
Tools -> Create and Package New IP를 통해 IP를 생성한다.
(세부 사항들은 상황에 맞게 설정하면 된다.)
IP를 생성하게 되면 .tcl .xml 파일이 생성된다.
.tcl
Tool Command Language 스크립트 파일로 tcl을 사용하여 자동화 작업을 통해 다른 Project에 IP를 인스턴스화하는 데 사용된다.
.xml
IP core의 Meta Data를 포함한다. 버전, 파라미터, 인터페이스 및 IP의 특성을 정의하는 다양한 설정이 포함되어 있다. IP와 같은 도구에서 IP가 어떻게 동작해야 하는지, resource는 어떻게 사용하는지, 환경에 따라 어떻게 설정되는지를 인식하는 데 사용된다.
- IP 불러오기
위에서 생성한 IP를 사용하기 위해 IP를 추가하는 작업을 해줘야 한다.
위 경로에 따라 IP를 생성한 폴더를 선택하게 되면 위와 같이 해당 폴더에 존재하는 IP를 확인할 수 있다.
(IP가 뜨지 않으면 생성되지 않은 것이기 때문에 주의해야 한다.)
- Block Design 설계
새롭게 생성한 IP와 기존의 IP를 통해 새로운 Block Design을 설계할 것이다.
위에서 새롭게 생성한 IP를 검색하여 불러온다.
위와 같이 새로운 Block Design이 배치된 것을 확인할 수 있다.
마찬가지로 Zynq Chip을 사용하고 있기 때문에 기본적으로 제공하는 Zynq Block Design을 불러온다.
Make External을 통해 출력 Port를 생성할 수 있다.
(PL LED를 사용하기 출력 Port를 LED와 연결시킬 것이다.)
위와 같이 External을 통해 생성된 Port의 이름은 xdc 파일을 통해 선언한 Port와 일치시켜야 한다.
현재 Block Design에서 4bit External Port의 이름은 xdc 파일을 통해 선언된 Port의 이름과 일치시켜야 한다.
현재 xdc 파일에 led[0]~led[3]까지 선언되어 있고, External Port에 led라고 선언하게 되면 4bit가 각각 led[0]~led[3]까지 대응되게 된다.
Zynq Block 설정
Zynq chip은 위와 같이 PS, PL 부분으로 이루어져 있다.
(PS, PL에 대한 자세한 내용은 추후에 다루겠다.)
PS : ARM Cortex-A9
PL : FPGA
위와 같이 이루어져 있으며 PS는 소프트웨어 중심의 작업을 수행하게 되고, PL은 하드웨어 가속이 필요한 연산을 처리하는데 사용된다.
PS와 PL은 각기 다른 영역의 작업을 수행하지만 AXI Interface를 통해 상호작용 할 수 있다.
위와 같이 필요한 Spec에 맞게 직접 설정할 수 있다.
위 설정의 경우 FCLK_CLK0의 Clock을 100MHz로 설정하여 사용하겠다는 의미다.
위 PL Fabric Clocks를 선택하게되면 이후 사용하게될 PS 영역(Vitis)와 PL 영역의 Clock을 일치시켜 동일한 클럭을 사용해 동작하도록 하기 위함이다.
PS와 PL이 각각의 역할을 수행하지만, 데이터를 주고 받기 위해선 동일한 Clock을 사용하여 Data를 주고 받아야 하기 때문이다.
Run Block Automation 버튼을 누르게 되면 DDR, FIXED_IO 핀을 자동으로 설정해주게 된다.
Vivado에서 PS를 설정할 때 자동으로 필수적인 핀 설정 및 기본적인 연결을 구성해주게 된다. PS가 PL과 상호작용하는 데 필요한 설정을 자동으로 적용해 주는 역할을 한다.
DDR : PS 내부에서 사용할 외부 DDR 메모리를 자동으로 설정하고, 이를 DDR 인터페이스와 연결한다. PS가 메모리에서 데이터를 읽고 쓸 수 있도록 지원한다.
FIXED_IO : PS의 FIXED_IO 핀들을 외부와의 연결을 위해 자동으로 할당한다. (GPIO, UART, SPI, I2C 같은 주변 장치들이 외부 회로와 연결된다.)
Create HDL Wrapper를 통해 Vivado에서 Zynq Processing System을 포함한 Block Design을 완료한 후, 해당 디자인을 HDL 파일로 생성하는 과정이다.
HDL 파일로 생성하는 이유는 Block Design에서 구성한 하드웨어 모듈들을 합성하기 위해서는 최종적으로 HDL 코드로 변환되어야 하기 때문이다.
!!!!!!! 오류
위와 같은 에러가 발생한다. 사용하지 않는 포트가 있으면 위와 같이 에러가 난다.
사용하지 않는 포트의 경우 위와 같이 해당 Interface를 해제해준다.
위와 같이 Wrapper를 생성하게 되면 위와 같이 자동으로 HDL Code를 생성해주게 된다.
Bitstream을 생성하는 이유는 FPGA가 설계한 대로 동작하도록 하기 위한 필수 단계이다. 설계한 회로가 FPGA 하드웨어에 적용되기 위해 필요한 구성 파일을 만드는 과정이다. 이 Bitstream 파일이 FPGA에 다운로드되어, 프로그래머블 논리와 라우팅이 정확하게 설정된다.
합성 후 실제 사용된 LUT, FF, IO, BUFG를 확인할 수 있다. Board Spec에 따라 사용할 수 있는 양이 다를 것이고 그에 따라 사용한 양을 확인할 수 있다.
Setup, Hold Time을 위와 같이 확인할 수 있다.
Auto PnR에서도 Timing Report를 통해 Slack 값을 확인하게 된다. (양수일 경우 정상적으로 동작할 수 있음을 의미한다.)
위와 같이 Report Utilization을 통해 합성에 사용된 자원들에 대해 확인할 수 있따.
Export Hardware는 Vivado에서 Vitis로 하드웨어 설계 정보를 내보내기 위한 과정이다. Vitis에서 소프트웨어로 개발할 때, FPGA에 맞는 하드웨어 설정을 사용할 수 있게 된다.
예를 들어 Vivado의 Block Diagram에서 GPIO를 사용하게 될 경우 해당 하드웨어 설계 정보를 내보낸 다음 Vitis에서 해당 파일을 불러와 코드를 통해 해당 Pin 메모리 주소에 접근하여 데이터를 전달할 수 있다.
Vitis를 통해 소프트웨어 애플리케이션을 실제 하드웨어에 실행
Vitis 실행 후 Vivado에서 내보낸 하드웨어 설계(xsa) 파일을 불러온다.
target proccessor, operating System, Architecture 등 상황에 맞게 설정해주며, 필요에 맞게 Template를 사용해준다.
(일반적으로 빈 파일 생성 후 필요에 맞게 코드를 작성하게 된다.)
Build 후 Launch Hardware를 하게 되면 Vitis를 통해 FPGA Board를 실행시키게 된다.
위와 같이 스위치를 키게 되면 불이 들어오는 것을 확인할 수 있다.
'Semiconductor > 0. FPGA' 카테고리의 다른 글
FPGA를 이용한 시계 만들기 (AXI4-Lite를 이용한 입력에 따른 Freq 조절) (0) | 2024.10.04 |
---|---|
FPGA - STM32 UART 이용한 DC Motor 제어 및 신호 확인 (0) | 2024.07.30 |
FPGA - SPI 통신을 이용한 DC Motor 제어하기 (0) | 2024.07.15 |
FPGA - CHARACTER LCD에 문자 입력하기 (0) | 2024.06.18 |
FPGA - FPGA를 이용한 DC 모터 구동 (0) | 2024.06.11 |