RTL 설계 기초
디지털 논리회로에서 배운 회로를 SystemVerilog로 표현합니다. 타입·폭·부호, 조합·순차논리, 모듈·매개변수·generate를 다루고 독립적인 테스트벤치로 경곗값과 오류 상황을 검사합니다. 마지막에는 주기 펄스 발생기와 누산기를 연결한 회로를 완성하고 실행 결과를 기록합니다.
이 코스에서 배우는 것
- 각 신호의 폭·부호·구동자·유효 시점·리셋 값을 명확히 정합니다.
- 조합 블록의 모든 조건에 값을 대입하는 방식과 클록 에지에서 상태를 갱신하는 방식을 구분해 작성합니다.
- 매개변수와 generate로 실행 전에 회로 구조를 정하고, 경곗값으로 설정했을 때도 검증합니다.
- 이름으로 포트를 연결하고 함수를 활용해 모듈을 구성합니다.
- 입력 변경과 결과 확인 시점에 레이스가 생기지 않도록 테스트벤치를 작성하고 독립적인 참조 모델로 검사합니다.
- 컴파일·시뮬레이션·합성·DDS 실행 결과로 각각 무엇을 확인할 수 있는지 구분합니다.
시작하기 전에
브라우저 실습은 교육용 모델이며 HDL을 컴파일·실행하지 않습니다. 제공된 소스를 별도로 실행하려면 운영체제에 맞는 Digital Design Studio 안내를 따르고 해당 작업에서 요구할 때 로그인하세요.
설치·첫 실행 안내 ↗ · 다운로드 ↗커리큘럼
- RTL과 모듈 인터페이스
- RTL: 동시에 동작하는 회로를 기술하기개념
소프트웨어의 실행 순서와 하드웨어의 병렬 구조를 구분하고, 현재 상태·다음 상태와 값을 확인할 시점을 정합니다.
- 신호와 포트: 폭·방향·유효 시점개념
인터페이스의 동작 조건을 읽고, 조합 출력과 레지스터에 저장된 출력을 각각 언제 검사할지 정합니다.
- 모듈·포트·인스턴스: 연결과 동작 조건개념
조합 모듈의 포트를 이름으로 연결하고, 각 신호를 한 곳에서만 구동하는지와 모듈 사이의 연결을 확인합니다.
- 이해 확인: 조합 출력과 저장된 출력이해 확인
입력을 바꾼 시점과 레지스터를 관찰하는 시점을 구분합니다.
- 타입·폭·부호와 표현식
- logic·wire·X/Z와 명시적인 비트 폭개념
타입 선언이 저장소자를 결정하지 않음을 이해하고 리터럴·비교·확장·알 수 없는 값을 검증합니다.
- 벡터 인덱스, 비트 순서와 부호개념
비트 번호·직렬 전송 순서·산술 해석을 분리해 데이터 경로를 읽습니다.
- 슬라이스·연결·반복 연산의 폭개념
연결된 신호의 전체 폭과 값 보존 조건을 계산하며 데이터 경로를 구성합니다.
- 2의 보수, 부호 확장과 오버플로개념
signed 비트열을 수로 읽는 방법과 덧셈에서 오버플로가 발생하는 조건을 수식과 반례로 확인합니다.
- 이해 확인: 표현 범위와 명시적인 확장이해 확인
가산기의 입력 폭과 출력 폭을 함께 확인합니다.
- 대입 누락 없는 조합 RTL과 검증
- 조합 RTL: 모든 조건에서 출력 대입하기개념
조건 연산자와 always_comb로 같은 조합논리를 표현하고, 대입을 빠뜨려 래치가 생기는 경우를 찾습니다.
- 인코더와 우선순위: 여러 요청 중 하나 고르기개념
원핫 인코더가 가정하는 입력 조건을 확인하고, 우선순위 인코더의 valid와 선택 결과를 함께 읽습니다.
- MUX 검증: 전수 검사와 속성개념
어떤 입력 조합을 검사했는지 확인하고, 저장 동작을 별도로 검사하며 오류를 재현하는 입력열을 줄입니다.
- 설계 확인: 선택 회로의 등가성과 관찰 시점이해 확인
진리표로 확인할 수 있는 동작과 클록 에지에 맞춰 확인해야 하는 동작을 구분합니다.
- 상태·대입·리셋의 우선순위
- 플립플롭, enable과 제어 우선순위개념
유지·적재·리셋을 다음 상태 식으로 정의하고 의도하지 않은 클록 게이팅을 피합니다.
- Nonblocking 대입과 동시 상태 갱신개념
이전 값과 다음 값을 분리해 파이프라인·카운터 RTL을 정확히 해석합니다.
- 모듈러·포화 카운터와 종료 펄스개념
최댓값을 넘을 때의 동작을 정하고, 종료 신호가 어느 사이클에 나와야 하는지 설계합니다.
- 실습: 카운터의 리셋·순환·불변식 검증실습
각 상승 에지의 상태를 참조 모델과 대조하고, 초기값·리셋·비트 폭의 영향을 분리합니다.
- 설계 확인: 폭·우선순위·순환의 경계이해 확인
주어진 상태 전이 명세로 경계값과 동시 제어 입력을 판단합니다.
- 매개변수와 정적 구조 생성
- parameter·localparam·$clog2와 경곗값 검증개념
실행 중 입력과 정적 설정을 분리하고, N=1이거나 N이 2의 거듭제곱이 아닌 카운터의 폭과 종료 동작을 설계합니다.
- generate: 반복문으로 정적 회로 만들기개념
genvar와 generate-if를 사용해 이름 붙은 회로 인스턴스를 만들고 버스의 lane 배치를 확인합니다.
- function automatic과 표현식의 재사용개념
시뮬레이션 시간을 진행시키지 않는 함수를 작성하고, 반환값의 폭·부호와 참조 모델이 구현에 의존하지 않는지 확인합니다.
- 이해 확인: N=1과 비트 폭이해 확인
최소 폭을 보장하는 선언과 카운터의 실제 상태 수를 구분합니다.
- 테스트벤치와 독립 검증
- 파형의 샘플링 시점과 인과관계개념
조합 안정화, 클록 캡처와 이벤트 순서를 분리해 파형을 읽습니다.
- 실습: 스스로 실패를 보고하는 테스트벤치실습
DUT·테스트 입력·참조 모델·판정을 분리하고, 레이스가 생기지 않는 시점에 reset·enable·순환 동작을 검사합니다.
- 검증 계획, 커버리지와 독립 참조 모델개념
테스트를 통과한 것과 명세를 충족한 것을 구분하고, 경곗값·여러 조건의 조합·최소 반례를 검증 계획에 포함합니다.
- 카운터 디버깅과 최소 반례개념
리셋·enable·순환 경계의 오류를 구별하는 짧은 테스트를 설계합니다.
- 이해 확인: 참조 모델과 레이스이해 확인
DUT와 독립적으로 기대값을 구하고, 에지에서 갱신이 끝난 뒤 결과를 확인하는 방법을 선택합니다.
- 모듈 연결과 종합 실습
- 상태 기계: 상태·전이·출력의 분리개념
상태 전이표로 FSM을 작성하고, Moore·Mealy 출력과 허용하지 않는 상태, 요청 처리 방식을 비교합니다.
- 종합 설계: 겹치는 101 패턴 검출기개념
상태 최소화, 입력 유효성, 레지스터 출력과 독립 참조 검증을 하나의 설계에 적용합니다.
- Ready/valid와 입출력을 동시에 처리하는 1칸 버퍼개념
정지할 수 있는 데이터 경로에서 손실·중복 없는 전달 조건과 동시 입출력을 설계합니다.
- 곱셈·덧셈 파이프라인과 데이터 정렬개념
연산을 레지스터로 나눈 단계에 배치하고, 같은 입력에 속하는 데이터·valid·보조 피연산자가 함께 처리되도록 설계합니다.
- 종합 실습: 주기 펄스와 enable 누산기 연결실습
모듈이 이전 에지에 저장한 값을 전달받아 계산하는 동작을 정하고, enable 정지·연속 펄스·동시 리셋을 참조 모델과 대조합니다.
- 도구의 진단과 결과 해석
- Setup·hold와 타이밍 예산개념
최대·최소 경로 지연을 나누고 클록 주파수와 별개인 hold 조건을 계산합니다.
- 클록 도메인 경계와 metastability개념
2단 동기화기의 적용 범위를 이해하고, 단일 비트·짧은 펄스·다중 비트 전송을 구분합니다.
- 컴파일·lint·합성: 각 도구가 확인하는 것개념
소스 목록·top·언어 모드를 고정하고 문법 오류, 폭 경고, 래치와 실제 기능 검증을 구분합니다.
- 실행 기록 정리와 DDS 실습개념
소스·입력·기대값·실패 조건·도구 버전을 묶어 재현 가능한 실습 결과를 제출합니다.
- 최종 확인: 기능 검증과 DDS 실행 결과이해 확인
로컬 도구에서 확인한 결과와 DDS 무료 실습의 완료 기준을 충족한 결과를 구분합니다.