본문 바로가기
법, 용어/용어

FPGA 기초

by 3604 2024. 6. 20.
728x90

FPGA로 개발을 해보려면 일단 FPGA 보드가 있어야 하고, 그에 맞는 개발환경이 있어야 한다. 이번 포스트에서는 FPGA 보드 및 개발 환경 관련 이야기를 해보려고 한다.

 

 

1. FPGA 보드 고르기

 

FPGA에는 Altera와 Xilinx 두 회사 제품이 제일 많이 사용되는데, 여기서는 Xilinx사 제품을 사용하기로 한다. 학교에서 제일 처음 배울 때 Xilinx 제품과 개발툴로 해서 그런지, Xilinx사 제품이 나한테는 더 편한 것 같다. (이래서 학생용 라이센스를 그렇게 뿌리는 건가....)

 

연습용 FPGA 보드 고를 때는 인터페이스가 많이 뚫려있고, 적당한 가격 제품을 고르면 된다. 복잡한 개발을 할 때는 FPGA 스펙을 보고 결정해야 하지만, 그 정도 규모 개발 할 사람은 알아서 고를 능력이 있을 것이다. 그리고 추가로 인터넷에 자료가 많은 보드로 선택하면 좋다. 임베디드 초보자에게 아두이노가 편리한 이유가 사용 방법이 쉽기도 하지만, 인터넷에 자료가 엄청나게 많기 때문에 문제가 발생했을 때 참고하기가 쉽기 때문이다.

 

여기서는 Nexys4 DDR 보드를 사용한다. (링크)

 

보드 소개 페이지에 보면 간략하게 스펙이 나와 있는데, 옮겨보면 다음과 같다.

 

 

 

뭔가 많다. 이걸 다 써볼 수 있을지 모르겠다. 일단 설계 연습하는데 필요한 것부터 차근차근 써볼 생각이다.

홈페이지에 가보면 여러 자료가 있는데, 일단 메뉴얼, schematic, XDC 파일을 다운 받아둔다.

 

메뉴얼은 당연히 있어야 되는거고... schematic은 가끔 볼 일이 생기니 미리 다운 받아두는게 좋다. XDC는 꼭 있어야 하는데, FPGA PIN과 보드의 각 소자들이 어떻게 연결되어 있는지 미리 정리된 파일이다. schematic보고 직접 만들어도 되긴 하는데, 제조사에서 미리 만들어 뒀으니 그냥 가져다 쓰도록 하자.

 

 

2. 개발 환경 구축

 

Xilinx사 FPGA를 쓰려면 개발툴이 있어야 하는데, Xilinx사 홈페이지에 가보면 찾을 수 있다. Vivado Suite라는 것을 찾으면 된다. 라이센스는 당연히(?) 없기 때문에 WebPACK 버전을 쓰도록 한다. (링크)

 

다운 받은 다음에 설치하면 되는데, 설치 옵션은 그냥 그대로 써도 무방하다. 몇몇 옵션은 꺼도 되는데, 신경 쓰기 싫으면 그냥 그대로 쓰면 된다. 설치한 뒤에 프로그램을 실행하면 된다.

프로젝트를 생성할 때 보드를 선택할 수 있는데, Nexys4 DDR용 보드 파일은 제조사 홈페이지에서 다운 받을 수 있다. 다운 받은 뒤에 Vivado 폴더 안에 복사하면 된다. 

 

=> 설치 경로/Vivado/2016.2/data/boards/board_files  안에 복사하면 되며, 툴 버전마다 달라 질 수 있다.

 

추가로 자주 써야할 프로그램이 같이 설치되는 DocNav인데, Xilinx에서 제공하는 여러 문서를 찾아 볼 수 있는 프로그램이다. FPGA 및 툴 관련해서 궁금한 게 있으면 일단 여기부터 뒤져보면 된다.

 

여담으로 개발 환경 OS를 윈도우로 할 것인가 리눅스로 할 것인가가 중요한데, 리눅스가 친숙하지 않다면 윈도우를 쓸 수 밖에 없지만 그게 아니라면 리눅스에서 개발 환경을 만들어 두는게 좋다. 특히 나중에 ZYNQ 같은 FPGA 제품을 써서 임베디드 리눅스 같은 것을 해보고 싶다면 필수로 리눅스에서 작업을 해야 한다. 지금 다룰 보드의 FPGA에서는 그런 것은 할 수 없기 때문에 윈도우에서 해도 별 문제는 없다.

 

 

3. 개발 툴 간략 설명

 

실제로 툴을 돌려서 FPGA를 사용해 보는 것은 다음 포스트에서 단계별로 설명하기로 하고, 여기서는 개발 Flow에 대해 이야기해본다. Vivado를 실행하고 빈 프로젝트를 하나 만들면 왼쪽에 아래 그림과 같이 Flow Navigator라는 것이 있다.

 

 

처음 툴을 써보면 잘 이해가 안되는게 이 부분인데, FPGA 개발 단계를 차례대로 나열해둔 것이라고 생각하면 된다. 간단히 말해서 가장 위에서부터 아래까지 차례대로 쭉 실행하면 FPGA에 내가 짠 코드를 올려서 실행할 수 있다고 보면 된다.

 

1) Project Manager

프로젝트 관련 설정 및 소스 코드 관리, Xilinx IP 관리 등을 할 수 있다. 간단히 프로젝트 관련 설정 내용이 다 모여 있다고 보면 된다. 각 항목별 내용을 다 설명할 수는 없고 나중에 쓸 일이 있을 때 설명한다.

 

2) IP Integrator

IP를 가져다 블록 다이어그램을 서로 연결하는 방식으로 전체 디자인을 구성하고 싶을 때 사용한다. 디자인마다 쓸 일이 꽤 있는데, 사용할 때 자세히 설명한다.

 

3) Simulation

작성된 코드를 RTL 시뮬레이션 할 때 사용한다. 코드가 작성되면 반드시 시뮬레이션부터 해서 내가 생각한 대로 설계가 되었는지 확인해야 한다. 아마 가장 많이 사용할 부분일 것이다.

 

4) RTL Analysis

툴이 자동으로 RTL을 분석해서 Schematic을 만들고, 취약점을 알려준다. 취약점은 DRC(Design Rule Check)에 있는데, 꼭 확인해 보는 것이 좋다. 회로가 잘 동작되지 않을 때, 원인을 다 찾고 보면 DRC에서 이미 Warning 주고 있는 경우도 많다.

 

5) Synthesis

시뮬레이션도 다 하고, DRC 체크도 다 했으면 Synthesis, 즉 합성이라는 것을 해야 한다. 이 단계는 RTL을 게이트 레벨로 바꾸는 작업이라고 보면 된다. 정확히 말하면 RTL을 FPGA 내부에 있는 LUT 및 각종 모듈로 변환하는 단계이다. 기본적인 타이밍 체크도 수행된다. 

 

6) Implementation

합성이 완료되면 게이트가 어떤게 필요하고 어떻게 연결되어야 하는지는 결정된 것이고, 이제 실제 FPGA 위에 있는 물리적인 소자들에 이를 매핑해야 한다. 즉 이 게이트는 어느 셀을 쓰고, 저 게이트는 어느 셀을 쓰고 이런 것을 결정해야 하는데, 이 과정이 Implementation이라고 보면 된다. 추가로 외부 핀과도 매핑이 진행 된다. 

 

7) Program and Debug

Implementation까지 완료되면 준비는 다 끝났다. 이를 Bitstream으로 만든 뒤에 FPGA에 올리면 되는데, 이 과정을 수행할 때 사용하는 메뉴이다.

 

 

위와 같이 위에서부터 쭉 수행하면 FPGA 업로드까지 완료할 수 있으며, 몇 번 해보면 쉽게 쓸 수 있다.

 

다음 포스트에서는 임베디드계의 Hello world라 할 수 있는 LED 켜보는 것을 다루어 본다.

출처: https://servilia.tistory.com/35 [세르네 창고방:티스토리]

728x90
반응형