2024년 7월 28일 일요일

"Verilog-Verilator-SystemC 방법론 기초" [1] 오픈-소스 도구 Verilator 와 SystemC 설치

"Verilog-Verilator-SystemC 방법론 기초"
[1] 오픈-소스 도구 Verilator 와 SystemC 설치

[알림] 아래 내용중 질문, 지적, 보강 등 어떤 사항도 환영 합니다.

"Verilog-Verilator-SystemC 방법론 기초"는 "내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정 중 두번째 강좌로서 베릴로그(Verilog)와 오픈-소스 시뮬레이션 도구 Verilator 그리고 시스템 수준 검증 방법론 SystemC의 입문 과정이다. 컴퓨팅 언어를 활용한 디지털 회로의 설계와 검증을 다룬다(Quantative approach to digital circuit design using computing language and Open-Source EDA tools).

강의 내용은 아래와 같다.

[1] 도구 설치 [링크]
[2] 설계 언어 Verilog 와 검증 언어 SystemC/C++[링크]
[3] 하드웨어 기술 언어의 코딩 스타일[링크]
[4] 실습: 쉬프트 레지스터 [링크]
[5] 실습: FIR 필터 [링크]
[6] "내 칩 MPW" 요건에 맞춘 FIR 필터의 PE 설계[링크]

[부록] FIR 필터 PE의 "내 칩MPW" 제출용 GDS 생성[링크]


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

목차

I. 시작하기 전에,

II. 하드웨어 설계 도구 설치
    II-1. 리눅스 설치
    II-2. ICARUS/iverilog 설치
    II-3. Verilator 설치
    II-4. SystemC 설치

III. 일러두기

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

I. 시작하기 전에,

정보산업이 일상화 되었다. 덩달아 컴퓨터 다루기는 이미 상식이다. 그중 호기심이 발동한 이들은 코딩을 배운다. 심지어 초등학교 방과후 활동으로 코딩을 배운다니 컴퓨터 언어를 더이상 꺼내 설명하지는 않겠다. 컴퓨터는 반도체 부품의 집합체다. 코딩으로 반도체 집합체에게 일을 시킨다는 것은 이미 반도체를 설계하고 있었다는 점은 말해두어야 겠다.

이 글을 읽는 독자는 코딩의 수단인 C 언어와 디지털 논리 회로 정도는 이미 익혔다고 본다. 그리하여 "내 칩 MPW" 시비스를 통해 자신만의 반도체 부품을 설계하려는 의지를 가졌으리라. 그런 독자들을 위해 디지털 하드웨어를 설계하는 방법론 중 하나를 소개 하려고 한다. 여기에서 소개하는 방법은 여러 설계 방법론 중 하나일 뿐이라는 점을 밝혀둔다.

"내 칩 MPW" 서비스의 반도체 제조공장에서 다루는 전선의 굵기는 500 나노메터(0.0000005m)로 매우 가늘다. 사람은 운영만 할 뿐 반도체는 기계(컴퓨터)가 만든다. 기계가 수행할 일(반도체 제조)을 컴퓨터 언어로 코딩을 해주어야 한다. 그래서 채택한 언어가 Verilog(베릴로그)다.

디지털 논리회로(logic circuits)를 익혔고 C 언어의 맛을 봤다면 베릴로그는 어렵지 않다. 당장 나의 알고리즘을 디지털 반도체로 구현할 만큼만 배운다. Verilog라는 색다른 컴퓨팅 언어가 C 와 어느 면에서 다른지 그 차이를 알고 논리회로(조합회로, 순차회로 그리고 유한 상태 머신)의 행동을 표현하는 연습을 해본다. 그 이상은 학습자의 노력에 달렸다.

언어는 매우 추상적인 표현이 가능하다. 논리회로를 학습할 때 단위 객체의 비트 폭을 명확히 하고 순차회로의 행동을 클럭마다 묘사 했었다. 이를 레지스터 트랜스퍼 수준 RTL(Register-Transfer Level)이라고 한다. 베릴로그 언어는 논리회로의 RTL 설계를 할 수 있을 만큼 배운다. SystemC 로는 알고리즘과 시스템 수준의 테스트벤치 모델링을 배운다.

C/C++ 좀 한다는 사람도 그 언어를 속속 들이 알지 못한다. 쓰다가 아쉬우면 사전을 찾아보고 다른이의 예문을 보면서 언어의 실력이 느는 법이다. 언어 실력은 연습으로 길러진다.

II. 하드웨어 설계 도구 설치

베릴로그는 컴퓨터 용 언어의 하나다. 목표가 다를 뿐이다. C 언어는 컴퓨터가 할일을 표현하지만 베릴로그는 논리회로 제조장비가 할일을 기술한다. 무턱대고 제조장비에게 일을 시켜서 잘못되면 큰 손해가 나므로 미리 시험을 해본다. 검증을 위한 시뮬레이션이다. 원하는 대로 만들어 질 것인지 가상으로 확인해보는 절차다.

원시 코드(source code)는 사람이 읽고 쓸수 있는 문서다. 컴파일러는 C 언어로 작성된 원시 문서를 컴퓨터의 2진 코드(binary code)로 바꿔주는 소프트웨어(자동화 도구)다. 시뮬레이터는 베릴로그로 작성된 원시 문서를 컴퓨터의 코드로 바꿔 주고 마치 하드웨어가 만들어진 것처럼 작동 시켜주는 소프트웨어다. 논리회로를 배우면서 작동하는 모습을 파형으로 나타냈었다. 시뮬레이터는 베릴로그로 기술된 하드웨어를 2진 코드로 바꿔놓고 작동 시켜 디지털 회로의 결과를 보여준다.

몇년전 까지만 해도 C 컴파일러는 큰돈을 들여 구입해야 했지만 지금은 자유 소프트웨어 운동 덕에 표준이나 다름없는 GNU의 C/C++ 컴파일러가 무료다. 베릴로그 시뮬레이터는 여전히 고가다. 다행히 하드웨어 설계용 도구에도 오픈-소스 운동에 힘입어 신뢰도 있는 시뮬레이터가 등장했다. 본 강좌는 상용 도구는 피하고 오픈-소스 베릴로그 시뮬레이터로 ICARUS와 Verilator를 사용한다.

II-1. 리눅스 설치

개발의 과정은 워낙 변수가 많고 이에 따라 도구(컴파일러)에 주는 옵션이 매우 다양하기 때문에 Make를 포함한 스크립트 기반의 명령줄 환경에서 이뤄진다. 전자회로 설계에서 그림 기반의 도구를 사용하는 모습을 자주 보게 되지만 취급할 수 있는 한계가 있다. 자동화에 이르면 그림 화면은 입출력 데이터의 시각화(data visualization)와 진행을 감시(process monitoring)할 참고일 뿐이다. 반도체 설계에 컴퓨팅 언어를 채택한 이상 명령줄 사용은 피할 수 없다. 반도체 설계 강좌의 개발환경은 리눅스 운영체제의 명령줄과 스크립트를 활용한다.

윈도우즈 운영체제 하에 리눅스 운영체제와 관련도구의 설치 방법은 "VLSI 레이아웃 설계 기초" 강좌의 "[1] 리눅스 및 VLSI 레이아웃 오픈-소스 도구 설치"편을 참고한다.

    https://fun-teaching-goodkook.blogspot.com/2024/07/vlsi-magic.html


II-2. ICARUS/iverilog 설치

원작자 조차 시작된 연도를 모를 만큼 매우 역사가 깊은 오픈-소스 베릴로그 시뮬레이터다. 오랜 시간동안 꾸준한 갱신이 이뤄진 지금 매우 높은 신뢰를 얻고 있으며 원작자에 의해 여전히 관리되고 있다. PLI/VPI는 물론 SystemVerilog의 DPI 도 지원한다. Icarus Verilog 의 홈페이지는 아래와 같다.

    https://steveicarus.github.io/iverilog/

경희대학교 디자인 킷[1]에 설치 스크립트가 준비되어 있다.

    https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK/blob/main/Tools/iverilog_build.sh


II-3. Verilator 설치

Verilator는 엄밀히 말하면 시뮬레이터는 아니다. Verilog를 SystemC/C++의 쓰레딩 함수로 변환해 주는 도구다. 변환된 C++ 소스는 GCC/clang을 사용해 컴파일된 후 시뮬레이션 엔진과 링크하여 실행 가능 파일을 생성한다. Verilog 2005의 대부분 구문과 SystemVerilog 2017의 일부 기능을 지원한다. 단, 트라이 스테이트 MOS 게이트 프리미티브와 사용자 정의 테이블은 지원 하지 않는다. (합성 후 시뮬레이션 모델에 사용 불가) Veripools 의 홈 페이지 링크는 아래와 같다.

    https://www.veripool.org/verilator/

경희대학교 디자인 킷[1]에 설치 스크립트가 준비되어 있다.

    https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK/blob/main/Tools/verilator_build.sh


II-4. SystemC 설치

베릴로그는 하드웨어의 행동을 묘사하기 위한 언어다. 하드웨어를 제작하기 전에 컴퓨터에서 마치 하드웨어 인양 가상으로 작동 시켜본다. 어찌 되었든 소프트웨어다. 하드웨어가 작동 하려면 입력을 넣어주고 그 출력을 받아와야 한다. 입출력의 동작은 컴퓨터 상에서 이뤄 지므로 프로그래밍 언어의 지원을 받도록 한다. 프로그래밍 언어로 최상의 위치에 있는 C++를 하드웨어 언어와 맞물리도록 각종 크래스 라이브러리 묶음이 SystemC 다. 고도의 알고리즘 개발용 C++ 크래스와 템플릿 라이브러리로 STL(Standard Template Library)가 있듯이 SystemC는 하드웨어 모델링용 크래스와 템플릿 라이브러리다. SystemC 는 IEEE 1666으로 표준으로 등재되어 있다. SystemC 의 홈 페이지는 아래와 같다.

    https://systemc.org/
    https://accellera.org/

경희대학교 디자인 킷[1]에 설치 스크립트가 준비되어 있다.

    https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK/blob/main/Tools/systemc_build.sh

III. 일러두기

본 강좌의 Verilog-Verilator-SystemC 방법론은 여러 반도체 설계 방법론 중 하나다. 전통적인 상용 시뮬레이터를 채택한 방법과 다른 점이 많을 것이다. 저마다 장단점을 가지고 있으므로 방법론에 대해 우열을 다툴일은 아니다. 특히 SystemC 에 대해서는 다른 견해도 있다는 점을 밝혀둔다.

    https://gtrfx.github.io/2020/02/16/systemc-basics.html

본 강좌에서 채택한 방법론의 우월성을 강변하지는 않겠다. 이미 익숙한 방법론이 있다면 그를 따르기 바란다. 그럴 경우 이번 강좌는 지나쳐도 좋다. 단, 실습 과제는 다음 강좌에서도 적용 될 것이다. 예제 소스를 익숙한 설계 방법론에 적용 시켜보면 좋을 것이다.







댓글 없음:

댓글 쓰기