2024년 5월 18일 토요일

"MPW에 지원 하려는데 무슨 무슨 설계 도구 지원 되나요?"라는 질문을 하기전에,

"MPW에 지원 하려는데 설계 도구 지원 되나요?"라는 질문을 하기전에,

반도체 산업이라 하면 떠오르는 정형이 있다. 온갖 장치들과 운송 장비들이 누비는 깔끔한 공장 내부와 그 사이에서 온몸을 하얀 방진복으로 두른 노동자들의 모습은 어쩐지 환상적이다. 자동화된 기계들이 착착 움직이는 모습, 거기에 더해 몽환적인 조명까지 마치 SF 영화의 미래세계를 보는 것 같다. 어디 반도체 산업 뿐이겠는가. 화면에 소스 코드 리스트를 띄워놓고 심각한 표정을 짓는 프로그래머, 칠판에 난해해 보이는 기호들을 나열해 놓고는 서로 풀어보라며 설전을 벌이는 과학자들의 모습을 보며 멋지다는 생각을 해봤을 것이다. 저 멋진 화면에 끼고 싶다는 생각에 '이공계'를 선택하고 이글을 쓰고 있다. 객쩍은 이야기로 시작하는 이유는 그 정형화된 모습은 산업 전반에 극히 일부분이라는 점을 말하고 싶기 때문이다. 해당 분야에 아무것도 모르는 방송 종사자, 영상 제작자들이 현란한 화면이랍시며 골라내 보여준 탓에 세뇌됐다.

반도체 강국이라는 우리나라는 정부 차원에서 '내칩 MPW' 사업을 진행 하고 있다. 무료로 학생들의 설계를 받아 반도체를 제작해 준다고 한다. 사업 공고문을 보면 '아날로그' 기반 CMOS 직접회로를 무료로 제작해 준단다. CMOS 공정에 굳이 '아날로그'만 된다는 법은 없지 않을까 싶어 문의해 봤다. 회로야 아날로그가 되었든 디지털이든 CMOS 회로를 그리고 레이아웃 GDS 제출하면 되겠느냐고 문의 했더니 그렇단다.

'내칩 MPW'는 회로도면을 그려오면 반도체로 제작해 주는 사업이다. 설계자가 알아서 그려오라는 말이다. 도면을 그리려면 도구(소프트웨어)와 기초자료가 있어야 한다. 공정의 물리적 특성을 보여주는 기초자료는 제공되지만 어떤 도구를 쓸지는 설계자의 선택이다. 설계를 위해 선택한 도구에서 요구하는 라이브러리를 준비하는 것도 큰 일꺼리다. 설계자는 자신이 선택한 도구에 맟춰 공정 기초자료를 기반으로 라이브러리를 제작해야 한다. 제조공장에서 다수의 설계도구마다 요구하는 양식의 라이브러리(또는 환경설정)를 제공하기는 곤란하지 않은가. 그것도 무료로 칩을 제작해 준다는데 툴마다 다를 디자인 킷(상당한 비용이 소요됨)까지 마련해 달라고 하는 것은 무리다.

디지털 회로로 MPW에 지원하기 위해 회로를 그리기로 하고 찾아보니 하드웨어 언어 합성기를 비롯하여 다양한 도구가 필요하다는데 가격이 만만치 않다. 다행히 '오픈-소스' 도구들이 있었다. 이들의 사용료 역시 무료지만 '내칩 MPW'의 공정에 맞는 라이브러리는 없다. 어쨌든 설계도구도 무료, 제조도 무료다. 나만의 반도체 칩을 가져보겠다는 꿈을 이루려는데 라이브러리가 없다고 포기할 수는 없기에 만들기로 했다.

알고리즘을 묘사한 기능은 높은 추상화 수준의 컴퓨팅 언어로 기술하고 이를 훨씬 낮은 수준의 회로도면으로 바꿔야 한다. 수천개의 트랜지스터로 구성될 회로도를 한번에 그려낼 자신이 없으므로 자동화 도구를 쓰기로 한다. 십여개 미만의 트랜지스터 회로는 손수 그려 표준 셀 라이브러리로 준비했다. 이를 합성기라는 도구에 연동 시키려니 여간한 일이 아니다. 트랜지스터 수준의 회로도를 컴퓨팅 언어 컴파일러(합성기라고 부르는)에 연동시키려면 '리버티(Liberty)'라는 표준 셀 라이브러리 정의 파일이 있어야 한단다. 이에 더하여 네트 시뮬레이션용 베릴로그(Verilog) 모델이 필요하다. 합성기도 소프트웨어 이므로 버그가 없다고 확신할 수 없으니 추상화 수준의 변경이 발생하면 반드시 검증절차를 거쳐야 하기 때문이다. 그뿐인가, 표준 셀 들의 자동 배치와 배선에 필요한  라이브러리 교환 LEF(Library Exchange Format) 파일(자동 배선 규칙과 표준 셀의 기하학적 정의, footprint), 도면 자동 생성용 후 DRC(Design Rule Check)와 LVS(Layout-vs.-Schematic) 검증을 위한 표준 셀의 회로도(SPICE netlist)들이 필요하다. 이들을 한데 모아 디자인 킷(Design-Kit)이라 한다.

디자인 킷 만들기에 필요한 지식은 대학의 전공수업에서 이미 다 배웠다. 전자회로, 논리회로 설계와 SPICE 시뮬레이션, 반도체 공정, VLSI 설계, 컴퓨팅 언어와 컴파일러, 하드웨어 언어와 합성기 등등. 공짜로 나만의 칩을 만들어 준다는데 이정도 수고는 해야하지 않겠나? 몇달간의 노력끝에 마침내 디자인 킷을 만들어 냈다. 이를 활용하여 레이아웃을 생성하여 공정에 제출하기에 이르럿다. 2023년 첫 내칩 MPW에 참여한 학생의 소감을 들어보자. 2024년 하계 전자공학회 학술대회에서 특별 세션으로 구두발표 예정이다.

"MPW 프로젝트 소감/지하은(경희대학교 전자공학과 3학년)"

수개월 후 마침내 공정을 마친 칩을 제공받았다. 처음 해보는 칩이라 아주 간단한 설계여서 공간이 남아 그림을 넣었다. 칩에 고유의 표시를 넣는 경우가 종종 있다. Chip Art 혹은 Chip Graffiti라고 하는데 실리콘 위의 부활절 달걀인(Easter Egg) 셈이다. 누가봐도 세상에 하나뿐인 내 칩(My Chip)이다.

테스트를 해보니 정말 아쉽게도 칩은 동작하지 않았다. 공정을 해준 ETRI의 도움을 받아 레이아웃을 분석해 보니 디자인 킷에 실수가 있음을 발견했다. 설계물의 코어는 자체 제작한 디자인 킷을 썼으나 입출력 패드는 공정 측에서 PDK의 일부로 라이브러리를 제공 받았는데 GDS 형식이다. 오픈-소스 레이아웃 도구 Magic 에서 이를 들여와야 해서 변환용 테크 파일을 작성했는데 여기에 오류가 있었다.

'내칩 MPW'의 공정은 2중 폴리실리콘에 3층 메탈이다. 대개 Poly2는 아날로그 회로를 꾸밀때 컨덴서와 저항의 용도로 사용한다고 배웠기에 그런줄 았았다. 그런데 디지털 입력 패드 셀 PIC 에 Poly2가 입력 전류 제한용 저항으로 사용되었다는 것을 미쳐 확인하지 못했기에 변환 룰에 Poly2 레이어를 빼먹었던 것이다. 나중에야 제공된 GDS를 KLayout(이역시 오픈소스다) 도구로 들여다보니 분명히 13번 레이어가 사용된 것을 확인했다.

  

실수한 테크 파일을 통해 PIC 를 읽었더니 Poly2 레이어가 빠진채다.

변환 룰을 수정하고 읽었더니 Poly2 저항이 제대로 보인다. 그런데 하필  레이어 이름이 pseudo_rpoly2 라니.

[주] 수정된 디자인 킷, https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git

실리콘 검증까지 마친 디자인 킷을 만들겠다는 포부에 다소 '스크래치'가 가긴 했으나 첫술에 배부를 수는 없는 노릇이니 될때까지 시도해 보기로 한다.

반도체 업계에서 활동하는 현직 베테랑 중에 표준 셀을 그리고, 디자인 킷을 제작하고, RTL 설계에서 합성기, 레이아웃 마침내 테스트까지 '내칩'을 제작해본 경험을 가진 설계자는 많지 않다. 반도체 산업의 광범위한 생태계에서 한 부분에 종사할 따름이다. '내칩 MPW' 사업은 '풀 커스텀'으로 제출된 도면을 받아 공짜로 칩을 제작해 준다. 설계도구의 디자인 킷은 각자 알아서 마련해야 한다. 그러려면 반도체 설계 자동화 도구들의 속내를 들여다 보게된다. 여러 추상화 단계마다 제각각인 오픈 소스 도구들 사이에 호환성 검증, 파일 변환 등의 작업이 필요할텐데 일일이 수정할 수는 없는 노릇이다. 이를 간편히 수행할 각종 스크립트나 유틸리티를 작성하게 되는데 쉘 스크립트, python, Tcl 등 익히 알고있는 수단을 동원하자. 일례로, 적층된 비아(stacked via)는 흔히 허용되지만 '내칩 MPW'의 공정은 절대 금지되어 있다. 경희대학교 디자인 킷에는 자동 P&R로 생성된 레이아웃에서 이를 찾아내는 파이썬 유틸리티를 포함해 여러 스크립트를 가지고 있다. 디지털 칩은 다수의 입출력 핀들이 사용된다. '내칩 MPW'에서 제작해주는 칩은 20여개의 핀에 불과 하다지만 막상 이를 테스트 하려면 막막하다. 오픈 소스 마이크로 컨트롤러 보드 '아듀이노 메가'는 40여개의 디지털 핀을 사용할 수 있다. 이를 이용하면 다신호 프로그래머블 시그널 생성기 및 로직 아날라이져를 저렴하게 꾸밀 수 있다. 설계의 검증을 위해 사용한 테스트 벤치를 칩 테스트 용도로 사용할 수 있다. 요즘 하드웨어 시뮬레이터는 C++/SystemC로 작성한 함수를 호출 할 수 있는 API들이 필수다. 컴퓨터의 주변 장치에 접근하는 방법은 대부분의 운영체제에서 허용하기 때문에 C++ 함수에서 구동 소프트웨어를 호출하면 아듀이노 보드를 통해 '내칩'과 신호를 주고 받을 수 있다. 테스트벤치 재활용을 칩 테스트까지 확장해 볼 수 있다. 규모는 비록 작지만 반도체 설계의 전과정을 수행해 볼 수 있다. 이는 반도체 산업의 전분야를 체험해 봤다고 주장해도 무리는 아니다.

[주] 오픈 소스 도구들의 디자인 킷 활용한 시뮬레이션, Arduino-FPGA 에뮬레이션, 레이아웃 생성, 패드 프레임 등 일련의 실습을 수행 할 수 있도록 예제가 준비되어 있다. https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--ALU8.git

'내칩 MPW'는 공짜로 칩을 만들어 준다하고 설계도구는 오픈-소스를 공짜로 쓸 수 있다. 이 얼마나 설레지 않을 수 있으랴. 디자인 킷 정도는 만들어 쓰자. 그대신 책임은 스스로 진다. 여기서 책임이란 곧 돈이다. '내칩 MPW'는 이 비용이 무서워 감히 못해볼 짓을 공짜로 해볼 수 있는 천재일우의 기회를 제공한다. 전자공학을 배우며 이제껏 주워들은 것들을 총동원하여 엮을 기회다. 구슬이 서말이라도 꿰어야 보배라고 하지 않던가!



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 설계도구의 설치 방법을 다뤘다.


2024년 5월 8일 수요일

"신경망(뉴럴 네트워크)": "뉴로모픽 컴퓨팅"의 "Hello, World!"

"신경망(뉴럴 네트워크)": "뉴로모픽 컴퓨팅"의 "Hello, World!"

1. 개요
2. "뉴로모픽 컴퓨팅", 생물학적 뇌를 모방하려는 시도
3. 국내 디지털 뉴로모픽 반도체 연구
4. 신경망 (Neural Network): 인공지능의 "Hello, World!"
5. C++ 크래스 로 구현한 신경망

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

1. 개요

요즘 눈만뜨면 마주치는 '인공지능'. 누구나 이야기 하지만 이를 공부하려면 무엇부터 시작해야 할지 난감하기 이를데 없다. 인간 뇌의 기작을 흉내낸다는 뉴로모픽 컴퓨팅(Neuromorphic Computing)은 전통적인 디지털 계산기는 물론 아날로그 회로를 이용해 다양한 방법으로 구현하는 시도(연구)가 이뤄지고 있다[참고].

[출처] ‘뇌 구조의 반도체로 만들다’ 뉴로모픽 반도체의 등장, https://news.skhynix.co.kr/post/jeonginseong-column-ai-6

신경망은 인공지능의 첫걸음에 해당한다. 전통적 폰 노이만 구조 컴퓨터로 신경망을 구성했을 때의 문제점으로 엄청난 계산량과 그로인한 과도한 전력 소모라 할 것이다. 이를 극복할 요량으로 시스톨릭 어레이 같은 병럴처리 구조를 취하며 계산 정밀도 낮추기등의 연구가 활발하다[Binary Neural Network].  신경망을 디지털 컴퓨터로 구현할 때 가장 큰 문제는 수많은 뉴런의 연결을 구성하는 일이다. 폰노이만 구조의 컴퓨터를 사용하는 경우 배열형 자료를 사용하여 쉽게 신경망을 구성할 수 있다. 다만 엄청난 메모리 접근이 따라야 하므로 빠른 클럭의 고성능 컴퓨터가 필요하며 이는 전력 소모의 원인이 된다. 배열형 병렬처리 구조를 채택하여 뉴런(곱셈과 누산)전용의 처리장치에 대규모 지역 메모리를 두는 구조의 연구[Wafer Scale Computing]가 이뤄져 활용되고 있다[CPU,  GPU, NPU, TPU, ...... TPU v4A Brief Guide of xPU for AI Accelerators]. 하지만 연산기 사이의 연결을 근본적으로 해결하지 못한다.

어쨌든, 본격적인 인공지능 컴퓨팅의 연구에 앞서 신경망에 대한 이해를 높여보자. "Hello, World!"는 컴퓨팅 언어를 배울때 제일 먼저 해보는 예제다. Hello, world!를 출력하는 것이 프로그래밍 언어를 배우는 첫 번째 단계로 일종의 암묵적인 룰이 되었다. 그야말로 프로그래머들에게는 국룰인 단어이다[출처]. "Hello, world!"를 출력 했다는 뜻은 컴파일 도구의 기초적인 사용법을 알며 아울러 표준 입출력 장치를 다룰 수 있다는 의미가 담겨있다. 마이크로 컨트롤러를 처음 익힌다거나 FPGA와 HDL의 첫 예제로 LED 를 깜빡이게 하는데, 'Hello, World!'격에 해당한다고 하겠다. 인공지능의 "Hello, World!"에 해당하는 예제가 바로 신경망이다. C++ 크래스로 구현한 인공지능 신경망의 예제를 소개 한다. 신경망 크래스에 학습 함수에 if 문장이 한개도 나오지 않는다. 무작위 숫자에서 시작하여 의미있는 연결 강도(웨이트)로 접근해 가는 과정을 '학습'이라 한다. 이 예제는 C++의 크래스와 템플릿의 공부에 매우 훌륭한 교재 이기도 하다.

2. "뉴로모픽 컴퓨팅", 생물학적 뇌를 모방하려는 시도

고전적인 컴퓨팅 방식에 한계(어떤?)가 와서 이제 인간의 뇌가 행동하는 방식을 반도체로 구현한 Neuromorphic Computing이 AI의 대세라는데 도데체 그게 뭔지 궁금하다면 아래 동영상을 보자. 


Neuromorphic Computing Is a Big Deal for A.I., But What Is It?

인텔의 엔지니어가 이야기 하는 뉴로모픽 컴퓨팅도 들어보자. 전기적 신호를 제어하여 인간의 뇌를 모방하려는 시도에서 시작 되었지만 엉뚱(?) 하게도 생물학적 뇌와 다른 방향으로 발전해 왔다. 오늘날 최신 '전통적 컴퓨터'는 생물학적 뇌의 '학습'과는 매우 멀다. 정밀한 계산을 빠르게 수행하는 목표에 충분히 도달하자 이제 뇌처럼 작동하는 전자기기를 만들려고 한다. 복잡한 계산을 빠르고 정확하게 수행하기에 이어 급기야 '생각하기'도 기계에 맞기고 싶어졌나보다. 인간의 수고를 기계에 맞기는데 익숙해진 인간은 이제 '생각'하기도 귀찮아졌나? 단순한 계산과 학습행동은 기계에 맞기고 좀더 높은 수준의 '생각'을 하자고 한다. 그 '생각'이 온통 '쉽게 돈벌기'에 쏠려 있지만 말이다.


Architecture All Access: Neuromorphic Computing Part 1

전통적인 컴퓨터는 한계에 도달했다. 2그램 밖에 안되는 새의 뇌는 20밀리와트의 에너지를 쓰면서도 하늘을 누빈다. 하늘을 날기는 커녕 도로위에서 움직이는 '자율주행'을 수행하는 전통적인 컴퓨터는 '학습(train)'과 '행동반응(inference)'에 관한한 새만도 못하면서 너무나 많은 에너지를 소모하고 있다. 전통적인 컴퓨터의 한계를 벗어나려고 생물학적 뇌를 들여다보고 새로운 구조를 가져야 한다는 것을 깨닳았다.


Architecture All Access: Neuromorphic Computing Part 2

3. 국내 디지털 뉴로모픽 반도체 연구

국내 여러 대학교와 연구소, 반도체 기업등에서 '인공지능 반도체'를 연구 한다고 한다. 그중 디지털 계산기 방식의 연구가 이뤄지고 있다니 들어보자.


[서울대 AI 연구원] 뉴로모픽 컴퓨팅을 활용한 차세대 컴퓨팅 시스템(지능정보융합학과 전동석 교수)


뇌를 닮은 반도체? 뉴로모픽 시스템! / 샤연소개


삼성, SK도 만든다는 그 반도체 인간 뇌 모방 '뉴로모픽 칩'


"뉴로모픽 하드웨어 디자인" - 박종길박사, KIST

4. 신경망 (Neural Network): 인공지능의 "Hello World!"

동영상에서 가장 많이 등장하는 신경망(Neural Network)은 인공지능 컴퓨팅의 첫걸음이라 할 수 있다. 필기체 숫자 인식의 수행을 새로 개발한 인공지능 컴퓨터의 성능을 측정하는 척도로 삼고 있다. 그렇다면 신경망이 뭔지 알아보자.


But what is a neural network? | Chapter 1, Deep learning

동영상의 내용을 글로 읽어보기 바란다.

https://www.3blue1brown.com/lessons/neural-networks

내용중 아래 내용이 눈길을 끈다.

Somehow identifying digits is incredibly easy for your brain to do, but almost impossible to describe how to do. The traditional methods of computer programming, with if statements and for loops and classes and objects and functions, just don’t seem suitable to tackle this problem.

필기한 그림을 보고 인간의 뇌에서 숫자를 간단하게 인식(사실은 분류!)하지만 어떻게 그렇게 수월하게 해내는지 모른다. 전통적인 컴퓨터 프로그래밍 기법, if 문장이나 for 반복문, 객체 지향적 프로그래밍 따위로 될일이 아니라는 것을 알고 있다.


Gradient descent, how neural networks learn | Chapter 2, Deep learning

이번에도 글로 읽어보자.

https://www.3blue1brown.com/lessons/gradient-descent

눈길을 끄는 문장이 나온다.

To start things off, initialize all the weights and biases to be random numbers. This network will perform horribly on the given training example since it’s just doing something random.

학습하기 전 각 뉴런 사이의 가중치는 '무작위' 숫자로 시작한다. 엄청난 계산을 수행 한 끝에 마침내 숫자를 구분할 능력을 가지게 된다. 필기한 화상을 구분 한다는 것이 '지능' 이라 할 수 있을까? 어쨌든 이 신경망은 '무작위' 숫자에서 스스로 의미있는 '능력'을 가진 숫자로 변한다. 이를 두고 네트워크가 '알아서' 학습했다는 것이다. 


What is backpropagation really doing? | Chapter 3, Deep learning


Backpropagation calculus | Chapter 4, Deep learning

5. C++ 크래스 로 구현한 신경망

인공지능의 "Hello, World!"에 해당하는 예제가 바로 신경망이다. 아래에 소개한 C++ 크래스로 구현한 인공지능 신경망의 예제를 읽어보기 바란다. 신경망 크래스의 학습 함수에 if 문장이 한개도 나오지 않는다는 점에 주목하자. C++의 크래스와 템플릿의 공부에 매우 훌륭한 예제 이기도 하다.

[CodeProject] Artificial Neural Network C++ Class, https://www.codeproject.com/Articles/5292985/Artificial-Neural-Network-Cplusplus-Class

"신경망 크래스"에 Eigen 라이브러리와 Vector STL 이 사용되고 있다. 생소하다면 아래 블로그 글을 참조하자.

[1] C++ - Eigen Library 정리 - Matrix,Vector 초기화|작성자 민초맛 젤리, https://blog.naver.com/junghs1040/222104963167
[2] [C++] vector container 정리 및 사용법 [개발자 지망생:티스토리], https://blockdmask.tistory.com/70











2024년 5월 5일 일요일

온갖 소식을 전하는 IEEE Spectrum을 구독 해보자

IEEE Spectrum 구독해보자

"IEEE Spectrum"은 IEEE에서 발행하는 월간지로 과학기술 전분야를 아우른다. 인쇄된(또는 PDF 전자문서)월간지를 받아보려면 IEEE 회원이어야 하지만 대부분 국내 대학및 교육기관(도서관)이 IEEE에 가입되어 있으므로 교내에서 어렵지 않게 접근 할 수 있다. 구독 신청을 하면 전자 메일을 통해 이 잡지에서 발행하는 소식을 받아볼 수 있다. 구독 링크는,

https://spectrum.ieee.org/newsletters/

이 소식지가 전하는 내용들을 살펴보면 아래와 같다.

Tech Alert/기술동향 속보
Groundbreaking technology and science news from the editors of IEEE Spectrum, delivered every Thursday/IEEE 스펙트럼 편집자들이 선정한 획기적인 과학기술 동향. 매주 목요일 발행.

AI Alert/인공지능 속보
Biweekly newsletter featuring the news you need about machine learning algorithms and applications/인공지능 관련 기계학습 알고리즘과 응용에 관한 소식. 격주간 발행

Climate Tech Alert/기후 기술 속보
The latest in emerging technologies for combating climate change, delivered twice a month direct to your inbox/최근 높은 관심을 받고 있는 지구 환경변화에 관련된 기술소식. 매달 2회 발행

Robotics News/로봇 소식
Biweekly newsletter on advances and news in robots, drones, and automation/로봇, 드론 그리고 자동화 관련 소식. 격주 발행

Career Alert/직업 속보
Weekly newsletter featuring the latest information on jobs, education, management, and the engineering workplace/취업, 교육, 관리, 기술 업종관련 소식. 매주발행

The Future Lane/미래의 도로
Biweekly newsletter about the sensors, software, and systems that are making cars smarter/미래의 지능적인 자동차에 적용될 센서, 소프트웨어, (자율주행)시스템을 다룬다. 매주 발행

University Spotlight/대학 특집
Monthly newsletter with the latest in continuing education programs, degrees, and certificates for engineers/대학의 교육, 학위과정 소개, 공학인증에 관한 최신 소식. 월간발행

Product Spotlight/흥미로운 제품
Biweekly newsletter with the latest in engineering and advanced technology product updates/최신 기술을 적용한 제품들 소개

그외에도 과학기술의 역사, 메이커 DIY, 아마추어무선, 천문관측등의 취미에 전기전자기술들이 적용되는 사례등 다양한 영역의 소식들을 전하고 있다.

https://spectrum.ieee.org/search/?q=DIY
https://spectrum.ieee.org/search/?q=Astronomy
https://spectrum.ieee.org/search/?q=HAM%20radio

재미있는 기사들 몇가지 소개,

1959년 첼시 꽃 박람회(정원 가꾸기 취미가들의 로망)에서 소개된 무선 잔디깍기 자동차
https://spectrum.ieee.org/the-1959-robot-that-mowed-the-road-to-nowhere

새삼스레 주목받고 있는 아날로그 컴퓨터
https://spectrum.ieee.org/try-this-new-analog-computer

반도체 부품 패키지 기술은 어디까지? 웨이퍼 수준에서 컴퓨터
https://spectrum.ieee.org/tsmc-advanced-packaging