'boolean nand'를 사용하여 모든 부울 논리를 빌드하는 방법과 유사한 'bitwise nand'를 사용하여 모든 비트 연산자를 정의 할 수 있습니까?


9

Nand 다른 모든 부울 논리 게이트를 정의 할 수 있기 때문에 '범용'논리 게이트라고합니다.

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

이것은 nand-logic 으로 알려져 있으며 , 트랜지스터가 낸드 게이트처럼 동작하도록 만들 수 있기 때문에 최신 컴퓨터에서 일반적으로 사용됩니다.

비트 단위 작업과 비슷한 작업을 수행 할 수 있는지 궁금합니다. 할 수있는 예를 들어, 비트 낸드 (bnand)를 정의하는 데 사용할 수 bnot, bor, band, bnor, bxor? 보편적 인 비트 단위 연산이 있습니까?

답변:


13

하드웨어 수준에서는 비트 단위와 논리 단위 사이에 차이가 없습니다. 예. 논리 연산은 단일 비트에 대한 비트 연산입니다.


2

대부분의 최신 마이크로 프로세서에서 비트 단위 연산은 기본적으로 구현되므로 NAND 연산의 이점이 없습니다.

예를 들어 x86 명령어 세트에는 AND , OR , XOR , NOT이 있습니다. 이 모든 것은 내가 아는 한 단일 사이클로 수행되므로 여러 NAND 작업으로 대체하면 아무런 이점이 없습니다. 또한 ANDN((NOT x) AND y)있어 영리한 최적화 컴파일러로 생성하여주기를 얻을 수 있습니다.

RISC의 운동은 간단 an 더 성능이 좋은 아키텍처 감소 된 명령어 세트를 촉진하기 위해 노력했다. 아이디어는 컴파일러가 더 간단하고 빠른 명령어를 결합해야한다는 것이 었습니다. 그러나 일부 실험 또는 티칭 프로세서와 는 별도로 , 대부분의 비트 연산 (예 : PowerPC 또는 ARM ) 뿐만 아니라 기본적으로 NAND를 제공 하는 것으로 보입니다 .


요즘 CPU에서 부울 연산자가 어떻게 구현되는지 잘 모르겠지만 4 대 1 mux를 사용하여 "진실 테이블"을 4 개의 입력으로 사용하는 것이 일반적이었습니다. 출력 선택기로 작동합니다. 16 개의 2 개 연산 부울 함수 모두에 사용할 수있는 단일 회로를 제공합니다.
Vatine

2
OR, XOR 및 NOT이 "기본적으로"구현되고 단일 클록 사이클을 넘지 않는다는 사실은 NAND 회로만을 사용하여 구축되는지 또는 아닌지에 대해서는 아무 것도 말하지 않습니다. 트랜지스터가 정말 저렴하고 빠르기 때문에 NAND 만 사용하여 빌드하는 것으로 생각됩니다. Vatine의 4- 대 -1 방법은 나노 미터 시대에 무의미한 소수의 트랜지스터를 사용하도록 최적화되었습니다.
Martin Maat

RISC는 시간이지나면서 무의미 해졌습니다. 그것이 발생했을 때 전형적인 복잡한 명령어는 10 번 정도의 여러 클럭 사이클을 필요로했습니다. 그리고 이것은 OR / AND / NOT에 관한 것이 아니고, 이것들은 이미 "간단한"것으로 간주되어 모든 CPU에 필수적이므로 RISC 프로세서에 의해 확실히 삭제되지 않을 것입니다. 오늘날, 복잡한 명령어는 (파이프 라이닝 및 멀티 스레딩 / 멀티 코어로 인해) 클럭 사이클보다 덜 소요됩니다.
Martin Maat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.