본문으로 건너뛰기
code0.HDL

11구현 문제

니블을 0으로 확장하기

1. 결과의 상·하위 필드 먼저 정하기

zeroExtendNibble은 모든 Bit#(4) 입력을 8비트로 확장해야 합니다. 결과의 상위 4비트는 항상 0이고 하위 4비트는 입력과 같아야 합니다. 4'hf만 8'h0f로 만드는 고정 결과는 이 계약을 만족하지 않습니다.

starter는 함수 시그니처, upper와 lower의 수정 가능한 선언 두 개, 연결식, mkTop 순서로 읽어 보세요. { upper, lower }의 전체 폭은 이미 8비트입니다. 첫 필드가 상위 비트라는 규칙을 적용해, 입력이 4'hf일 때 8'h0f와 8'hf0 중 어느 배치가 필요한지 예측해 보세요. ?는 정해진 하드웨어 값을 보장하지 않으므로 수정 전 실행 결과만으로는 올바른 변환을 확인할 수 없습니다.

수정 범위는 TODO가 표시된 선언 두 개뿐입니다. 함수 시그니처, 연결식, package와 mkTop은 그대로 두세요.

2. 두 필드의 역할만 정하는 최소 수정

반환식의 폭과 순서는 이미 요구 사항에 맞습니다. 한 지역 값은 입력과 관계없이 4비트 0을 제공해야 하고, 다른 지역 값은 입력의 네 비트를 그대로 전달해야 합니다. 산술식, 레지스터, rule, 넓은 중간 값은 필요하지 않습니다.

수정한 뒤 실행에서 두 16진수 자리를 따로 확인하세요. 앞자리로 상위 필드가 0인지, 뒷자리로 입력이 하위 필드에 남았는지 판단합니다.

3. 완료 조건

다음 관찰이 모든 4비트 입력에서 성립해야 합니다.

  • 반환 타입은 Bit#(8)입니다.
  • 결과 [7:4]는 항상 0입니다.
  • 결과 [3:0]은 입력과 비트 단위로 같습니다.
  • 0, 한 비트만 1인 값, 혼합 패턴, 모든 비트가 1인 값에서 같은 관계가 유지됩니다.

4. 단계형 힌트

힌트 1: 폭 계산

현재 연결식에 쓰인 두 피연산자의 폭을 더해 보세요. 8비트를 만드는 구조는 이미 완성되어 있습니다.

힌트 2: 필드 위치

연결식은 상위 필드부터 씁니다. 입력과 무관한 필드와 입력을 전달할 필드를 구분하세요.

힌트 3: 선언 선택

상위 지역 값에는 폭을 지정한 0을 쓰고, 하위 지역 값에는 인자를 전달하세요. 반환식은 바꾸지 않습니다.

5. 추가 실험

정상 동작을 확인한 뒤 연결식의 두 이름만 잠시 맞바꾸고, 4'h3처럼 0도 아니고 모든 비트가 같지도 않은 입력으로 실행해 보세요. 실행하기 전에 두 16진수 자리가 어떻게 바뀔지 예측해 보세요. 실험이 끝나면 원래 순서로 되돌리세요. 전체 폭이 맞아도 필드 배치는 틀릴 수 있다는 점을 확인하는 실험입니다.

개념 다시 보기
준비
Main.bsv