Arty A7에서 RISC-V 프로세서의 실행
상태바
Arty A7에서 RISC-V 프로세서의 실행
  • 디질런트(Digilent inc.)
  • 승인 2019.11.20 09:00
  • 댓글 0
이 기사를 공유합니다

[테크월드=김경한 기자] Arty A7-100T에는 자일링스(Xilinx) XC7A100T FPGA가 포함돼 있다. 이는 Arty A7에 사용할 수 있는 가장 큰 FPGA이며 소프트 코어 프로세서의 배치에 이상적이다. 이러한 프로세서는 상업용 또는 오픈소스일 수 있는데, 가장 널리 사용되는 오픈소스 프로세서 중 하나는 RISC-V이다.

여기에서는 RISC-V 프로세서, 특히 사이파이브 프리덤(SiFive Freedom) E310 구축에 대해 설명한다. 또한, 프리덤 E310을 Arty A7에 로드하고 아두이노(Arduino) IDE를 사용해 프로그래밍하는 과정을 단계별로 설명한다. 

[그림1] E300 플랫폼의 최상위 다이어그램

시작하기
비바도(Vivado) 2017.1 버전을 다운로드받아 설치한다. 다운로드가 완료되면 터미널 창을 연다. 그런 다음 현재 디렉토리를 홈 디렉토리로 변경한다. 이 터미널 창은 RISCV 프로세서를 구축하는 데 사용된다. 

다음 명령을 사용해 터미널 명령 행에서 설정 스크립트를 소싱해 비바도를 설정한다.

source /opt/Xilinx/Vivado/2017.1/settings64.sh

비바도가 사용할 수 있도록 디질런트의 보드 파일을 다운로드해 포함시킨다. 깃(Git)을 사용해 다음 명령을 사용하면 디질런트 저장소에서 보드 정의 파일을 다운로드할 수 있다.

git clone https://github.com/Digilent/vivado-boards.git

다운로드가 끝나면 보드 파일을 해당 비바도 디렉토리에 복사한다. 이는 다음 명령을 통해 실행할 수 있다.

sudo cp -r vivado-boards/new/board_files/* /opt/Xilinx/Vivado/2017.1/data/boards/board_files/


RISC-V 구축하기

프로세서의 생성과 구현은 Makefile을 실행해 수행할 수 있다. 먼저 깃을 사용해 저장소를 복제하고 사이파이 무료 프로세서를 다운로드한다.

git clone --recursive https://github.com/sifive/freedom.git

다운로드할 파일이 많기 때문에 복제에는 시간이 조금 걸린다. 다운로드가 완료되면, 작업 디렉토리에서 ‘Freedom’이라는 새 폴더를 볼 수 있다[그림 2].

[그림 2] 복제 후 Freedom 디렉토리 콘텐츠
[그림 2] 복제 후 Freedom 디렉토리 콘텐츠

이 디렉토리에는 여러 개의 Makefile이 있다. 이 튜토리얼에서는 Makefile.e300artydevkit 예제를 사용한다. 예제 스크립트는 Arty A7-35T와 Arty A7-100T 모두에 대한 RISC-V 프로세서를 생성한다. 툴체인을 먼저 컴파일해야 한다. 터미널 창에서 작업 디렉토리를 rocket-chip / riscv-tools 내의 Toolchains 디렉토리로 변경하고 build.sh 스크립트를 실행한다. 구현 파일을 생성하는 데 필요한 툴체인이 빌드된다. Chisel HDL 파일에서 프로세서의 Verilog 인스턴스를 생성하려면 다음 명령을 실행한다. 

make -f Makefile.e300artydevkit Verilog

파일을 컴파일하는 데 약간의 시간이 걸린다. 일반 베릴로그(Verilog) 파일을 생성하면, Arty A7-35T 또는 Arty A7-100T를 대상으로 컴파일할 수 있다[그림 3].

[그림 3] 베릴로그 makefile의 완성
[그림 3] 베릴로그 makefile의 완성

터미널 창 내 메모리 맵에서 주변 장치와 해당 주소를 볼 수 있다[그림 4].

[그림 4] 메모리 맵에서 생성된 Freedom RISC-V 예제
[그림 4] 메모리 맵에서 생성된 Freedom RISC-V 예제

사용할 수 있는 프로세서에 대한 베릴로그 설계를 사용한 후에는 어떤 Arty 보드를 대상으로 할지 결정해야 한다. Arty A7-35T를 대상으로 하는 경우에는 변경할 필요가 없다. Arty A7-100T를 대상으로 하는 경우 약간의 조정이 필요하다. 이렇게 변경하려면 텍스트 편집기를 사용해 makefile Makefile.e300artydevkit을 열고 보드 유형을 변경해야 한다. 기본적으로 Makefile은 Arty A7-35T에 대한 FPGA 구현을 생성한다[그림 5]. 

[그림 5] arty 35T에 대한 기본 빌드 스크립트
[그림 5] arty 35T에 대한 기본 빌드 스크립트

Arty A7-100T에 대한 구현을 생성하려면 보드 유형을 arty_a7_100T로 변경한다. 파일 브라우저를 열고 freedom / fpga-shells / Xilinx 디렉토리로 이동한다[그림 6]. 지원되는 각 개발 보드의 이름을 가진 여러 폴더를 여기에서 볼 수 있다. arty_a7_100 폴더의 이름은 사용된 보드 유형과 일치한다.

[그림 6] 지원되는 자일링스 개발 파일
[그림 6] 지원되는 자일링스 개발 파일

Makefile을 텍스트 편집기를 사용해 보드 이름을 arty_a7_100으로 변경한다[그림 7]. 수정된 파일을 저장하고 닫는다.

[그림 7] Arty 100T에 대한 보드 정의 업데이트
[그림 7] Arty 100T에 대한 보드 정의 업데이트

이를 통해 이제 FPGA 구현을 생성할 수 있다. 터미널 창에서 다음 명령을 실행한다.

make -f Makefile.e300artydevkit mcs

스크립트가 비바도와 RISC-V 툴체인을 사용해 비트 스트림과 MCS 파일을 생성하므로 시간이 걸린다[그림 8]. MCS 파일은 Arty A7 100T의 플래시 메모리에 프로그래밍할 수 있으며 보드 전원을 켤 때 RISC-V 프로세서를 로드할 수 있도록 해준다.

[그림 8] FPGA 구현 스크립트 완료
[그림 8] FPGA 구현 스크립트 완료

출력 파일은 다음 디렉토리에서 사용할 수 있다. 

<workspace>/freedom/builds/e300artydevkit/obj

BIT 파일, MCS 파일, 비바도 구현 보고서는 모두 여기에서 찾을 수 있다[그림 9].

[그림 9] 비바도 활용 보고서
[그림 9] 비바도 활용 보고서

 

하드웨어 프로그래밍
프로그래밍 파일을 사용할 수 있는 다음 단계는 비바도를 사용해 플래시 메모리를 프로그래밍하는 것이다.

‘Vivado’ 명령을 사용해 비바도를 연다.

GUI가 시작되면 다음 단계는 Arty A7-100T를 마이크로 USB 포트(J10)를 통해 개발 시스템에 연결하고 비바도의 하드웨어 관리자를 여는 것이다. 보드가 연결되면 화면 왼쪽의 하드웨어 탭에 FPGA 장치가 표시된다. 장치를 선택한 다음 마우스 오른쪽 단추로 클릭하고 ‘Configuration Memory Devices’를 선택한다. 메모리 유형을 선택할 수 있는 대화 상자가 열린다. Arty A7-100T에는 스팬션(Spansion) S25FL128xxxxx 장치가 장착돼 있다[그림 10].

[그림 10] 프로그래밍 위한 플래시 선택
[그림 10] 프로그래밍 위한 플래시 선택

장치를 선택한 후에는 장치를 지금 프로그래밍해야 하는지 묻는 대화 상자가 나타난다. ‘Yes’를 클릭하면 다른 대화 상자가 열린다[그림 11].

[그림 11] 프로그래밍 옵션 세팅 대화상자
[그림 11] 프로그래밍 옵션 세팅 대화상자

생성된 MCS 파일을 선택하면 장치가 프로그래밍된다. 이 프로세스가 완료되면 Arty A7-100T는 RISC-V 프로세서를 실행한다. 플래시로 프로그래밍할 수 있도록 Arty A7의 점퍼가 구성돼 있는지 확인하고 재설정 버튼을 누른다[그림 12].

[그림 12] 하드웨어 매니저
[그림 12] 하드웨어 매니저

다음을 수행해 프로세서가 실행 중인지 확인한다.

1. 버튼 3을 누르고 LED 6이 꺼지는 지를 살펴본다.

2. 리셋 버튼을 누르고 LED 4가 꺼지는 지를 살펴본다. 

사용자 지정 응용 프로그램을 만들고 업로드해야 한다. 이는 아두이노 개발 환경을 사용해 구현할 수 있다.


소프트웨어 생성
우선 올리멕스(Olimex) JTAG 포드를 Arty A7의 Pmod 포트(Port) D에 연결해야 JTAG 인터페이스를 사용해 프로그램을 다운로드하고 디버깅할 수 있다. 두 연결을 위한 핀 배치는 여기에서 찾을 수 있다.

이를 통해 이제 사용자 지정 응용 프로그램을 개발할 수 있다. RISC-V 프로그래밍을 시작하는 가장 좋은 방법은 아두이노 개발 환경을 사용하는 것이다.

사이파이브 프리덤 프로세서 지원을 쉽게 설치할 수 있다. ‘파일 → 환경’ 설정’에서 추가 보드 관리자 URL을 다음 URL로 지정한다[그림 13].

http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json
[그림 13] 환경설정 창
[그림 13] 환경설정 창

다음 단계는 ‘도구 → 보드’ 메뉴에서 찾은 보드 관리자(Board Manager)를 사용해 보드를 설치하는 것이다.

보드 관리자 대화 상자에서 Contributed 유형을 선택해 사이파이 프리덤 보드를 찾는다[그림 14].

[그림 14] 보드 관리자
[그림 14] 보드 관리자

설치가 완료되면 이 환경의 다른 보드와 마찬가지로 응용 프로그램을 개발하고 응용 프로그램을 로드할 수 있다. 보드 선택 목록에서 ‘Freedom Arty Dev Kit’를 선택한다.

 

문제해결
1. 자일링스 케이블 드라이버가 설치돼 있는지 확인한다. 먼저 디렉토리를 다음과 같이 변경하면 된다.

<xilinx Install>Vivado/2017.1/data/xicom/cable_drivers/lin64/install_script/install_drivers

그런 다음 명령을 실행한다.

sudo ./install_drivers

2. 올리멕스 USB에 필요한 권한이 있는지 확인한다. 다음 파일을 편집한다.

/etc/udev/rules.d/99-openocd.rules

이 파일에 다음 내용을 추가한다.

# These are for the Olimex Debugger for use with E310 Arty Dev Kit
SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", ATTR{idProduct}=="002a", MODE="664",
GROUP="plugdev"
SUBSYSTEM=="tty", ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664",
GROUP="plugdev"

저장한 후 ‘sudo udevadm control –reload-rules’ 명령을 입력한다.

3. 업로드하는 동안 문제가 발생하면 올멕스와 Pmod 포트 D 간의 연결을 확인하고 사용자가 plugdev 그룹에 포함돼 있는지 확인한다.