본문으로 건너뛰기
code0.HDL

09구현 문제

비공개 패키지 상수 정의하기

1. 목표와 수정 범위

Meter는 charge, total, remaining, full을 공개합니다. 네 method가 함께 따르는 한계는 패키지 수준 상수 budget 하나에서 나옵니다. budget은 모든 모듈 밖에 선언되어 있고, 호출자는 이 상수를 볼 수 없습니다.

TODO 위치의 budget은 아직 don't-care value입니다. mkTop의 drive는 한 번에 3단위씩 charge를 호출합니다. 12단위를 쓰면 charge가 더 이상 받아들여지지 않고, 그때 remaining은 0, full은 참이어야 합니다.

수정 대상은 패키지 수준 budget 정의 하나입니다. method 본문과 두 보고 method는 계속 budget이라는 이름을 사용합니다.

2. starter 읽기와 예측

budget이 쓰이는 세 곳을 찾아보세요.

위치budget의 역할
charge의 준비 조건충전을 더 받아들일지 결정합니다
remaining남은 단위를 계산합니다
full한계에 도달했는지 보고합니다

수정하기 전에, budget이 ?인 상태에서 세 관찰값이 하나의 정책을 일관되게 설명할 수 있는지 예측해 보세요. 정해지지 않은 값을 세 곳이 함께 읽으면 출력은 특정한 한계를 나타내지 않습니다.

3. 수정과 설명

budget에 값을 정의한 뒤 실행해 보세요. spent는 0에서 시작해 3씩 증가하고, 네 번째 charge 뒤에 12가 됩니다. 그 뒤로는 준비 조건이 거짓이 되어 drive가 실행되지 않습니다. 마지막 출력에서 total, remaining, full이 모두 같은 상태를 설명하는지 확인하세요.

4. 완료 조건

  • budget을 12로 정의합니다.
  • 준비 조건과 두 보고 method가 같은 값을 읽도록 budget을 패키지 수준에 둡니다.
  • 모듈 안에서 한계를 리터럴로 반복하지 않습니다.
  • 마지막 출력뿐 아니라 받아들인 호출 수의 경계도 유지합니다. 추가 charge를 받아들인 뒤 출력만 맞추면 완료가 아닙니다.

5. 단계형 힌트

힌트 1

패키지 수준 상수는 모듈 밖에 둔 타입 있는 정의입니다. 먼저 budget을 사용하는 위치를 모두 찾아보세요.

힌트 2

charge는 한 번에 3단위를 받고 12에서 멈춰야 하므로 네 번의 호출만 받아들여집니다.

개념 설명

패키지 수준 상수는 특정 모듈이 아니라 패키지에 속합니다. 정의 하나가 method의 준비 조건과 인터페이스가 보고하는 값을 모두 결정하지만, 호출자에게는 보이지 않습니다.

6. 추가 실험

필수 수정을 마친 뒤 budget은 12로 두고, 충전 단위가 3이 아니라 5라고 가정해 보세요. 현재 준비 조건은 충전 전의 spent만 검사하므로 12를 넘기는 충전도 받아들입니다. 채점 대상 코드는 바꾸지 마세요. 고정 단위로 충전하는 규약과 요청마다 남은 한도를 검사하는 정책이 어떻게 다른지 설명해 보세요.

개념 다시 보기
준비
Main.bsv