[FPGA] Xilinx Vivado 프로젝트 생성 및 실행

pikamon·2022년 5월 11일
0

FPGA

목록 보기
2/4
post-thumbnail

본 글은 Digilent Arty-A7-100T 보드를 기준으로 작성되었습니다.
세부적인 내용은 제품마다 조금씩 다를 수 있습니다.


Vivado 사용법에 대해 알아보자.

간단한 모듈을 작성하고 FPGA에 올려보자.

버튼 스위치 두 개로부터 입력을 받아 AND 연산하여 LED에 값을 출력하는 모듈을 만들어보자. 이는 입력 핀 두 개와 출력 핀 하나로 구현할 수 있다.

1. 프로젝트 생성

Create Project를 눌러서 프로젝트를 생성한다.

Next를 누른다.

프로젝트 이름 및 경로를 확인하고 Next를 누른다.

RTL 프로젝트로 생성한다.

Create File 을 눌러서 verilog 파일을 하나 만든다.

파일명을 적고 OK를 누른다. 필자는 이름을 main.v로 하였다.

Next를 누른다.

Constraint는 이따가 만들거라서 우선은 Next를 눌러 넘어간다.

Target을 지정해야 하는데, Boards 탭에 들어가서 Arty A7-100T 보드를 검색한다.

검색 결과에 Arty A7-100이 표시되는 것을 볼 수 있다. Status의 화살표 버튼을 눌러 다운로드한 후 선택하여 Next 버튼을 누른다.

Finish를 누른다.

아래 화면이 뜨는데, +버튼을 눌러 입력 핀 두 개와 출력 핀 하나를 만들어준다. 이름은 각각 in1, in2, out으로 하였다.

그럼 짜잔 아래와 같이 프로젝트가 생성된 것을 볼 수 있다. ^^

2. RTL 모듈 작성

AND 연산하는 모듈을 만들기로 했으므로, 아래 코드를 추가해준다.

  • main.v
    assign out = in1 & in2;

3. 합성 (Synthesis)

파일 저장 후 Run Synthesis 버튼을 눌러 합성한다.

조금 기다리면 합성에 성공했다고 뜨면서 아래 화면이 나온다.
Layout > I/O Planning 을 눌러 I/O 핀맵을 할당한다.

핀맵을 할당하려면 보드의 Pin Assignment를 봐야 한다.
Diligent에서 제공하는 Arty A7-100T의 Reference Manual을 보면 버튼 스위치와 LED 관련 주변 회로가 나와있다.

두 가지를 알 수 있는데,
첫 번째는 버튼 스위치 및 LED의 핀맵이 아래와 같이 할당되어 있는 것을 알 수 있다.

  • BTN0 : D9
  • BTN1 : C9
  • LD4 : H5

두 번째는 버튼 스위치와 LED에 풀다운 저항이 연결되어 있으며, 버튼 스위치에 3.3V 전압을 사용하는 것을 알 수 있다.

위 내용대로 Input 핀과 Output 핀의 Package Pin에 핀맵을 할당해주고, I/O Std를 LVCMOS33으로 설정해준다.

Ctrl + S를 눌러 저장하고, 아래와 같이 Save Constraints 창이 뜨면 OK를 누른다.

4. 구현 (Implementation)

Run Implementation 버튼을 눌러서 구현한다.

그러면 위에 작업한 핀 할당에 의해 한 번 재합성한 후 구현이 이루어진다.

조금 기다리면 구현에 성공하며, 아래와 같이 창이 전환된다.

5. 비트스트림(Bitstream) 생성

Generate Bitstream 버튼을 눌러 비트스트림을 생성한다.

조금 기다리면 비트스트림이 생성되며, 아래와 같이 창이 전환된다.

6. Target 연결

FPGA 보드에 보면 USB micro 5핀 포트가 있다. 이를 USB 케이블로 PC와 연결한다.

그리고 Open target > Auto Connect 을 누르면 프로그램이 자동으로 PC에 연결된 FPGA 보드를 감지한다.

7. 프로그램 (Flash Program)

위에서 합성 및 구현하여 만들어진 비트스트림을 FPGA에 올려보자.

Program Device 버튼을 누르고 Target FPGA를 선택한다.

그럼 아래와 같이 창이 뜨며, Program 버튼을 누른다.

조금 기다리면 프로그램이 완료된다.

8. 결과 확인

드디어 결과 확인을 해보자.

위에서 BTN0과 BTN1을 각각 in1과 in2에, 그리고 LD4를 out에 연결하였다. 따라서 BTN0과 BTN1을 동시에 누르면 LD4에 불이 들어올 것을 기대할 수 있다.

테스트해보면 위와 같이 결과가 예상한 대로 나오는 것을 볼 수 있다.

profile
개발자입니당 *^^* 깃허브 https://github.com/pikamonvvs

0개의 댓글