2024년 5월 13일 월요일

Xilinx FPGA 도구 Vivado/Vitis-HLS 를 WSL에 설치

Xilinx FPGA 도구 Vivado/Vitis-HLS 를 WSL에 설치

목차:

1. 개요
2. 설치 소프트웨어 다운로드 및 설치
3. FPGA 프로그램 다운로드 케이블(WSL/리눅스)
4. 다운로드 케이블 드라이버 설치 및 실행(WSL/Linux)
5. 결론

----------------------------------------------------

1. 개요

WSL(Windows Subsystem Linux)에 Xilinx FPGA 개발 소프트웨어 플랫 폼 Vitis-HLS와 Vivado 설치 방법을 설명한다. EDA 도구를 굳이 Linux 에 설치하려는 이유를 찾는 다면 원시 코드 관리와 생산성 때문이다. 윈도우즈 운영체제의 GUI는 직관적이어서 사용이 편리한 반면 개발자의 측면에서 보면 매우 까다롭고 복잡하다. 전문적인 프로그래머라면 이에 대해 이견이 있겠으나 시스템 반도체 설계자에게 운영체제까지 속속들이 이해하라고 하는 것은 무리한 요구다. 그렇더라도 어느정도 명령줄 사용법과 파일 시스템의 구조 그리고 시스템 프로그래밍은 익혀두면 시스템 수준의 반도체 설계를 앞두고 큰 도움이 될 것이다.

    [참고]
    1. The Linux Programming Interface: Linux/Unix System Programming Handbook [Link]
    2. Linux in a Nutshell - A Desktop Quick Reference [Link]

C++를 활용하여 시스템 수준 모델링과 테스트 벤치를 작성해야 하는 경우 하드웨어 장치 사이의 시리얼 통신, 이더넷 통신은 물론 쓰레드(PThread, QuickThread)와 IPC라고 하는 프로세스간 통신을 사용하게 되는데 Windows의 프로그램 코드와 리눅스의 프로그램 코드를 비교해 보면 금방 드러난다. 윈도우즈 운영체제가 "유닉스"를 대부분 채용했다고 하지만 그 태생이 다른 만큼 프로그램 원시 코드를 보면 지저분(?) 하다. 아주 간단한 예로 시리얼 통신 응용 프로그램을 적성해 보면 금방 드러난다. 아듀이노 보드를 이용하여 에뮬레이션으로 FPGA 프로토 타이핑 검증 및 칩-테스트 예제를 참고하자.

    [참고] https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--ALU8.git

WSL에서 반도체 설계 리눅스 응용 프로그램이 완벽하게 실행된다. 하지만 아쉽게도 윈도우즈의 바로가기(short-cut)과 리눅스의 심볼링크(Symbol-Link)는 호환되지 않는다. 설계 도구 중 HDL 시뮬레이터와 FPGA 도구는 윈도우즈에, 합성과 레이아웃 설계도구는 리눅스에 각각 따로 운영하는 경우 두 운영체제를 오가며 원시코드를 관리하기 쉽지 않다[주]. 게다가 시스템 모델과 테스트 벤치를 두 운영체제별로 따로 작성하기는 엄청난 낭비가 아닐 수 없다. 설계 도구를 제작사는 두 운영체제를 모두 지원한다며 엄청난 비용을 요구한다. 그나마 완벽하지도 않은 경우를 본다.

    [주] 윈도우즈에서 WSL의 리눅스 파일시스템을 네트워크 드라이브로 매핑하면 상당부분 파일을 일일이 복사해야하는 번거로움을 덜 수 있긴 하다. 그렇다고 파일 시스템간의 호환성 문제를 완전히 해결한 것은 아니다. 파일 보관(archiving)에도 상당한 문제를 잃으킨다.

두 운영체제 사이에 파일을 복사하고 붙여 넣다보면 예기치 않은 오류는 물론 혼란스럽고 귀찮다. 다행히 윈도우즈의 문서 편집기 같은 응용 프로그램들이 WSL의 리눅스 파일에 접근을 허용한다. 두 운영체제의 차이를 이해하고 장점을 살린다면 높은 작업효율을 얻을 수 있을 것이다. 문서의 편집과 보기는 윈도우즈의 GUI 가 편리하고 설계 도구의 실행은 WSL의 리눅스에서 운영하면 효과적이다. HDL 시뮬레이터를 비롯한 반도체 설계도구와 Xilinx FPGA 도구를 WSL 리눅스에 설치하려는 이유다. 더구나 usbipd[바로가기]는 윈도우즈의 USB 장치를 WSL로 가상 연결이 가능하게 해준다. 아듀이노 IDE에서 이미 경험 했듯이 리눅스 다운로드 케이블을 설치할 수 있고 Vivado에서 FPGA 디바이스 프로그래밍도 가능하다.

    [참고]
    1. SystemC: 아듀이노 보드 에뮬레이션 [바로가기]
    2. Install Cable Driver(Linux Only) [바로가기]

2. 설치 소프트웨어 다운로드 및 실행

아래 링크에서 Windows 및 Linux 용 웹 설치 실행 파일을 모두 내려받는다.

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools.html

Windows: AMD Unified Installer for FPGAs & Adaptive SoCs 2023.2: Windows Self Extracting Web Installer (EXE - 203.13 MB)

Linux: AMD Unified Installer for FPGAs & Adaptive SoCs 2023.2: Linux Self Extracting Web Installer (BIN - 270.64 MB)

윈도우즈용과 리눅스용을 모두 받도록 한다. 윈도우즈는 문서보기 DocNav와 FPGA 프로그래밍 다운로드 케이블만 설치한다. 리눅스에는 Vivado ML Edition 을 설치한다. 지원할 FPGA 제품군에 따라 용량이 커진다. Atrix 7 와 Ultrascale+을 선택하면 약 40기가바이트의 하드디스크를 필요로 한다.

설치가 완료되고 리눅스 명령줄에서 Vivado를 실행 하려면 환경 변수를 설정해 주어야 한다. Vivado 설치 장소에 여러 설정 변수들을 모아 놓았으므로 이를 불러온다.

    $ source /opt/Xilinx/Vivado/2023.2/settings64.sh

Vivado를 실행하면 Ubuntu 20.xx 의 경우 아래와 같은 오류가 나올 수 있다.

    $ vivado

    Vivado 2020.x - couldn't load file "librdi_commontasks.so":
        libtinfo.so.5: cannot open shared object file: No such file or directory

"libtinfo"라는 쉐어드 오브젝트(윈도우즈의 DLL에 해당)를 찾지 못했다는 뜻이다. 해결방법은 아래 링크를 참조한다.

https://support.xilinx.com/s/article/76585?language=en_US

    $ sudo apt update
    $ sudo apt install libtinfo-dev
    $ sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5

해당 오브젝트 파일이 이미 설치되어 있긴 한데 버젼별 실볼링크가 되어있지 않기 때문이다.

3. FPGA 프로그램 다운로드 케이블(WSL/리눅스)

대부분 하드웨어 다운로드 케이블(download cable)들은 실제로 USB 시리얼 변환 장치들이다. 시리얼 포트는 통신을 위한 장치로 유선전화 수발신을 목적으로 여분의 제어선을 두고 있다. 더이상 유선전화를 사용하지 않는 지금 이들 제어선을 FPGA 프로그램 다운로드용 JTAG으로 전용한다. 유닉스(리눅스)는 처음부터 다중 사용자의 동시 접속을 염두에 두었기에 터미널용 시리얼 포트는 매우 안정적인 장치(파일)로 발전해 왔다. 시리얼 포트는 장치 파일 /dev/ttyXX들로 존재한다. 아듀이노 프로그래밍 케이블의 장치 파일명은 /dev/ttyACM0 다.

윈도우즈의 USB 디바이스를 WSL 2에서 실행되는 Linux 배포판에 연결하는 USB/IP 오픈 소스 프로젝트인 usbipd-win[바로가기]를 설치하였다면 list 명령으로 공유 가능한 장치들을 확인 할 수 있다.

    PS C:\Users\goodkook> usbipd list

    Connected:
    BUSID  VID:PID    DEVICE                                          STATE
    2-3    2ea8:2124  USB Input Device                                Not shared
    2-4    046d:c077  USB Input Device                                Not shared
    2-9    8087:0a2b  인텔(R) 무선 Bluetooth(R)                        Not shared
    3-1    0403:6010  USB Serial Converter A, USB Serial Converter B  Not shared
    3-2    2341:003d  Arduino Due Programming Port(COM6)              Shared

BUSID 가 3-2인 장치는 아듀이노 프로그래밍에 사용될 장치로 공유(Shared)되어 있다. 하지만 디질런트(digilent.com)의 보드에 장착된 FPGA 프로그래밍을 위한 3-1번 장치는 윈도우즈와 WSL2 가상 리눅스와 공유 시켜야 한다.

    PS C:\Users\goodkook> usbipd bind --busid 3-1

공유된 USB 장치를 WSL에 붙이자.

    PS C:\Users\goodkook> usbipd attach --wsl --busid 3-1
    usbipd: info: ...... the device will be available in all WSL 2 distributions.
    usbipd: info: Using IP address 192.168.224.1 to reach the host.

리눅스에서 공유된 USB 장치의 목록을 보자.

    goodkook@GoodKook-Skull:~$ lsusb

    Bus 001 Device 005: ID 2341:003d Arduino SA Arduino Due Prog. Port
    Bus 001 Device 004: ID 0403:6010 FTDI, Ltd FT2232C/D/H Dual UART/FIFO IC

디질런트 FPGA 보드에 프로그래밍 용으로 FTDI 사의 듀얼 시리얼 포트 장치 FT2232C 를 사용하고 있다. Vivado의 하드웨어 매니져(Hardware Manager)를 통해 FPGA 프로그래밍 장치를 연결 할 수 있다.

4. 다운로드 케이블 드라이버 설치 및 실행(WSL/Linux)

Vivado를 설치하면 디질런트(Digilent) FPGA 보드의 다운로드용 케이블 리눅스 드라이버를 제공한다. 윈도우즈 응용 프로그램과 달리 리눅스용 드라이버는 수동 설치한다. 드라이버 폴더로 이동 후 install_drivers 를 실행한다. 관리자 권한으로 실행 되어야 한다.

    $ cd /opt/Xilinx/Vivado/2023.2/data/xicom/cable_drivers/lin64/install_script/install_drivers

    $ sudo ./install_drivers

    [참고] Install Cable Driver(Linux Only) [바로가기]

다운로드 하드웨어의 드라이버가 성공적으로 설치되었다면 FPGA를 프로그램 해보자. Vivado를 tcl 명령줄 모드로 실행 후 하드웨어 매니져를 열어 FPGA에 비트스트림을 다운로드하는 절차를 살펴보면 다음과 같다. 아래 과정은 다운로드 서버를 열고 FPGA를 프로그램을 보여주기 위해 Vivado를 TCL 명령줄로 실행한 절차다. GUI 모드로 실행하면 수월하다.

    goodkook@GoodKook-Skull:~$ vivado -mode tcl

    Vivado% open_hw_manager

    open_hw_manager: Time (s): cpu = 00:00:05 ; elapsed = 00:00:05 . Memory (MB): peak = 1338.672 ; gain = 0.023 ; free physical = 1006 ; free virtual = 18094

다운로드 하드웨어 서버에 연결한다. 프로그래밍 장치와 FPGA 보드가 현재 컴퓨터에 연결되어 있고 기본 포트번호는 3121 이다.

    Vivado% connect_hw_server -url localhost:3121 -allow_non_jtag
    INFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121
    INFO: [Labtools 27-3415] Connecting to cs_server url TCP:localhost:0
    INFO: [Labtools 27-3417] Launching cs_server...
    INFO: [Labtools 27-2221] Launch Output:

    localhost:3121

다운로드 하드웨어의 정보를 읽어보면 디질런트의 하드웨어가 연결되어 있다고 알려준다.다.

    Vivado% get_hw_targets

    localhost:3121/xilinx_tcf/Digilent/210319B9B157A

사용할 다운로드 하드웨어 지정,

    Vivado% current_hw_target [get_hw_targets */xilinx_tcf/Digilent/210319B9B157A]

    localhost:3121/xilinx_tcf/Digilent/210319B9B157A

다운로드할 비트 스트림의 속도를 15Mhz로 설정,

    Vivado% set_property PARAM.FREQUENCY 15000000 [get_hw_targets */xilinx_tcf/Digilent/210319B9B157A]

다운로드 하드웨어를 통해 연결된 FPGA 확인한다. Xilinx의 xc7a100 다.

    Vivado% open_hw_target

    Vivado% get_hw_devices xc7a100t_0

    xc7a100t_0

FPGA에 다운로드 할 비트스트림 파일을 "ALU_wrapper.bit"로 지정,

    Vivado% set_property PROGRAM.FILE {ALU_wrapper.bit} [current_hw_device]

FPGA를 프로그램 한다.

    Vivado% program_hw_device [current_hw_device]

    INFO: [Labtools 27-3164] End of startup status: HIGH

5. 결론

WSL(Windows Subsystem Linux)에 Xilinx FPGA 개발 소프트웨어 플랫 폼 Vitis-HLS와 Vivado 설치 방법을 설명했다. "내칩(My Chip) MPW" 처럼 칩 면적이 매우 제한된 소규모 반도체 설계에 굳이 FPGA를 활용한 에뮬레이션까지 동원할 필요가 있을까 라는 의문이 들 수도 있을 것이다. 게다가 C++/SystemC를 활용하여 시스템 수준 모델링과 테스트 벤치를 작성해야 한다면 과한 주장이라고 할지도 모른다.

디지털 시스템 반도체 설계 과정에서 검증이 차지하는 비중은 매우 높고 중요하다. 이때 FPGA를 활용한 고속 프로토 타이핑과 에뮬레이션의 중요성을 재삼 거론 할 필요도 없다. 굳이 '시스템'이 붙은 대규모 설계가 아니더라도 레이아웃을 생성하기 까지 거쳐야할 과정은 크게 다르지 않다. 비록 "내칩 MPW"를 통해 구현할 수 있는 기능의 규모는 작지만 '시스템' 반도체를 설계하고 검증하는 과정에서 시스템 수준의 방법론을 수행해볼 기회를 갖길 바란다.  매우 광범위한 반도체 산업 생태계를 크게 나눠 보자면 크게 물질, 공정, 설계, 검증, 장비, 후가공이라고 볼 수 있다. "내칩 MPW"의 최종 목표를 '레이아웃 제출'에 그치지 않고 컴퓨팅 언어로 기술하는 알고리즘, 하드웨어 기술(hardware description), 추상화 수준의 전환에 따른 검증, 시스템 수준 테스트벤치 작성, FPGA 에뮬레이션을 적용한 검증기법도 학습하는 기회가 되기 바라며 그 준비로 Xilinx의 FPGA 설계도구의 설치 방법을 다뤘다.


댓글 없음:

댓글 쓰기