code0.HDL 소개
code0.HDL이 다루는 것
code0.HDL은 Verilog, Bluespec SystemVerilog(BSV), Chisel을 다루는 교육 사이트입니다.
각 장에는 실행 가능한 예제가 있습니다. 설명을 읽는 페이지에서 예제를 바로 컴파일하고 실행할 수 있습니다. 시뮬레이션 출력은 터미널에 표시되며, VCD가 생성되면 결과를 파형으로 확인할 수 있습니다.
본문은 영어와 한국어로 제공합니다. 두 문서는 같은 예제 소스를 공유하므로 언어에 따라 실행 코드가 달라지지 않습니다. 예제의 주석만 선택한 문서 언어에 맞춰 표시합니다.
콘텐츠 작성 원칙
code0.HDL의 설명은 언어 사양과 공식 도구 문서를 바탕으로 직접 작성합니다. 원문의 문장 구조를 그대로 옮기지 않고, 학습에 필요한 내용을 이해하기 쉬운 순서로 구성합니다.
- 언어 사양과 공식 도구 문서를 참고 자료로 사용합니다.
- BSV 문서는 BSV Language Reference Guide의 주제 구성을 참고합니다. 설명과 실행 예제는 code0.HDL의 학습 흐름에 맞춰 작성합니다.
- 설명 구조, 예제, 주석, 학습 순서는 code0.HDL에서 직접 구성합니다.
- 다른 자료를 인용하거나 재구성한 부분은 해당 페이지에 밝힙니다. 원 자료의 라이선스는 라이선스 및 고지에서 확인할 수 있습니다.
- 문서와 예제는 사이트에서 사용하는 도구의 실제 동작과 일치하는지 검증합니다.
실행 환경
Verilog와 BSV는 브라우저의 Worker에서 Icarus Verilog와 BSC WebAssembly로 실행합니다. 코드는 Worker 안에서 처리하며, 중지를 누르면 실행과 임시 파일을 함께 정리합니다. 브라우저 실행은 최대 2분이며, 출력은 1 MiB, 반환하는 VCD는 4 MiB로 제한합니다. 지원하지 않는 명령이나 브라우저 실행 오류가 발생해도 코드를 서버로 전송하지 않습니다. 두 언어의 서버 실행은 비활성화되어 있습니다. BDPI로 네이티브 C 함수를 연결하는 BSV 예제는 로컬 도구로 실행해야 합니다.
Chisel은 실행할 때마다 새 브라우저 iframe을 만들고 CheerpJ 4.3의 Java 17로 실행합니다. 첫 실행에는 Community CDN에서 Java 실행 도구를, 이 사이트에서 Chisel JAR을 내려받습니다. 여러 탭에서 실행하면 차례로 처리하며, 중지를 누르면 현재 iframe을 제거합니다. 초기화와 파일 준비는 단계마다 120초, 컴파일과 시뮬레이션은 단계마다 180초를 넘기면 중지합니다. 응답이 없는 작업은 새 iframe에서 한 번만 다시 시도하며 서버로 넘기지 않습니다.
Practice 답안을 제출할 때도 사용자 기기에서 실행합니다. 관찰 테스트벤치에는 테스트 입력과 검사 순서만 포함하며 기대 출력은 넣지 않습니다. 실행에서 얻은 관찰 기록만 이 사이트의 서버로 전송합니다. 서버는 코드를 실행하지 않고 비공개 기대값과 기록을 비교하여 처음 다른 지점을 알려줍니다. 중지를 누르면 브라우저 실행이나 진행 중인 제출 요청을 취소합니다. 작성 중인 코드와 완료 상태는 이 브라우저에 남습니다.
비교 API는 클라이언트 IP당 분당 12회, JSON 요청당 1 MiB까지 허용합니다. 브라우저에 전달하는 입력 파일은 최대 12개이며 전체 크기는 256 KiB로 제한합니다. Chisel은 Chisel 6.7.0과 chiseltest 6.0.0을 사용하고, Verilog와 BSV는 Icarus Verilog로 시뮬레이션합니다. 기대값과 참고 답안은 브라우저로 내려보내지 않습니다.
이 검사는 학습을 돕기 위한 기능이며, 브라우저에서 특정 프로그램을 실행했다는 사실을 인증하지는 않습니다. 관찰 기록의 처리 방식은 개인정보처리방침에서 확인할 수 있습니다.
독립적으로 운영하는 프로젝트
code0.HDL은 독립적으로 운영하는 교육 프로젝트입니다.
code0.HDL은 Bluespec, Inc.와 제휴 관계가 없으며 Bluespec의 공식 문서 사이트도 아닙니다. 이 사이트의 내용은 Bluespec, Inc.를 비롯한 도구 제공사가 보증하거나 승인한 자료가 아닙니다. 언어, 도구, 제품의 이름은 설명 대상을 식별하는 용도로만 사용합니다.