2025년 8월 25일 월요일

기술노트 15: 내 책상위의 반도체 설계실 꾸미기


기술노트 15: 내 책상위의 반도체 설계실 꾸미기

목차:

1. 개요
    1-1. 오픈-소스 설계 도구 설치
    1-2. 표준 연동 에뮬레이션(Standard Co-Emulation)
    1-3. 연동 에물레이션 모델링 인터페이스 내부구성(SCE-MI Infrastructure)
    1-4. "내 칩 반도체 설계실"의 연동 에뮬레이션 체계(Poorman's SCE System)

2. 모델링 인터페이스(Modeling Interface) 통신 채널 장치 제작
    2-1. Arduino DUE 마이크로 컨트롤러 모듈 및 어댑터 보드
    2-2. Raspberry Pi Pico 마이크로 트롤러 모듈 및 어댑터 보드

3. 에뮬레이터 제작
    3-1. FPGA 모듈: Intel/Altera Cyclone IV
    3-2. JTAG 다운로드 케이블
    3-3. 어댑터 보드
    3-4. 레벨 쉬프터 모듈
    3-5. 칩 테스트 소켓(28-Pin SOIC)

4. 오실로스코프/로직 아날라이저 제작
    4-1. 컨트롤러 모듈: 라즈베리 파이 피코
    4-2. 오실로스코프 프론트 엔드 보드
    4-3. 기타 측정기

5. 보드 시험
    5-1. 준비사항
        a. FPGA JTAG 다운로더(openFPGALoader) 설치
        b. Arduino
        c. 리눅스 USB 장치 확인
    5-2. 테스트 예제 실행

6. 맺음말

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

1. 개요

내 책상위에 반도체 "설계실"을 꾸며보자. 컴퓨터와 오픈 소스 반도체 설계 소프트웨어 그리고 에뮬레이션/프로토 타이핑 하드웨어로 구성된다. 프로토 타이핑 하드웨어는 설계 검증 에뮬레이터 및 칩 테스트용도로 쓰인다. 아래 사진은 "내 책상 위의 반도체 설계실" 모습을 보여분다.

1-1. 오픈-소스 설계 도구 설치

내 책상위의 "반도체 설계실"의 기본은 오픈-소스 반도체 설계 도구가 설치된 컴퓨터(워크 스테이션)다. 앞서 리눅스와 오픈-소스 설계 도구의 설치에 대하여 설명 했으니 아래 문서들을 참고한다.

    a. 리눅스 설치: "가상 머신 리눅스 설치"[바로가기], 다시 WSL![바로가기]
    b. 오픈-소스 반도체 설계도구 설치[바로가기]
    c. 프로토 타이핑 도구 설치: "Arduino, Vitis-HLS, Quartus"[바로가기]

1-2. 표준 연동 에뮬레이션(Standard Co-Emulation)

"내 칩 반도체 설계실"의 검증 체계는 Accellera의 SCE-MI[바로가기]의 개념을 차용하였다. 연동 에뮬레이션(Co-Emulation) 시스템은 테스트벤치 소프트웨어와 FPGA 하드웨어를 연계하여 반도체 설계를 검증하는 체계로서 3부분으로 구성된다.

a. 호스트 워크스테이션(Host Workstation)

워크스테이션 PC에서 시뮬레이션으로 DUT를 검증 한다. 검증 대상 DUT는 C/C++ 로 기술된 언-타임드 알고리즘(시스템 수준 모델) 또는 하드웨어 기술언어(베릴로그, VHDL, SystemC)의 타임드 모델이 될 수 있다. 메시지 프록시를 통해 에뮬레이터 FPGA에 구현된 DUT를 검증 한다. 시뮬레이션에서 작성했던 테스트벤치가 재사용된다.

b. 에뮬레이터 (Emulator)

FPGA에 구현된 DUT의 하드웨어다. 호스트 워크스테이션의 테스트벤치에 의하여 구동된다.

c. 모델링 인터페이스(MI, Modeling Interface)

워크스테이션과 FPGA 사이에 연결된 통신 채널을 매개로 가교 역활을 한다. 호스트 워크스테이션의 시스템 수준 테스트벤치와 에뮬레이터의 하드웨어 사이의 넓은 추상성 격차를 이어준다. 모델링 인터페이스의 역할은 시뮬레이터의 테스트벤치에서 보는 DUT와 FPGA에 구현된 DUT가 외견상으로 동일하게 보이도록 한다.


[그림출처] Standard Co-Emulation Modeling Interface (SCE-MI) Reference Manual v2.4

1-3. 연동 에물레이션 모델링 인터페이스 내부구성(SCE-MI Infrastructure)

연동 에물레이션 체계의 모델링 인터페이스 내부구성(SCE-MI Infrastructure)은 다음과 같다.

a. 메시지 포트 프록시(Message Port Proxy)

DUT 마다 입출력의 구성이 다르다. 이에 따라 달라지는 프로토콜(통신 데이터 양식)에 맞춰 메시지를 패키지화 한다. 아울러 워크스테이션과 FPGA 사이에 연결된 통신 채널을 구동한다.

b. 메시지 통신 채널

워크스테이션과 FPGA 사이에서 테스트 입출력을 주고 받는 통로 역할이다. 입출력 구성이 다른 DUT 마다 통신 프로토콜을 재작성하려면 매우 번거롭다. 통신 프로토콜을 규격화한 응용 프로그래밍 인터페이스(API)가 제공 되어야 한다. "내 칩 디자인 킷[깃허브]"에 메시지 프로토콜을 규격화 하고 이를 구동하는 PSCE API 를 제공한다. 현재 PSCE_API는 최대 64비트 입력과 64비트 출력 핀을 각각 사용할 수 있다. 양방향 핀은 제공하지 않는다.

c. 메시지 포트/트랜잭터

통신 채널을 통해 수발한 메시지를 DUT에 맞게 풀어준다.


[그림출처] Standard Co-Emulation Modeling Interface (SCE-MI) Reference Manual v2.4

1-4. "내 칩 반도체 설계실"의 연동 에뮬레이션 체계

"내 칩 반도체 설계실"의 에뮬레이션 하드웨어의(프로토 타이핑, 칩 테스터) 구성은 아래와 같다.

a. Arduino DUE 모듈(또는 Raspberry Pi Pico)

워크스테이션의 테스트벤치(소프트웨어)와 FPGA(하드웨어) 사이의 통신 채널의 역할을 한다.

b. FPGA 모듈

Intel/Altera Cyclone IV 를 가진 FPGA 모듈이다.  RTL 로 기술된 DUT는 합성을 거쳐 FPGA에 구현된다.

아래 그림은 소프트웨어 테스트벤치와 하드웨어 에뮬레이터 사이의 연결도을 보여준다.

SCE-MI의 목적 중에는 고속 프로토 타이핑 이전의 RTL 검증 가속을 포함하지만 본 "설계실"의 하드웨어 에뮬레이션에서는 큰 의미를 갖지 않는다. 워크스테이션 PC와 하드웨어 사이의 구성 (SCE-MI Infrastructure)중 통신 채널로 USB/UART를 사용하고 있어서 속도를 기대하기 어렵다. 워크스테이션과 FPGA 사이에 교환되는 메시지가 싸이클 상세(Cycle Accurate)수준 일 경우 시뮬레이션 속도는 약 1Khz 미만이다.

통신 채널 제어기(Arduino DUE)에서 클럭을 생성하고 입출력 메시지를 이에 맞춘 시스템 상세(System Accurate) 수준에서 동작 속도는 ~100Khz 를 기대할 수 있다.

통신 채널 제어기에서 클럭과 일부 표준화된 입출력을 처리하고 시스템 수준 검증을 위한 대화형(interactive) 메시지만 규정할 경우 ~1Mhz 의 작동 속도를 거둘 수 있다.

검증을 완료하고 "내 칩 제작 서비스" MPW로 칩이 제작되어 나오면 FPGA 내에 구현되었던 DUT 대신 칩을 연결 하므로써 설계의 실증 시험을 할 수 있다.

2. 모델링 인터페이스/통신 채널 장치 제작

2-1. Arduino DUE 모듈 및 어댑터 보드

- 데이터 쉬트[바로가기]
- 회로도[바로가기]
- 보드 입출력 핀[바로가기]
- 보드 구매: 아듀이노는 기본적으로 오픈-소스 하드웨어다. 누구나 동일한 보드를 제작 판매할 수 있다. 일부 복제품 중에 납땜이 불량한 경우가 있으므로 너무 낮은 가격은 피하자.

어댑터 보드

- 회로도: [바로가기]
- 보드외형: [바로가기]
- PCB 거버 [바로가기]

전면 및 후면 조립 모습

헤더 핀을 기판 상하로 튀어나오게 해서 확장을 고려하였고 측정장치 프로브 클립을 물리기 용이하다.

양쪽으로 긴 헤더 핀이 없을 경우 길이 20mm를 구하여 가공해서 쓴다.

2-2. Raspberry Pi Pico 모듈 및 어댑터 보드

Raspberry Pi Pico 모듈을 모델링 인터페이스로 사용할 수 있다.

어댑터 보드

- 회로도: [바로가기]


3. 에뮬레이터 제작

3-1. FPGA: Intel/Altera Cyclone IV

- FPGA EP4CE6 정보[바로가기]
- 보드구매:

3-2. JTAG 다운로더

Digilent HS2와 호환하는 FPGA 다운로드 케이블이다. Xilinx FPGA 용 이지만 호환성이 뛰어나 범용 JTAG 케이블로 사용할 수 있다. Xilinx 및 Altera FPGA 다운로더로 사용한다.

케이블 구매:

3-3. 어댑터 보드

- 회로도 [바로가기]
- 보드외형[바로가기]


3-4. 조립


3-5. 레벨 쉬프터

FPGA와 Arduino DUE의 입출력 핀의 전압 특성은 3.3V다. "내 칩 제작 서비스" 고정의 입출력 특성은 5V다. 레벨 쉬프터는 이 전압차를 맞춰주기 위한 간단한 회로는 다음과 같다.

[출처] Sparkfun

4채널 레벨 쉬프터 모듈:

어댑터: 6장 이상 필요

- 회로도[바로가기]
- PCB 거버[바로가기]

3-6. 칩 테스트 소켓

- 28-Pin SOIC 소켓

4. 오실로스코프/로직 아날라이져 제작

4-1. 컨트롤러 보드: 라즈베리 파이 피코(W)

Scoppy:
https://oscilloscope.fhdm.xyz/

4-2. 프론트 엔드 보드

- 회로도[바로가기]
- PCB 거버[바로가기]

4-4. 기타 측정기/보조기

- USB 전압/전류 측정기

- USB 가변 전원공급기


- 디지털 멀티메터


- 오실로스코프


-로직 아날라이져

- USB 허브

5. 보드 시험

우분투 리눅스와 아듀이노 및 FPGA 도구가 설치된 컴퓨터가 준비되었다면 에뮬레이션 하드웨어를 시험해 보자.

5-1. 준비사항

- 우분투 리눅스[연구노트1]에 오픈-소스 반도체 설계 도구[연구노트2]들이 설치된 컴퓨터
- 에뮬레이션 도구들(Arduino, Vitis-HLS, Quartus)이 설치되어 있을 것[연구노트13]
-  에뮬레이션 하드웨어는 앞선 2~3장에서 설명 했다.

연동 에뮬레이션 하드웨어는 두가지 버젼으로 제작한다. 마이크로 컨트롤러를  Arduino DUE 모듈로 구성한 모습은 아래 사진과 같다.

Raspberry Pi Pico 모듈로 구성한 모습은 아래 사진과 같다.

a. FPGA JTAG 다운로더(openFPGALoader) 설치

FPGA를 프로그램 하는 오픈-소스 유틸리티다. 다양한 장치와 다운로드 케이블을 지원한다.

    $ cd ~/ETRI050_DesignKit/Tools/openFPGALoader

    $ bash openFPGALoader_build.sh

b. Arduino

    - Arduino CLI 가 설치되어 있을 것[연구노트13]
    - DUE와 Raspberry Pi Pico 보드 플랫폼이 설치되어 있을 것

아래 명령으로 현재 설치된 보드의 목록을 모두 볼 수 있다.

    $ arduino-cli board listall

Arduino DUE 또는 Raspberry Pi Pico를 USB 포트에 연결한다. 두 보드를 동시에 연결하지 않도록 한다. 아듀이노가 현재 연결된 보드를 인식하고 있는지 확인 한다.

    $ arduino-cli board list

    Port         Protocol Board Name   FQBN
    /dev/ttyACM0 serial   Arduino Due  arduino:sam:arduino_due_x_dbg

또는,

    $ arduino-cli board list

    Port         Protocol Board Name         FQBN
    /dev/ttyACM0 serial   Raspberry Pi Pico  rp2040:rp2040:rpipico

    - U8g2 라이브러리가 설치되어 있을  것

    $ arduino-cli lib list

    Name        Installed Available    Location Description
    DueFreeRTOS 10.1.1    -            user     -
    Scheduler   0.4.4     -            user     -
    U8g2        2.35.30   -            user     -


c. 리눅스에서 USB 장치 확인

현재 USB에 연결된 장치들의 목록을 보여주는 리눅스 명령은 lsusb 다.

    $ lsusb

    Foundation 1.1 root hub
    Bus 001 Device 006: ID 2341:003d Arduino SA Due Programming Port
    Bus 002 Device 004: ID 0403:6014 FTDI FT232H Single HS USB-UART/FIFO IC

또는,

    Bus 001 Device 055: ID 2e8a:000a Raspberry Pi Pico

FT232H는 JTAG 다운로드 케이블이다. 시리얼 포트는 리눅스(유닉스)에서 원격 터미널들을 연결하기 위해 사용하던 전통적인 주변장치다. 매우 오랜동안 사용되어 왔기 때문에 저장장치 만큼이나 운영체제 내에 잘 결합되어 있다. USB에 연결한 주변장치와 호스트 컴퓨터(리눅스)의 통신에 시리얼 포트를 활용하면 구동 소프트웨어를 별도로 제작할 필요없다. 컴퓨터에 주변장치를 새로 장착할 때마다 일으키는 구동 소프트웨어의 문제가 원천적으로 제거된 셈이다. 장치 구동 소프트웨어가 잘 발달되어 있기 때문에 이 장치를 사용하는 응용 프로그램 작성도 매우 쉽다. 아듀이노를 비롯하여 대부분 마이크로 컨트롤러의 개발(펌웨어 업로드, 디버깅)과 FPGA의 비트 파일 다운로드에 사용되는 JTAG 기능은 시리얼 포트가 활용되고 있다.

6-2. 예제 실행

예제 디렉토리로 이동,

    $ cd ~/ETRI050_DesignKit/Tutorials_New/3-3_FIR8_c_untimed_Vitis-HLS

준비된 Makefile이 있다. 간략한 사용법을 보자.

    $ make

    Vitis-HLS Project: fir

        make csynth
        make view_rpt
        make co-sim
        make clean

    * command-line variable HW_STYLE must be set before build

      HW_STYLE=[MACC | SHIFT | ARRAY] make csynth

        make emulation
        make ETRI050

    CC BY-NC, by GoodKook, goodkook@gmail.com

    $ make emulation

    Vitis-HLS Project: fir
      For Co-Emulation,
      (1) Build and Upload Modeling-Interface(Arduino-DUE)

            MI=[module] make build-mi
            MI=[module] make upload-mi
            make clean-mi

            * NOTE: module=[DUE_NORMAL|PI_PICO

      (2) Build and Config Transactor FPGA(Altera Cyclone-IV)

            make build-trans
            make config-trans
            make clean-trans

      (3) Build and Run Co-Emulator

            make co-emu

    CC BY-NC, by GoodKook, goodkook@gmail.com

예제 fir.cpp 를 고위 합성도구를 이용하여 RTL 로 합성한다. 이때 사용하는 도구는 Xilinx의 Vitis-HLS 다.

    $ make csynth

모델 인터페이스의 펌웨어를 Arduino DUE 용으로 빌드한다.

    $ MI=DUE_NORMAL make build-mi

또는, Raspberry Pi Pico 용으로 빌드한다.

    $ MI=PI_PICO make build-mi

모델 인터페이스 MI는 테스트 벤치와 FPGA에 구현된 DUT 사이를 연결한다. 통신 채널을 담당할 펌 웨어의 소스 코드는 Efir_CA.ino 다. PSCE_API로 표준화 되어 있다.

테스트벤치(소프트웨어)의 DUT 싸개는 Efir.h 다. USB 시리얼 포트(통신 채널)을 통해 FPGA의 하드웨어 DUT와 주고받을 입출력 프로토콜을 정의하고 메시지를 패키징 한다. 메시지 프록시(Message Proxy)다. FPGA 하드웨어의 메시지 트랜잭터(Message transactor)는 DUT의 싸개로서 fir_wrapper.v 다.

모델 인터페이스(아듀이노 펌웨어) 업로드,

    $ MI=DUE_NORMAL make upload-mi

또는,

    $ MI=PI_PICO make upload-mi

트랜잭터와 HLS 합성된 DUT를 묶어 에뮬레이터(Cyclone IV FPGA)로 빌드한다.

    $ make build-trans

에뮬레이터(Cyclone IV FPGA) 다운로드,

    $ make config-trans

에뮬레이터 실행,

    $ make co-emu

에뮬레이터가 작동 하지 않을 경우 모델 인터페이스 보드(마이크로 컨트롤러 모듈)를 리셋 시킨 후 재실행 한다.

연동 에뮬레이션을 실행하기 전에 두가지 마이크로 컨트롤러 모듈과 에뮬레이터 FPGA 의 구성 절차가 필요하다. 이 절차는 모두 Makefile에 작성되어 있다. 겉보기에 복잡해 보이지만 기본적인 이해 만으로도 Makefile 을 작성 할 수 있다[연구노트3].

7. 맺음말

하드웨어가 갖춰진 "설계실"이라면 반도체 설계와 시뮬레이션에 더하여 프로토 타이핑 검증과 테스트까지 망라한다. 설계를 FPGA 하드웨어에서 동작 시켜봄으로써 혹시 모를 소프트웨어 도구의 겸함에 대한 우려를 해소할 수 있다(오픈-소스 다!). 프로토 타이핑에 적용된 하드웨어는 향후 칩이 제작되어 패키지로 출고 되는 즉시 테스트를 수행 할 장비로 전환 될 수 있다.

오픈-소스 소프트웨어와 하드웨어를 사용하여 "내 칩"의 설계와 검증 그리고 실증 시험까지 실시할 수 있는 명실 상부한 "반도체 설계실"을 "내 책상"위에 꾸밀 수 있다. "내 칩 제작 서비스"는 MPW 방식으로 "내 칩"을 무료로 제작해준다. "내 칩" 만들기에 동참해보자.

"My Chip On My Desk"!


댓글 없음:

댓글 쓰기