최상의 답변
진실 표는 가능한 모든 조합에 대한 부울 함수의 출력을 제공하는 표입니다. 입력. 완전 가산기는 두 개의 2 비트 정수가 주어지면 이월을 포함하여 해당 정수의 합계를 제공하는 부울 함수 (또는이를 구현하는 하드웨어 부분)입니다. (반가산기는 숫자 만 더하고 이월은 무시합니다). 입력으로 2 비트 정수가 두 개인 경우 가능한 입력은 16 개이므로 테이블에는 16 개의 행이 있습니다. 다음은 입력이 비트가있는 a 및 b 인 경우 출력이 xabx 00 000000 00 01 001 00 10 010 00 1 1 011 01 00 001 01 01 010 01 10 011 01 11100 11 00 011 10 01 인 경우 어떻게 표시되는지 보여줍니다. 011 10 10 100 10 11 101 11 00 011 11 01100 11 10 101 11 11 110
답변
glib 대답은 “디자이너가 원하는대로”입니다.
1970 년대 후반에 컴퓨터 디자인을 공부하기 시작했을 때 저는 수학 및 컴퓨터 프로그래밍에 대한 배경 지식이있었습니다. 초기 작업 중 일부는 명령 세트의 디자인과 구현을 포함했습니다. 특히 산술 연산에 관한 것입니다.이 모든 작업을 수행하려면 컴퓨터 산술에 대한 이해를 쌓아야했고, 배경 때문에 약간 추상적이고 수학적 관점에서 작업을 수행했습니다. 기능 (예 : 가산기)과 그 구현을 설명하는 많은 전자 및 컴퓨터 디자인 교과서에 있지만 항상 동기를 부여하지는 않았습니다.
동기 가산기를 구현하는 방법은 숫자를 나타내는 두 개의 비트 세트 ( “단어”)를 가져 와서 해당 비트의 합계를 나타내는 출력을 생성하는 것입니다. 여기서 물어볼 세 가지 주요 질문이 있습니다. 첫째, 우리가 나타내려는 숫자는 무엇입니까? 둘째, 이러한 숫자는 비트로 어떻게 표현됩니까? 셋째, 두 숫자의 합을 비트 집합으로 표현할 수없는 경우 어떻게됩니까?
일반적인 상황 (N 비트, 리틀 엔디안, 부호없는 정수)은 N 비트 단어는 정수를 나타내는 데 사용되며 [0,2^N-1],
단어는 B[N-1]...B[0]
값을 ΣB[i]2^i: i in [0,N-1].
세 번째 질문은 문제입니다. 두 입력의 합이 [0,2*(2^N-1)]
범위에있을 수 있으므로 표현할 수없는 결과가 있습니다.
A “N- 비트 가산기”의 간단한 교과서 구현은 N “1 비트 전체 가산기”에서 빌드합니다. N 개의 피연산자 비트의 2 세트 외에 캐리 인 비트 (0으로 강제 적용)와 캐리 아웃 비트가 있습니다. 덧셈의 수학적 결과를 나타낼 수 있다면 덧셈기의 N 비트 결과는 결과의 올바른 표현이되고 캐리 아웃은 0이됩니다. 반면에 다음과 같은 수학적 결과는 덧셈을 표현할 수없는 경우 덧셈기의 N 비트 결과는 모듈로 2 ^ N의 결과를 올바르게 표현하고 캐리 아웃은 1이됩니다. 요약하자면,이 덧셈기는 항상 모듈로 2의 올바른 결과를 생성합니다. ^ N 및 수행은 올바른 결과를 나타낼 수 없음을 나타냅니다. 일부 컴퓨터 시스템에서는이를 오류로 처리하고 플래그에 기록하거나 예외를 발생시키기를 원할 것입니다.
또 다른 일반적인 상황 (N 비트, 리틀 엔디안, 부호있는 2의 보수 정수)은 N 비트 단어는 정수를 나타내는 데 사용되며 [-2^(N-1),2^(N-1)-1],
단어는 B[N-1]...B[0]
값을 나타냅니다. -B[N-1]*2^N + ΣB[i]2^i: i in [0,N-1]*.
다시 말하지만 표현할 수없는 결과가 있습니다. 앞에서 설명한 가산기는 모든 표현 가능한 결과에 대해 올바른 결과를 생성했습니다 (이것이 2의 보완 산술이 사용되는 이유입니다). 그러나 수행은 결과가 표현 가능한지 여부를 나타내지 않습니다. (캐리 아웃을 생성하는 -1 + 1 = 0이고 그렇지 않은 0 + 0 = 0을 고려하십시오). 2의 보수의 경우 표현할 수없는 결과 (일반적으로 “오버플로”라고 함)를 나타내는 조건은 결과의 부호 비트 (최상위 비트)가 “예기치 않은”이라는 것입니다. 즉, 두 음수의 합이 양수인 것처럼 보입니다. 두 양수의 합은 음수로 나타납니다 (독자에게 두 수의 서로 다른 기호의 합이 항상 표현 될 수 있음을 보여주기 위해 연습하십시오).
일부 다른 표현은 동일한 가산기를 사용할 수 있습니다. 부호있는 정수와 부호없는 정수로. 단어의 값이 정수로 처리되고 2의 거듭 제곱으로 나눈 단어의 값인 분수 표현의 경우 가산기는 값이 표현 가능할 때 올바른 결과를 생성합니다. 그러나 이러한 표현을 사용하는 시스템에서 때때로 원하는 동작은 결과가 “포화”되는 것입니다. 즉, 결과가 범위를 벗어난 경우 합계가 가장 긍정적이거나 가장 부정적인 값입니다. 다른 시스템 2 값 중 하나 (일반적으로 10… 0)는 오류 값으로 사용되며 추가 작업을 통해 전파됩니다. 이 경우 특별한 가산기가 필요합니다.
*이 공식은 2의 보수 형식을 명시합니다. 단어의 부호있는 값은 단어의 부호없는 값에서 상위 비트 (부호 비트)의 2 ^ N을 뺀 값입니다. 마찬가지로 값은 0 또는 +1이 아닌 0 또는 -1을 나타내는 최상위 비트에 해당하는 -B[N-1]*2^(N-1) + ΣB[i]2^i: i in [0,N-2]
로 쓸 수 있습니다.