기술노트20: 오픈-소스 설계 툴이 사전 설치된 WSL 가상 디스크 이미지 배포 및 사용법
목차:
1. 개요
2. WSL2 설치
2-1. 가상화 기술 활성화
2-2. 윈도우즈 기능 켜기/끄기
2-3. WSL2 갱신 설치
2-4. 우분투 리눅스 24.04 설치
2-5. WSL 가상 디스크 경로변경
2-6. WSL의 가상 디스크 옮기기
2-7. WSL 기본 사용자 설정
3. 설계툴이 설치된 가상 디스크 사용
3-1. 오픈-소스 툴이 설치된 가상 디스크 받기
3-2. 가상 디스크 변경
3-3. 외장 HDD 접근 제한
4. 예제 수행
4-1. 우분투 터미널 열기
4-2. 예제 디랙토리 복사
4-3. 예제: pong_pt1
5. 맺음말
CC-BY-NC
by GoodKook, goodkook@gmail.com
https://groups.google.com/g/mychip-on-mydesk
--------------------------------------------------------------
1. 개요
오픈-소스 반도체 설계 도구들은 리눅스 운영체제 환경에서 실행된다. 따라서 "내 칩 제작 서비스"의 MPW를 통해 내 칩을 제작하려면 리눅스를 설치해야 한다. 리눅스 운영체제는 가벼워서 구형 PC에서도 무난하다.
[주] 15년전에 출시된 듀얼코어 i3-2xx0M 나 i5-2450M 급 CPU에 8기가바이트 RAM과 128기가 바이트 정도의 PC(노트북)에서 최신 리눅스 커널 6(우분투 24.04 등)를 설치하고 오픈-소스 반도체 설계 도구들과 FPGA 벤더의 도구(자일링스 비티스 2025.1, 알테라 쿼터스 24.1, 고윈 EDA)들을 무리없이 실행 시킬 수 있다. 설계 규모에 달렸으나 Artix-7, Cyclone-IV/V, GW-25A 급 FPGA들의 P&R을 무리없이 해낸다.
[주] 오픈-소스 EDA 도구들은 소스로 제공되므로 ARM 기반의 리눅스에서도 도구들을 빌드하여 반도체를 설계할 수 있다. 심지어 오픈-소스 컴퓨터 "라즈베리 파이 5(2W에서도 가능하다고 함)"에서 리눅스를 설치하고 "내 칩"을 설계한 경우도 있다. 아래 링크 참조하자. 이런 호환성을 갖추기까지 재능을 아낌없이 바쳐준 모든 이들에게 감사와 경의를 표한다.
[출처] 라즈베리파이5를 NVMe SSD로 부팅하고 오픈소스 반도체설계도구 설치해 보기|작성자 chosim1762[링크]
리눅스를 설치할 별도의 컴퓨터를 마련하지 못했다면 윈도우즈 10/11의 WSL(Windows Subsystem for Linux)을 통해 리눅스를 실행 시킬 수 있다. 비록 가상머신에서 실행 되지만 성능 저하는 거의 없이 리눅스 응용 프로그램들을 실행 시킬 수 있다. 여기에는 자일링스 비티스, 알테라 쿼터스등 리눅스용 배포판들도 포함된다.
새로산 컴퓨터에 운영체제의 직접 설치가 당연했던 시절이 있었지만 지금은 거의 가전 수준이 되어버려서 그런 경우는 거의 없다. 하지만 자유로운 배포를 허용하는 까닭에 리눅스를 포함한 오픈-소스 반도체 설계 도구 사용을 지원하는 회사는 흔치 않다. 물론 비용을 지불하면 서비스를 받을 수 있지만 다소 높다. "알아서 스스로"라는 오픈-소스의 개념이 전문가(또는 경험자)의 영역으로 받아들여지고 있어 아쉽다.
세상에 하나뿐인 "내 칩"을 설계하고 "공짜로" 제작하려면 어쨌든 리눅스와 설계 도구들을 설치해야 한다. 반도체 설계가 다소 복잡한 과정을 거치는 만큼 필요한 도구들도 여럿이다. 리눅스라는 운영체제조차 생소할 입문자는 반도체 설계도구들을 모두 "알아서" 준비하려면 어려움이 있다. 이 문서는 이를 해소하고자 윈도우즈 10/11의 WSL 가상 머신 환경에 리눅스와 설계 도구들을 모두 설치한 가상 디스크 이미지를 배포하고 사용법을 설명한다.
배포하는 가상 디스크 이미지에 설치된 내용은 아래와 같다.
Linux: Ubuntu 24.04.1 [link]
z3: Problem Solver [link]
SDL2: Simple Direct Layer [link]
gsl: GNU Scientific Library [link]
graywolf: GrayWolf Auto Placer [link]
qrouter: Auto-Router [link]
irsim: IRSim Switching Level Simulator [link]
magic: VLSI Layout Tool [link]
klayout: Layout Tool [link]
netgen: NetGen Layout vs Schematic compare [link]
ngspice42: SPICE simulator [link]
xschem & GAW: XSchem Schematic entry tool [link] [link]
systemC: SystemC C++ Class Library(IEEE Std. 1666-2023) [link]
iverilog: iVerilog HDL simulator [link]
Verilator: Verilog to C++/SystemC converter [link]
gtkwave: gtkWave Digital waveform viewer [link]
yosys: Yosys RTL Synthesizer [link]
QFlow: An Open-Source Digital Synthesis Flow [link]
ETRI050 DK: ETRI 0.5um CMOS MPW Std-Cell Design Kit [link]
Visual Studio Code for Linux [link]
오픈-소스 반도체 설계 도구 설치 준비물:
Windows 10 또는 11이 설치된 PC*
* i5 급 CPU와 RAM 4기가 바이트 정도의 저사양 노트북 PC에서도 WSL은 무리없이 작동한다.
하드 디스크 용량: 128기가 바이트** 이상의 여유 공간 필요하다.
** 비티스 HLS와 쿼터스를 설치하는 경우의 용량이다. 단지 오픈-소스 설계 도구 만 설치하는 경우 64기가 바이트로도 충분하다.
노트북 PC에 용량이 부족하다면 외장 USB 하드디스크를 활용한다. 입문하는 단계에서는 주변에 노는 저장 매체를 활용 할 수 있다. USB 2.0 규격의 외장 저장 장치도 괜찮다. 마이크로 SD 카드 리더가 장착된 경우 128기가 바이트 마이크로 SD 칩을 사용해도 좋다. USB 메모리는 약간의 인내력이 필요하다. 처음 설치할 때 40기가 바이트 가량의 대용량 파일을 옮겨야 하므로 상당한 시간(1~2시간)이 걸린다는 점만 빼면 실사용에는 지장없다. 외장 저장매체를 새로 사야 한다면 USB 3.x 규격의 256기가 바이트 이상 용량을 가진 외장 하드 디스크를 추천한다. 마이크로 SD 칩의 경우 U3/Class10 이면 충분하다. 2025년말 현재 약 2만원 가량에 판매되는 제품이 있다.
WSL에 설치되는 리눅스는 기본적으로 명령줄 기반의 사용자 인터페이스다. 반도체 설계에 사용되는 설계 도구들 역시 문자기반 이거나 단순한 2D 그래픽으로 윈도우즈에 전혀 부담을 주지 않는다. 설치와 제거 또한 윈도우즈로부터 자유롭다. 윈도우즈와 얽히지 않고 언재든 재설치 할 수 있다. 단, 자신의 자료 백-업은 잊지말자.
[참고] WSL/Ubuntu 재설치 [링크]
2. WSL2 설치
2-1. 가상화 기술 활성화
요즘 CPU는 가상화(Virtualization)을 모두 지원 한다. 간혹 해당 기능을 꺼놓은 경우가 있다. '작업 관리자'에서 확인 할 수 있다.
만일 가상화 기능이 꺼져 있는 경우 컴퓨터의 BIOS 설정에서 가상화 기술(Virtualization Technology, VT-x) 항목을 활성화 한다.
2-2. 윈도우즈 기능 켜기/끄기
Windows 기능 켜기/끄기(Windows Features) 창을 열어 아래 두가지 기능을 켠다.
- Windows 하위 시스템 리눅스 (Windows Subsystem for Linux)
- 가상머신 플랫 폼(Virtual Machine Platform)
2-3. WSL2 갱신 설치
윈도우즈를 재 부팅 후 파워쉘(Windows Power Shell)을 관리자 권한으로 열어 아래 명령 실행한다.
PS> wsl --update
PS> wsl --set-default-version 2
[주] 윈도우즈 파워 쉘(Windows Power Shell)이 7.5 이하라면 최신 버젼을 설치한다.
2-4. 우분투 리눅스 24.04 설치
마이크로소프트 스토어에서 Ubuntu를 검색하여 24.04.1 LTS 를 다운 받아 설치한다.
터미널 창에 우분투 리눅스의 기본 사용자를 지정하라는 프롬프트가 뜨면 아이디와 비밀번호를 입력한다. 아래 예는 기본 사용자 아이디를 mychip 으로 하였다. 비밀번호도 user name 과 동일하다.
Please create a default UNIX user account.
The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: mychip
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
WSL에 우분투 리눅스의 설치가 성공적으로 완료됐다.
2-5. WSL 가상 디스크 경로변경
윈도우즈와 리눅스는 파일 시스템의 호환성이 없다. 리눅스는 가상 디스크(.vhdx)에 설치되고 네트워크 드라이브로 윈도우즈 파일 탐색기에 연결된다. 가상 디스크는 기본적으로 C: 디스크에 만들어 진다. 위치는 아래와 같다.
%LocalAppData%\Packages\<Distribution_Package_Name>\LocalState\ext4.vhdx
설계 도구들을 설치하고 운용하다보면 가상 디스크의 크기가 증가한다. 오픈-소스 EDA 도구들과 아듀이노 IDE/CLI, FPGA 개발 도구들(Quartus, Vitis-HLS)을 모두 설치하면 120GByte를 넘긴다. 하드 디스크의 용량이 제한적인 랩-톱 컴퓨터를 사용한다면 USB 외장 HDD에 옮겨도 좋다. 리눅스 운용체제와 반도체 설계 도구들은 가볍기 때문에 USB 3.x 에 부착된 외장 HDD로도 충분히 작동한다. 약간의 인내심이 필요하긴 하다.
주의! 가상 디스크는 수많은 리눅스 파일들이 담겨 있는 대용량 파일이다. 파일관리의 안정성을 위해 외장 디스크는 반드시 NTFS로 포맷되어야 한다.
2-6. WSL의 가상 디스크 옮기기
외장 HDD 가 D: 로 할당 되었을 경우를 상정하고 설명한다.
a. 파워 쉘 명령창을 열고 외장 HDD 에 WSL2 라는 폴더를 생성한다.
C:\> d:
D:\> mkdir WSL2
b. 아래 깃 허브에서 Move-WSL 스크립트를 내려 받는다.
https://github.com/pxlrbt/move-wsl
zip 압축으로 받았다면 적당한 위치에 압축을 풀어 놓으면 move-wsl/move-wsl.ps1 가 있을 것이다.
c. 관리자 권한으로 파워 쉘을 열고 WSL을 중지 시킨 후 스크립트를 실행한다.
PS> wsl --shutdown
PS> cd move-wsl
PS> .\move-wsl.ps1
만일 스크립트 실행 권한이 없다는 메시지를 보게 되면 다음과 같이 보안을 풀어준 후 스크립트를 다시 실행한다.
PS> Set-ExecutionPolicy bypass
PS> D:\WSL2\move-wsl> .\move-wsl.ps1
현재 설치된 WSL의 리눅스 배포판이 나열될 것이다. 옮길 리눅스를 선택한다.
Getting distros...
Select distro to move:
1: Ubuntu-24.04
1
옮겨갈 위치를 입력한다. 아래의 예는 외장 HDD의 드라이브가 D: 다.
Enter WSL target directory:
D:\WSL2
Move Ubuntu-22.04 to "d:\WSL2"? (Y|n): Y
Exporting VHDX to "d:\WSL2\Ubuntu-24.04.tar" ...
Export in progress, this may take a few minutes..
The operation completed successfully.
Done!
가상 디스크를 옮긴 후 root로 로그인 될 경우 기본 사용자 변경 절차를 따른다.
2-7. WSL 기본 사용자 설정
WSL에 우분투 리눅스를 설치 후 터미널을 열었을 때 root 로 로그인 된다면 /etc/wsl.conf 파일을 vi 로 열어 아래의 내용을 추가해 준다.
[user]
default=mychip
[interop]
appendWindowsPath=false
[interop] 은 리눅스 환경 변수 PATH에 윈도우스 실행 경로를 덧붙이지 않도록 하기 위한 것이다.
3. 설계툴이 설치된 가상 디스크 사용
WSL의 리눅스가 설치된 가상 디스크의 기본 파일명은 ext4.vhdx 다. 위의 "가상 디스크 경로 변경" 절차에 따라 옮겨진 폴더(D:\WSL2)에 ext4.vhdx 가 있다. 이 가상 디스크 파일은 파일명을 바꿔 백-업 해 두거나 삭제해도 좋다.
3-1. 오픈-소스 툴이 설치된 가상 디스크 받기
리눅스와 오픈-소스 반도체 설계 도구들이 설치된 가상 디스크를 아래 링크에서 내려받는다.
https://drive.google.com/drive/folders/1Zwdwx_U4hp4pQYhlv8dk6d5GHuZ2uEXe?usp=sharing_eip&ts=6952e24e
압축된 파일은 Archive/ext4_mychip.zip 로서 용량이 16.5기가 바이트에 달한다. 네트워크의 사정에 따라 1시간은 족히 걸릴 것이다. "내 책상 위에서 내 칩(My Chip on My Desk)"을 설계할 꿈을 꾸면서 여유를 가지고 기다린다. 도구들이 미리 설치된 가상 디스크 파일은 "내 칩 제작 서비스"/디자인 킷 사용자 그룹 회원에게 제공된다. 아래 링크의 사용자 그룹에서 신청하면 가입할 수 있다.
"내 칩 제작 서비스"/"반도체 설계 교실" 오픈-소스 디자인 킷 사용자 그룹
MyChip-on-MyDesk [link]
[주] 오픈-소스 설계 도구들은 디자인 킷의 깃허브 저장소에서 받아 개별적으로 설치 할 수 있다.
ETRI 0.5um CMOS MPW Std-Cell Design Kit [link]
내려받은 압축 파일 ext4_mychip.zip 을 앞서 ext4.vhdx 가 옮겨갔던 디렉토리에 푼다. 가상 디스크의 파일명은 ext4_mychip.vhdx로 크기는 약 44기가 바이트 가량이다.
3-2. 가상 디스크 변경
WSL이 사용할 가상 디스크를 오픈-소스 도구들이 설치된 가상 디스크로 변경한다. 레지스트리에서 아래 항목을 찾는다.
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss]
[UUID] 키 아래에 BasePath, VhdFileName 키 값을 변경하면 내려받아 풀어놓은 가상 디스크 파일을 사용할 수 있다. 외장 HDD의 D:\WSL2 경로에 가상 디스크 파일명을 ext4_mychip.vhdx 로 변경한 예는 아래와 같다.
3-3. 외장 HDD 접근 제한
윈도우즈 파일 탐색기는 WSL의 가상 디스크를 원격 연결 한다. WSL의 가상 디스크를 외장 HDD로 옮긴 후에 아래와 같은 윈도우즈 파일 탐색기 오류가 나는 경우가 발생한다.

NTFS의 보안 기능으로 인해 외장 HDD에 접근 할 수 있는 권한이 제한되어 있어서 발생한다. 외장 HDD의 보안 속성을 모든 권한으로 바꿔준다.
4-1. 우분투 터미널 열기
리눅스의 사용자 인터페이스의 기본은 명령줄이다. 우분투 터미널을 열면 아래와 같은 명령줄 프롬프트가 나타난다.
mychip@DESKTOP-XXXXX:~$
사용자 계정명은 mychip, 리눅스 서버 이름은 DESKTOP-XXXXX, 현재 위치한 디렉토리는 ~ 다. ~ 는 사용자의 홈 디렉토리를 뜻한다. 파일 시스템에서 사용자의 정식 경로명은 /home/mychip 이다. $ 는 리눅스 배쉬 쉘의 프롬프트 문자다.
4-2. 예제 디랙토리 복사
미리 받아놓은 디자인 킷의 예제를 적당한 위치에 복사한다. 편의상 작업 디렉토리를 MyChip_Work로 한다.
~$ mkdir MyChip_Work
~$ cd MyChip_Work
~/MyChip_Work$ cp -r ~/ETRI050_DesignKit/Projects .
cp 는 복사(copy) 명령 cp 에 -r 옵션을 붙였다. 하위 디렉토리까지 모두 복사해온다.
~/MyChip_Work$ cd Projects
~/MyChip_Work/Projects$ ll
total 16
drwxr-xr-x 4 mychip mychip 4096 Dec 30 12:43 .
drwxr-xr-x 3 mychip mychip 4096 Dec 30 12:43 ..
drwxr-xr-x 6 mychip mychip 4096 Dec 30 12:43 HLS
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 RTL
4-3. 예제: pong_pt1
디렉토리 Projects 에 HLS와 RTL 이 있다. 각각 고위합성 예제 HLS와 베릴로그 예제 RTL 이다. 아직 HLS 도구들을 설치를 하기 전 이므로 RTL 디렉토리로 간다.
~/MyChip_Work/Projects$ cd RTL
~/MyChip_Work/Projects/RTL$ ll
total 28
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 .
drwxr-xr-x 4 mychip mychip 4096 Dec 30 12:43 ..
drwxr-xr-x 6 mychip mychip 4096 Dec 30 12:43 ALU8_Mult
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 apple_1
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 CPU_6502
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 FIR_PE
drwxr-xr-x 6 mychip mychip 4096 Dec 30 12:43 pong_pt1
여러 예제 중 1인 탁구 게임을 수행해 본다.
~/MyChip_Work/Projects$ cd pong_pt1
~/MyChip_Work/Projects/RTL/pong_pt1$ ll
total 68
drwxr-xr-x 6 mychip mychip 4096 Dec 30 12:43 .
drwxr-xr-x 7 mychip mychip 4096 Dec 30 12:43 ..
drwxr-xr-x 4 mychip mychip 4096 Dec 30 12:43 emulation
drwxr-xr-x 6 mychip mychip 4096 Dec 30 12:43 ETRI050
drwxr-xr-x 2 mychip mychip 4096 Dec 30 12:43 pong_pt1
drwxr-xr-x 3 mychip mychip 4096 Dec 30 12:43 simulation
-rw-r--r-- 1 mychip mychip 530 Dec 30 12:43 env_settings
-rw-r--r-- 1 mychip mychip 22319 Dec 30 12:43 HOW-TO.txt
-rw-r--r-- 1 mychip mychip 13777 Dec 30 12:43 Makefile
Makefile이 있다. 반도체 설계 플로우의 모든 과정이 여기에 기술되있다. Makefile은 개발자라면 평생 끼고 살게될 make 유틸리티의 스크립트다. 지금은 맛보기 이므로 따라해보자.
먼저 환경 설정,
~/MyChip_Work/Projects/RTL/pong_pt1$ source env_settings
#*******************************************************************
#* Environment setting for RTL, Co-Simulmatio/Emulation & ETRI050
#*******************************************************************
Setting Environment variables as follows;
PROJECT_DIR=/home/mychip/MyChip_Work/Projects/RTL/pong_pt1
TOP_MODULE=pong_pt1
HW_STYLE=NONE
MODE=CA
MI=PI_PICO
$ make
RTL Project: pong_pt1
TOP_MODULE=pong_pt1 VCD_TRACE=[YES]|NO make co-sim
TOP_MODULE=pong_pt1 make wave
make emulation
make ETRI050
CC BY-NC, by GoodKook, goodkook@gmail.com
이제 make 유틸리티를 사용하여 예제를 수행할 준비가 되었다. 아래와 같이 따라해보자.
$ make co-sim
베릴로그 RTL 기능 시뮬레이션이다. 초당 10여 프레임(64x128 픽셀)씩 생성되는 그래픽 게임기의 화면을 만들어내는 디지털 회로의 시뮬레이션을 디지털 파형으로 확인하기는 불가능하다. 그래픽으로 확인한다. 탁구대와 공의 움직임을 볼 수 있다.
$ make ETRI050
베릴로그 RTL을 ETRI050 노드로 합성,
$ make synth_ETRI050
네트리스트 타이밍 시뮬레이션,
$ make sim_ETRI050
기능 시뮬레이션에 비해 매우 느리게 작동할 것이다. 이 시뮬레이션을 수행 하는 중에 디지털 동작을 VCD로 기록한다. 방대한 량이 만들어 지게 되므로 너무 오랫동알 시뮬레이션을 수행하지 않도록한다. VCD 파형을 보려면,
$ make -C ETRI050/simulation wave
시뮬레이션 검증이 완료되었으므로 이제 본격적으로 도면 그리기다. 표준 셀 자동 배치와 배선,
$ make pnr_ETRI050
레이아웃을 보자.
$ make layout_ETRI050
5. 맺음말
소프트웨어 개발에 사용되는 각종 컴파일러 도구들의 자동화는 눈부시다. 반도체 설계 기술 역시 엄청난 발전을 거듭하여 컴퓨팅 언어로 기술된 기능을 디지털 반도체 회로로 바꿔내는 일은 거의 자동화 되었다. 반도체는 한번 공정이 이뤄져 칩이 생산되면 수정은 불가하다. 비용이 많이 들고 제작기간이 긴 반도체 부품은 공정이 시작되기 전에 엄청난 검증과정을 거쳐야 한다. 무엇을 기술할 것인지 어떻게 검증할 것인지에 대한 답을 해야한다. "반도체 설계 교실"에서 이에 대한 답을 찾아볼 것이다.




댓글 없음:
댓글 쓰기