FPGA Zedboard에 I/O device 연결하는 법 ( vivado, vitis, ADC, LED, Light Sensor, zynq 7000 )
보드에서 Core와 GPIO의 입출의 교환이 어떻게 이루어지는지 알아보자.
하기 전에 기본 설정은 아래 포스팅 11번까지다.
2022.09.20 - [내가 하는 공부/Arm] - VIVADO 사용법 ( board 연결, zynq 7000, Vits 연결 )
VIVADO 사용법 ( board 연결, zynq 7000, Vits 연결 )
1. 먼저 비바도를 실행시킨 뒤에 "Create Project"를 누른다. 2. 아래와 같은 창이 뜨는데, 파일 저장 위치랑 파일 이름은 기호에 따라 지정한다. 3. 여러 타입이 있는데 RTL로 설정했다. 아래 옵션은 따
wpaud16.tistory.com
Vivado에서 설정
보드의 밖에 I/O에게 신호를 보내기 위해선 GPIO가 Output으로 돼야 한다. 하나하나 설정해보자,
1. vivado Block Design에서 gpio IP를 추가한 다음에 더블 클릭한다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
2. "Board"에서는 Custom으로 변경한다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
3. "IP Configuration"에서는 input인 신호를 output으로 변경하고 확인을 누른다. ( + 얼마의 bit가 필요한지에 따라서 Width를 지정해 준다.)
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
4. 그리고 "gpio_io_o[4:0]" 오른쪽 마우스 누르고 "Make External"을 눌러서 연결해준다.
5. 그런데 core에서 내보낸 output이 I/O랑 어떻게 연결되는지 모른다. 이런 걸 구체적으로 적어줘야 한다. 그러기 위해 Vivado에서 "Constraints" 파일을 추가해줘야 한다.
I/O와 Zynq core pin이 어떻게 연결됐는지 알 수 있냐면, Zedborad User 가이드를 보면 디테일하게 zynq pin이랑 어디에 연결해야 하는지 볼 수 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![](https://blog.kakaocdn.net/dn/dCU33F/btrNcV4tK0f/V5NaijjTKy096QAzxBLYZ0/img.png)
6. "Constraints" 파일을 추가하려면,
Source에 "constrs_1"에서 마우스 오른쪽 누르고 "Add Source" ---> "add or create constrains" ---> "create file" 누르고 이름을 정해준다.
필자는 gpio로 했다.
![](https://blog.kakaocdn.net/dn/1nMrA/btrM8fRmak6/VkLNJByrx6voUxRMKpgt9K/img.png)
그리고 생성된 파일에 아래와 같이 짝을 지어서 적어준다. 이게 Constrain 파일이다. 즉, 매핑시켜준 것이다.
아래 "gpio_0"랑 실제로 내가 지정한 이름이랑 같아야 한다.
내가 Block Design에서 "gpio_io_0"라고 설정했다면, {} 안에도 맞게 적어줘야 한다.
set_property PACKAGE_PIN W12 [get_ports { gpio_0[0] } ]
set_property PACKAGE_PIN W11 [get_ports { gpio_0[1] } ]
set_property PACKAGE_PIN V10 [get_ports { gpio_0[2] } ]
set_property PACKAGE_PIN W8 [get_ports { gpio_0[3] } ]
set_property PACKAGE_PIN V12 [get_ports { gpio_0[4] } ]
set_property PACKAGE_PIN W10 [get_ports { gpio_0[5] } ]
set_property PACKAGE_PIN V9 [get_ports { gpio_0[6] } ]
set_property PACKAGE_PIN V8 [get_ports { gpio_0[7] } ]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0[*]}]
7. 다음으로는 커스텀한 board 파일을 HDL로 Wrapper 해준다. 아래 포스팅 12번부터 쭉 따라가면 된다. 휴 쉽지 않았다.
2022.09.20 - [내가 하는 공부/Arm] - VIVADO 사용법 ( board 연결, zynq 7000, Vits 연결 )
VIVADO 사용법 ( board 연결, zynq 7000, Vits 연결 )
1. 먼저 비바도를 실행시킨 뒤에 "Create Project"를 누른다. 2. 아래와 같은 창이 뜨는데, 파일 저장 위치랑 파일 이름은 기호에 따라 지정한다. 3. 여러 타입이 있는데 RTL로 설정했다. 아래 옵션은 따
wpaud16.tistory.com
8. 돌아오면 Vitis에서 설정도 똑같이 하면 된다. 아래 포스팅 10번까지만 하면 된다.
2022.09.22 - [내가 하는 공부/Arm] - Vitis 사용법 ( vivado 연결 )
Vitis 사용법 ( vivado 연결 )
Vivado에서 설계한걸 Vitis에 올리는 방법에 대해 알아보자, 그 전엔 vivado를 사용하여 하드웨어를 설계하는 방법은 아래와 같다. 2022.09.20 - [내가 하는 공부/Arm] - VIVADO 사용법 ( board 연결, zynq 7000,..
wpaud16.tistory.com
9. 빵판에 LED를 켤건데. vivado diagram에서 내가 설정한 GPIO_1의 Base Address를 볼 수 있다. 0x4121_0000가 gpio_1의 시작 주소다. 우린 이걸 이용해서 Vitis에서 설정하여 LED를 켤 수 있다. 와우
![](https://blog.kakaocdn.net/dn/bBlzDg/btrNkCecaFc/Cbk25viJ2xLBp3CZ52Xkw0/img.png)
![](https://blog.kakaocdn.net/dn/kDJTo/btrNpJCJgsQ/0j4NONKWHpPl2yhl3S5VkK/img.png)
10. 이제 보드에 LED를 연결한다. LED는 GND랑 입력이 있어야 하는데 입력은 JB1 (0x4121000)에서 들어간다고 하면 전선에 맞게 연결하면 된다. (사실 LED에 저항을 연결해야 좋지만... 일단 귀찮으니 호다닥 해보자
![](https://blog.kakaocdn.net/dn/4NBMI/btrNn3POAry/bdYeKA4d7erbdf9nu3pFUK/img.jpg)
11. 그리고 Vitis에서 LED를 켰다 끄는 간단한 코드를 짜 보자. hello.c에다가 아래 코드를 넣어서 컴파일하면, LED가 켜졌다 꺼졌다 한다~~
![](https://blog.kakaocdn.net/dn/dh3c0f/btrNo9aEYiB/qurTEr3akUiR8hSQhAzaDk/img.png)