아마 내가 생각했던 것보다이 질문에 더 많은 시간을 보냈지 만 여기에 나의 발견이 있습니다.
음수에 대한 "순수한"병렬 접두사 가산기의 예를 찾을 수 없습니다. 또한 그것이 불가능 하다는 증거를 보지 못했기 때문에 그것이 열린 문제라고 생각 합니다.
내가 얻을 수있는 가장 가까운 것은 2 단계 음의 음수 추가 (일반적으로 문헌에서 nnba로 약칭 됨)를 사용하는 것입니다. 다음 특성을 기반으로합니다.
f(x)=xn−1¯¯¯¯¯¯¯¯¯¯xn−2...x1¯¯¯¯¯x0g(x)=xn−1xn−2¯¯¯¯¯¯¯¯¯¯...x1x0¯¯¯¯¯0xAA...AA
0x55...55
−(a+nbb)=g(f(a)+f(b)+1)
+nb+
그런 다음 음수 합계는 동일한 속성을 사용하지만 피연산자는 0으로 간단히 반전시킬 수 있습니다.
−x=g(f(x)+f(0)+1)
따라서 병렬 접두사 가산기를 사용하여 합계를 찾으려면 다음을 수행 할 수 있습니다.
- f(a)f(b)
- LSB의 캐리 비트를 설정하는 동안 일반 이진 합계를 계산합니다 ( +1s1
- s1f(g(s1))
- 결과를
0xAA...AB
(= f( 0 ) + 1) 병렬 접두사 가산기를 사용하여 두 번째 중간 합계 에스2
- 계산 지( s2) (마이너스 비트를 반전) 최종 음수 합계를 찾습니다.
나는 실제로 "순수한"병렬 프리픽스 가산기를 찾으려고 노력했지만, 그것을 기꺼이 소비 할 시간에는 너무 복잡하다고 생각했다. 이유는 다음과 같습니다.
병렬 접두사 가산기의 요점은 { 0 , 1 }엔× { 0 , 1 }엔→ { 0 , 1 }엔이 비트에서 (이 경우 2) 캐리를 쉽게 계산할 수 있습니다. 추가 제약 조건으로 작업 을 병렬로 계산 하려면 작업을 연관 시켜야합니다 . 예를 들어, 이것은 기본적으로 NOT 연산자 (이중 부정의 일부가 아님)를 제외합니다. 예를 들면 다음과 같습니다.a ∘ b = a ⋅ b¯ is not an associative operator, because
(a∘b)∘ca∘(b∘c)=a⋅b¯⋅c¯=a⋅b⋅c¯¯¯¯¯¯¯¯¯¯
Note that the boolean operator for the carries in your question includes the mixed terms c+ic−i¯¯¯¯¯ and c−ic+i¯¯¯¯¯,있는 그대로 사용할 수 없습니다. 일반 이진 덧셈의 단일 캐리의 경우 생성 및 전파 측면에서이 연산자를 생각할 때이 연산자를 구성하는 방법이 상당히 분명해 졌지만, 부정적 캐리에서는 그렇게 명확하지 않은 것 같습니다.