31검증 문제
패리티 프레임 완성하기
1. 문제와 수정 범위
encodeFrame은 7번부터 1번 비트에 ready, 3비트 code, 3비트 count를 차례로
배치하고, 0번 비트에 이 7비트 전체의 패리티를 넣어야 합니다. 패리티 비트는 1인 비트가
홀수 개일 때 1입니다. starter는 0번 비트를 상수 0으로 채웁니다. 1인 비트가 짝수 개인
입력은 우연히 맞지만, mkTop의 sample은 d7이 아니라 d6으로 출력됩니다.
encodeFrame의 반환 식만 수정하세요. 인자, Bit#(8) 반환 타입, 필드 배치는 유지하고
mkTop은 바꾸지 않습니다.
2. starter 읽기와 실행 전 계산
body 선언부터 읽고 각 피연산자의 폭을 더해 보세요. pack(ready)는 1비트, code와
count는 3비트씩이므로 body는 7비트입니다. 비트 연결에서는 왼쪽 피연산자가 상위
비트를 차지하므로 필드 위치도 이 선언에서 정해집니다.
sample의 body는 1_101_011이고, 1인 비트는 다섯 개입니다. 실행을 누르기 전에 현재
반환 식이 만드는 0번 비트와 올바른 패리티 비트를 따로 적어 보세요. 실행 결과에서 상위
7비트는 맞고 0번 비트 하나만 다르다는 것을 확인할 수 있습니다. 결함은 반환하는 비트
연결의 마지막 1비트 피연산자에 있습니다.
3. 최소 수정과 완료 조건
마지막 피연산자 하나만 고치세요. 완성된 body를 다시 조립하거나 필드 순서를 바꾸면
이미 맞는 부분까지 망가집니다. 7비트 입력에서 1비트 결과를 만드는 연산을 골라 기존
body에 적용합니다.
| 입력 조건 | 기대 결과 |
|---|---|
임의의 ready, code, count | 7번부터 1번 비트에 세 필드가 그대로 놓입니다 |
body의 1인 비트가 짝수 개 | 0번 비트가 0입니다 |
body의 1인 비트가 홀수 개 | 0번 비트가 1입니다 |
body의 비트 하나만 반전 | 해당 비트와 패리티 비트만 바뀝니다 |
수정한 뒤 실행에서 d7을 확인하세요. 결과가 8비트인 이유를 7비트 body와 1비트
패리티의 합으로 설명해 보세요. sample 하나를 상수로 처리하면 위 표의 나머지 행을
만족하지 못합니다.
4. 단계형 힌트
힌트 1: 계산 범위
패리티는 필드 하나나 조립 중인 8비트 프레임이 아니라 body의 7비트 전체로 계산합니다.
힌트 2: 결과 폭
반환하는 비트 연결에 넣을 식이 Bit#(1)이어야 Bit#(8) 반환 타입이 유지됩니다.
힌트 3: 연산자
단항 XOR 축약 연산은 벡터 하나를 받아 1비트를 반환합니다. 이 연산을 기존 지역 변수에 적용하고, 결과는 최하위 위치에 두세요.
5. 추가 실험
수정을 마친 뒤 별도 사본에서 패리티를 7번 비트로 옮기고 body를 6번부터 0번 비트에
배치해 보세요. 패리티 계산은 그대로이고, 비트 연결 순서와 필드를 꺼내는 비트 범위만
바뀐다고 예측할 수 있습니다. 제출하기 전에는 원래 배치로 되돌리세요.