ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502
목차
I. 개요
II. 시스템 수준 테스트 벤치
[1부]
II-1. Apple-1 컴퓨터 시스템 모델
II-2. 6502 CPU의 베릴로그 RTL
[2부]
II-3. 베릴로그 RTL과 SystemC/C++의 결합
simulation/sc_CPU_6502_Top.h
simulation/obj_dir/Vcpu.h
simulation/mti_sim/CPU_6502.h
simulation/mti_sim/Vcpu.h
베릴레이터의 언어 변환(Language Translation) 시뮬레이터
QuestaSim의 동적 링크(Dynamic Linking) 시뮬레이터
II-4. 동기식 메모리 모델
simulation/sc_mem.h
simulation/sc_mem.cpp
II-5. Apple-1 컴퓨터
simulation/sc_main.cpp
[3부]
II-6. Apple-1의 표준 입력 장치: 키보드
simulation/a1_keyboard.cpp
Apple-1의 입력용 PIA: 메모리 매핑된 키보드 포트
II-7. Apple-1의 표준 출력장치: 디스플레이
simulation/a1_display.cpp
Apple-1의 출력용 PIA: 메모리 매핑된 디스플레이 포트
III. 6502 CPU 기능적 검증
III-1. 모니터 프로그램
WozMon
III-2. Apple-1 시뮬레이터 빌드
simulation/Makefile
III-3. Apple-1 시뮬레이터 실행
Apple-1 메모리에 응용 프로그램을 적재하는 방법
6502 C 컴파일러
좀더 검증, Applesoft BASIC
III-4. HDL 과 SystemC의 병행 시뮬레이션(Co-Simulation)
QuestaSim 의 SystemC
simulation/mti_sim/compile_fun.do
Verilator vs. QuestaSim HDL simulator
IV. 6502 CPU 베릴로그 합성
IV-1. 유한 상태 기계(FSM)
IV-2. CPU의 명령 디코더
IV-3. Yosys의 FSM 합성기
IV-4. 합성 후 네트 시뮬레이션
V. 자동 배치와 배선
V-1. 자동 배치
V-2. 네트리스트 파일 형식
V-3. 자동 배선
VI. 레이아웃 검증
VI-1. 배선 후 얻은 DEF
VI-2. LVS 레이아웃 검증
VI-3. 겹친 접점(Stacked VIA) 검사
DEF 에서 Magic 레이아웃 변환
LVS: 배선 후 레이아웃 네트리스트 vs 합성 후 네트리스트 비교
VI-4. 디자인 룰 검사
VII. 실습요약
VIII. 맺음말
6502 CPU는 70년대 중반에 생산되기 시작하여 Apple-1 컴퓨터를 비롯하여 다양한 컴퓨터와 게임기에 사용되었다[바로가기]. 50년전의 CPU를 이제와서 다시 설계하는 이유는 설계기법과 환경의 어떻게 변했는지 살펴보기 위함이다. 사실 반도체를 전자회로로 따진다면 달라진 것은 없다고 해도 과언은 아니다. 다만 칩 당 집적되는 규모의 급격한 증가(회로의 트랜지스터 갯수로 따져 본다면 수천개에서 수억개로 늘었다)에 따른 제조 및 설계 비용이 관건이다. 설계시간과 비용의 압박을 극복하고자 여러 기법이 등장하고 자동화 도구들의 발전해왔다. 그중에서도 하드웨어 기술 전용 언어[바로가기]를 사용한 반도체 설계 기법은 이제 일반화 되었고 소프트웨어 개발용이라고 알려진 일반 컴퓨팅 언어들도 반도체 설계와 검증의 용도로 사용된다[바로가기]. 컴퓨팅 언어보다 높은 추상화 수준의 시스템 모델링 도구들도 사용되고 있다. 화려한 외양을 갖춘 고가의 시스템 검증 도구들은 언듣 보기에 멋져 보일지 모르지만 융통성이 매우 적다. 많은 것을 할 수 있다고 하지만 정작 하려면 할게 없다. 결국 또다른 언어로 귀결될 것이다.
시스템의 일부로 사용될 하드웨어를 설계할 때 짜여진 순서에 의거한 시험은 불완전한 시험이 될 수 있다. 하드웨어 설계가 우선인 여건(개발시간의 압박, 제한된 인력 투입 등)에서 실제 적용될 시스템에서 일어날 돌발 상황을 모두 고려한 시스템 모델을 만들어내기 어렵다. 하드웨어 기술 언어는 고도의 시스템 모델을 구현하기에 적합하지 않다. 이를 극복하기 위해 다양한 시스템 모델링 도구가 상용화 되어 있긴 하지만 하드웨어 기술 언어와 큰 격차를 좁히기 어렵다. 시스템 모델링이라고 표방하는 도구들의 실체를 보더라도 코드 생성기(IP generator)라고 봐야 할 것이다.
소프트웨어 제작 기술이 발전하여 이종 언어간 혼합 실행 기법이 널리 활용되는 지금 굳이 어렵게 하드웨어 언어로 테스트 벤치 작성하는 일은 줄어들고 있다. 하드웨어 언어는 설계에 집중하고 시스템 수준 검증도구로 C/C++를 활용하는 추세다. 하드웨어 언어에 C/C++의 연결이 표준화 되었으나 반도체 설계자들은 오히려 역사 깊은 C/C++ 언어에 대한 이해가 부족한 실정이다. 이는 화려한 외양을 갖춘 시스템 설계 도구들이 등장하는 이유이기도 하다.
6502는 반세기 전의 CPU 이긴 하나 오늘날의 정보산업 사회를 연 시발점이라고 해도 과언이 아니다. C 언어 컴파일러를 비롯하여 수많은 개발도구, 응용 프로그램이 등장 했다. 본 예제는 RTL 베릴로그로 기술된 CPU를 검증 하기위한 테스트 벤치로 SystemC를 이용하여 47년전 발매된 Apple-1 컴퓨터 시뮬레이터를 제작하였다. 하드웨어의 시스템 수준 모델링을 위해 C++ 프로그래밍 언어의 크래스 라이브러리로 개발된 SystemC를 사용하였다. HDL과 SystemC의 병행 시뮬레이션(Co-Simulation)이다. Apple-1 시뮬레이터는 발매당시 탑재되었던 워즈니악의 모니터 프로그램을 수정 없이 실행 될 뿐만 아니라 어셈블러, C 컴파일러에서 생성된 2진 코드를 실행 시킬 수 있다. Applesoft의 BASIC 바이너리도 완벽히 실행된다. 예제의 Apple-1 시뮬레이터는 높은 추상화 수준의 SystemC/C++를 이용하면 시스템 수준 RTL 검증을 효과적(낮은 비용, 짧은 개발 기간)으로 수행 할 수 있음을 보여준다.
시스템 수준 검증이 완료된 6502 CPU의 RTL 베릴로그는 오픈 소스 도구들 만을 사용하여 GDS까지 생성한다. 합성기로서 Yosys, 지동 배치와 배선에 GrayWolf와 QRouter 그리고 레이아웃 편집, 디자인 룰 검사, 그리고 GDS 생성 도구로 Magic이 사용 되었다. 합성전 기능 검증과 합성 후 네트리스트 시뮬레이션을 실시하였다. HDL과 SystemC의 병행 시뮬레이션에 상용 QuestaSim을 사용하고 오픈 소스 언어변환 도구인 베릴레이터(VERILATOR)와 비교하였다. 아울러 합성 네트리스트와 레이아웃 추출 네트리스트의 비교 LVS 도 수행 하였다. 대상 공정은 ETRI 0.5um CMOS 2P3M 이다. 표준 셀 라이브러리는 경희대학교 반도체 전공 트랙에서 개발한 디자인 킷을 활용하였다.
검증의 도구로서 분만 아니라 미래의 반도체 설계 언어로 C/C++가 도입되기 시작 했고 이를 RTL로 합성하는 자동화 도구 HLS (Hihg-Level Synthesis)들이 상용화 되었다. 이제 하드웨어 설계자 들도 RTL의 HDL에서 벗어날 때가 되었다. 오늘날 어셈블리언어로 소프트웨어를 개발하는 사례를 찾아볼 수 없듯이 하드웨어 설계도 곧 그런 시대가 될 것이다.
----------------------------------------------------------------------------
[이전 게시글 참조]
예제 실습: "Verilog RTL에서 GDS 레이아웃 까지"
1. SystemC 및 SDL2 라이브러리 빌드 하는 방법 [링크]
2. Project_6502 예제의 SystemC 테스트 환경 빌드 및 실행하기 [링크]
3. Project_6502 예제의 기능적 Co-Simulation 실시 방법 [링크]
4. Project_6502 예제의 합성 후 Co-Simulation 실시 방법 [링크]
----------------------------------------------------------------------------
참고/웹 링크
[1] ETRI 0.5um STd-Cell Design Kit/KHU, https://fun-teaching-goodkook.blogspot.com/2023/12/etri-05u-cmos-v1a-2023-12-13.html
[2] KION 국가나노 인프라 협의체, https://kion.or.kr/
[3] KION 국가나노 인프라 협의체, 내칩 MPW, https://mpw.kion.or.kr/
[4] MOS Technology, https://en.wikipedia.org/wiki/MOS_Technology
[5] MOS 테크놀로지 6502, https://namu.wiki/w/%EB%AA%A8%EC%8A%A4%20%ED%85%8C%ED%81%AC%EB%86%80%EB%A1%9C%EC%A7%80%206502?from=6502
[6] Retro Computing/Apple-1 Replica, http://retro.hansotten.nl/6502-sbc/apple-1/
[7] Apple-1 Replica,"Insanly Great", https://www.apple-1-replica.com/
[8] [넥슨컴퓨터박물관] 애플I 소장품 실제 구동영상 (Apple1, AppleⅠ), https://www.youtube.com/watch?v=TgKgH5abLfg
[9] Arlet's 6502 Github, "A Verilog HDL version of the old MOS 6502 CPU.", https://github.com/Arlet/verilog-6502
[10] SystemC, https://systemc.org/
[10a] C/UNIX Functions for VHDL Testbenches, http://bear.ces.cwru.edu/VHDL/doc/snug2002_20040606_slides.pdf
[10b] SystemC, Bridge the Gap, https://drive.google.com/file/d/11MSOZ4e592zwhy8jXRqmM6qg1AiMCfcd/view?usp=sharing
[10c] 시스템 수준 언어: SystemC & SystemVerilog, https://drive.google.com/file/d/11fQKIcAC78B5gLcw-FZkJ800B1PV7o3B
[11] Steve Wozniak, https://en.wikipedia.org/wiki/Steve_Wozniak
[12] ICARUS Verilog, https://steveicarus.github.io/iverilog/
[13] Icarus Verilog, Wikipedia, https://en.wikipedia.org/wiki/Icarus_Verilog
[14] iVerilog 동영상, https://www.youtube.com/results?search_query=icarus+verilog+iverilog
[15] VERILATOR, https://www.veripool.org/verilator/
[16] Co-Simulation, https://en.wikipedia.org/wiki/Co-simulation
[17] What is Cosimulation ?, https://opensimulationplatform.com/co-simulation/
[18] QuestaSim Advanced Simulator, https://eda.sw.siemens.com/en-US/ic/questa/simulation/advanced-simulator/
[19] Intel QuestaSim FPGA Edition, https://www.intel.co.kr/content/www/kr/ko/software/programmable/quartus-prime/questa-edition.html
[20] Hardware Description Language, https://en.wikipedia.org/wiki/Hardware_description_language
[21] OpenROAD Project Publications, https://theopenroadproject.org/publications/
[22] The Linux Programming Interface: A Linux and UNIX System Programming Handbook, https://en.wikipedia.org/wiki/The_Linux_Programming_Interface, [e-Book]
[23] High-Level Synthesis, https://en.wikipedia.org/wiki/High-level_synthesis
[24] Integrating SystemC Models with Verilog and SystemVerilog Models Using the SystemVerilog Direct Programming Interface, https://sutherland-hdl.com/papers/2004-SNUG-Europe-paper_SystemVerilog_DPI_with_SystemC.pdf
[25] Towards Automatic High-Level Code Deployment on Reconfigurable Platforms: A Survey of High-Level Synthesis Tools and Toolchains, https://ieeexplore.ieee.org/abstract/document/9195872
[26] HLS Blog, https://hls-goodkook.blogspot.com/2021/08/ug871-xilinx-high-level-synthesis.html
[27] WozMon, http://retro.hansotten.nl/6502-sbc/apple-1/
[28] cc65 C-Compiler for 6502, https://www.cc65.org/
[29] Verilog BASIC, Intel, https://youtu.be/PJGvZSlsLKs?si=-DU-GBL5oDlex0G_
[30] Verilog HDL 입문 8시간 완성, https://youtu.be/HcdlkMI54Vg?si=LMxz8U-LbaNKa3lC
[31] SystemVerilog DPI, https://en.wikipedia.org/wiki/SystemVerilog_DPI
[32] Tutorial On DPI, https://github.com/adki/DPI_Tutorial
[33] Xilinx Synchronous RAM Timing, https://docs.xilinx.com/r/en-US/am007-versal-memory/NO_CHANGE-Mode-DEFAULT
[34] Apple-1 Operation Manual, http://retro.hansotten.nl/uploads/apple1/APPLE%20I_Operation%20Manual.pdf
[35] Inter-Process Communication, https://en.wikipedia.org/wiki/Inter-process_communication
[36] GNU Make 강좌, https://doc.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html#toc1
[37] Intel HEX, https://en.wikipedia.org/wiki/Intel_HEX
[38] 6502 Instructions, https://www.cs.otago.ac.nz/cosc243/pdf/6502Poster.pdf
[39] Synopsys' Open-Source Liberty Format to Incorporate On-Chip Variation Extensions, https://news.synopsys.com/index.php?s=20295&item=123415
[40] Liberty Timing File, https://redirect.cs.umbc.edu/~cpatel2/links/641/slides/lect05_LIB.pdf
[41] Finite State Machine, https://en.wikipedia.org/wiki/Finite-state_machine
[42] High Level Synthesis FSM, https://users.ece.utexas.edu/~gerstl/ee382v-ics_f09/lectures/lecture_9.pdf
[43] Instruction Cycle, https://en.wikipedia.org/wiki/Instruction_cycle
[44] Microprocessor Design, WikiBooks, https://en.wikibooks.org/wiki/Microprocessor_Design
[45] State Machine Coding Styles for Synthesis, http://www.sunburst-design.com/papers/CummingsSNUG1998SJ_FSM.pdf
[46] QFlow 1.4 Reference Manual, http://opencircuitdesign.com/~tim/programs/qflow/reference.html
[47] Fast Prototyping of a Deep Neural Network on an FPGA, IEEE Xplore, https://ieeexplore.ieee.org/document/9333030
[48] FINN: A Framework for Fast, Scalable Binarized Neural Network Inference, https://arxiv.org/abs/1612.07119
[49] Tutorial (ISFPGA'2021): Neural Network Accelerator Co-Design with FINN, https://youtu.be/zw2aG4PhzmA?si=mEvtFU988UW5lZ5
[50] Machine Learning on FPGA, https://www.youtube.com/watch?v=4MBbV2gKE98&list=PLGzeDuLmmxDpEsCAjf_sYrMC6p-Y0Ummk
[오픈 소스 반도체 설계도구]
[1] QFlow, http://opencircuitdesign.com/qflow/index.html
[2] OSS CAD Suite (Yosys/iVerilog & etc.), https://github.com/YosysHQ
[3] GrayWolf: 표준 셀 자동 배치 도구, git://github.com/rubund/graywolf
[4] QRouter: 표준 셀 자동 배선 도구, http://opencircuitdesign.com/qrouter/index.html
[5] Magic: VLSI 레이아웃 그리기 및 파일 변환, http://opencircuitdesign.com/magic/index.html
[6] irsim: 스위치 수준 시뮬레이터, http://opencircuitdesign.com/irsim/index.html
[7] Netgen: LVS 검증도구, http://opencircuitdesign.com/netgen/index.html
[8] XSchem: 회로 입력 도구, https://github.com/StefanSchippers/xschem
[9] ngSpice: SPICE 회로 시뮬레이터, https://ngspice.sourceforge.io/
[10] gtkWave: 디지털 회로 파형 VCD 보기, https://gtkwave.sourceforge.net/
[11] KLayout: VLSI 레이아웃 툴, https://www.klayout.de/
[12] SystemC, https://systemc.org/
[13] ICARUS Verilog, https://steveicarus.github.io/iverilog/
[14] VERILATOR, https://www.veripool.org/verilator/
[15] 반도체 설계 오픈 소스 도구, https://fun-teaching-goodkook.blogspot.com/2024/01/etri-05um-cmos-std-cell-dk.html
댓글 없음:
댓글 쓰기