05검증 문제
반가산기 두 개로 전가산기 연결하기
1. 요구 동작
full_adder는 1비트 입력 a, b, cin을 더해 2비트 결과 {cout, sum}을
출력합니다. 회로는 제공된 half_adder 인스턴스 두 개로 구성합니다.
| 인스턴스 | 입력 | 출력 |
|---|---|---|
first | a, b | 부분합 s1, 자리올림 c1 |
second | s1, cin | sum, 자리올림 c2 |
cout은 두 반가산기 가운데 하나라도 자리올림을 만들면 1이 됩니다.
2. 현재 증상
시작 코드는 컴파일되고 입력 조합 8개를 모두 출력하지만, 몇 줄은 틀립니다.
a=0 b=1 cin=0
에서는 합계가 0으로, a=1 b=1 cin=1에서는 3 대신 2로 출력됩니다. half_adder는
올바릅니다. 두 모듈의 포트는 그대로 두고 full_adder 안의 잘못된 포트 연결 하나를
고치세요.
3. 진단 순서
- 두 인스턴스를 상자로 그립니다.
- 이름 연결
.port(net)마다 해당 포트 옆에 연결된 net 이름을 적습니다. - 틀린 줄 하나의 입력값을 그림에 대입해, 두 번째 반가산기까지 전달되지 않는 입력을 찾습니다.
수정하기 전에 올바른 표를 예측해 보세요. {cout, sum}은 a, b, cin 가운데 1의
개수를 2진수로 나타낸 값이어야 합니다. 연결 하나를 고쳐 실행한 뒤 여덟 줄을 예측한 표와
비교하세요. 마지막으로 이 실수가 컴파일 오류로 이어지지 않은 이유를 설명해 보세요. 잘못된
목록의 net은 모두 존재하고 폭도 맞으므로, 연결은 문법상 올바르지만 다른 회로를 뜻합니다.
4. 완료 조건
a,b,cin의 조합 8개 모두에서{cout, sum}이 산술 합과 같습니다. 입력이 바뀌는 순서와 관계없이 성립해야 합니다.- 출력은 두
half_adder인스턴스를 거쳐 세 입력 모두에 의존합니다. half_adder와 포트 목록은 바꾸지 않습니다.
5. 단계형 힌트
힌트 1
틀린 줄은 모두 b가 1입니다. 현재 연결에서 b가 sum에 영향을 줄 수 있는지 확인해
보세요.
힌트 2
내부 net s1은 첫 번째 인스턴스가 구동합니다. s1을 읽는 곳이 있는지 찾아보세요.
힌트 3
두 번째 반가산기는 첫 번째 반가산기의 부분합과 cin을 더해야 합니다. 두 번째
인스턴스의 입력 포트에 연결된 net과 비교해 보세요.
6. 추가 실험
두 인스턴스의 .carry 연결을 서로 바꾸면 표가 어떻게 될지 예측해 보세요. 이 교환이 모든
줄을 그대로 두는 이유를 설명해 보세요. 각 반가산기의 두 입력 net을 서로 바꿔도 결과가
같을까요? OR, XOR, AND의 교환 법칙으로 예측의 근거를 설명해 보세요.