본문으로 건너뛰기
code0.HDL

05검증 문제

마스크 리터럴의 폭 맞추기

1. 고칠 동작

lowNibbleOf는 8비트 입력의 하위 4비트만 남기고 상위 4비트를 0으로 지워야 합니다. starter에는 비트 AND가 이미 있지만 mask가 채움 리터럴 '1입니다. Bit#(8) 문맥에서 '1은 여덟 비트를 모두 1로 채우므로, AND 결과는 입력과 같고 어떤 비트도 지워지지 않습니다.

함수의 인자와 반환 타입, & 연산은 그대로 두고 마스크 리터럴만 수정하세요.

2. 실행 전에 계산하기

먼저 mask 선언의 폭을 확인하세요. 그 폭에 맞춰 '1을 비트 패턴으로 펼친 뒤, 세 입력의 현재 결과와 목표 결과를 적어 보세요.

입력starter 결과목표 결과
8'ha58'ha58'h05
8'hf08'hf08'h00
8'h3c8'h3c8'h0c

수정하기 전 코드를 한 번 실행해 starter 결과 열과 같은지 확인해 보세요.

3. 한 줄만 수정하기

Bit#(8) mask 선언에 폭을 명시한 16진 리터럴을 쓰세요. 상위 니블은 모두 0, 하위 니블은 모두 1인 비트 패턴이어야 합니다. 마스크 변수와 return value & mask;는 그대로 둡니다.

수정한 뒤 다시 실행해 표의 목표 결과 세 개가 모두 나오는지 확인하세요. 상위 4비트는 입력과 관계없이 0이고, 하위 4비트는 입력과 같아야 합니다. 화면의 세 입력에만 맞춘 상수 반환은 다른 입력에서 실패합니다.

4. 폭과 값 구분하기

크기 지정 리터럴은 폭과 비트 패턴을 소스에 함께 기록합니다. 채움 리터럴은 자체 폭이 없어서 대입되는 문맥의 폭 전체를 채웁니다. 8비트 변수에 대입한 '1은 8'hff와 같은 값이 되고, AND 마스크로 쓰면 입력을 그대로 통과시킵니다. 고정된 마스크에는 폭과 패턴이 함께 드러나는 크기 지정 리터럴이 알맞습니다.

5. 단계형 힌트

힌트 1

8비트를 네 비트씩 두 묶음으로 나누어 적어 보세요. 지울 묶음과 남길 묶음에 각각 어떤 비트가 필요한지 정합니다.

힌트 2

16진수 한 자리는 4비트입니다. 두 자리 16진 값 앞에 8비트 폭을 명시하면 마스크의 폭과 패턴이 소스에 함께 드러납니다.

6. 추가 실험

필수 동작을 확인한 뒤, 잠시 하위 3비트만 남기는 마스크를 계산해 보세요. 이때 8'h3c의 결과는 8'h04여야 합니다. 실행으로 예측을 확인한 다음, 제출하기 전에는 하위 4비트를 남기는 원래 마스크로 되돌리세요.

개념 다시 보기
준비
Main.bsv