본문으로 건너뛰기
code0.HDL

05검증 문제

반가산기 두 개로 전가산기 연결하기

1. 요구 동작

full_adder는 1비트 입력 a, b, cin을 더해 2비트 결과 {cout, sum}을 출력합니다. 회로는 제공된 half_adder 인스턴스 두 개로 구성합니다.

인스턴스입력출력
firsta, b부분합 s1, 자리올림 c1
seconds1, cinsum, 자리올림 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. 진단 순서

  1. 두 인스턴스를 상자로 그립니다.
  2. 이름 연결 .port(net)마다 해당 포트 옆에 연결된 net 이름을 적습니다.
  3. 틀린 줄 하나의 입력값을 그림에 대입해, 두 번째 반가산기까지 전달되지 않는 입력을 찾습니다.

수정하기 전에 올바른 표를 예측해 보세요. {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의 교환 법칙으로 예측의 근거를 설명해 보세요.

개념 다시 보기
준비
Main.v