Làm thế nào để xây dựng cổng XOR chỉ bằng 4 cổng NAND?


15

xorcổng, bây giờ tôi cần xây dựng cổng này chỉ bằng 4 nandcổng

a b out
0 0 0
0 1 1
1 0 1
1 1 0

các xor = (a and not b) or (not a and b), đó là

A¯B+AB¯

Tôi biết câu trả lời nhưng làm thế nào để có được sơ đồ cổng từ công thức?

cổng xor

BIÊN TẬP

Ý tôi là theo trực giác, với tôi, tôi nên lấy cái này nếu tôi làm từng bước theo định nghĩa xor = (a and not b) or (not a and b).

A¯B¯AB¯¯¯

xorsẽ được xây dựng với 5 nandcổng (hình ảnh số 1 đầu tiên bên dưới)

cổng xor 2

Câu hỏi của tôi giống như: hãy tưởng tượng người đầu tiên trong lịch sử tìm ra công thức này, làm thế nào anh ta hoặc cô ta (quá trình suy nghĩ) có thể nhận được 4 nandgiải pháp từ công thức này, từng bước một.

A¯B+AB¯

Tôi chắc chắn bạn biết cách lấy XOR (hoặc bất kỳ chức năng nào khác) và chuyển đổi nó thành một mạch tương đương chỉ sử dụng NAND (điều này luôn luôn có thể, vì NAND đã hoàn thành ). Tuy nhiên, nếu bạn hỏi làm thế nào để giảm công thức này xuống chỉ sử dụng 4 NAND, hoặc nói chung, ít hơn NAND và thậm chí có thể có được một mạch tương đương với k NAND không - tôi không chắc có dễ dàng không Trả lời cho điều đó. kk
Ran G.

Dưới đây là hai câu trả lời cho vấn đề. Mine khá thẳng thắn về việc bạn có thể thiết kế (một posteriori) một cách để tìm ra công trình mong muốn từ việc biết trước kết quả cuối cùng, được đưa ra trong câu hỏi và có sẵn trên Internet. Đó rõ ràng là cách làm đơn giản hơn, vô lý vì có vẻ như, không đưa ra một quy trình chung, mà không có câu trả lời nào được thực hiện. Do đó, tôi muốn biết lý do tại sao cử tri thích một câu trả lời hơn câu trả lời khác, khi họ làm ... nếu bạn sẽ dành thời gian cho một bình luận ngắn. Cảm ơn trước.
babou

Câu hỏi này được đưa ra để được đóng lại là không rõ ràng. Tôi nghĩ rằng OP có thể khá rõ ràng những gì OP đang hỏi và thú vị hơn nữa, nếu OP bận tâm phản ứng với những người dùng khác nhau cố gắng trả lời anh ta,
babou

Electronics.stackexchange.com/questions/84714/ - câu hỏi này mang tính khái quát hơn, các câu trả lời cung cấp thêm thông tin về cách tiếp cận chung để giải quyết vấn đề này và câu trả lời này là Electronics.stackexchange.com/a/84804 cho thấy cách lấy NAND đại diện cho nhà điều hành XOR
Anton Trunov

Tôi đã chơi xung quanh với một số vấn đề tương tự và chỉ viết một chương trình đã thử mọi thứ một cách có hệ thống ... Tốt cho tối đa bốn đầu vào, trong đó chỉ có 65.536 chức năng có thể. Đối với các mạch phức tạp hơn một chút, điều này cũng cho phép tôi tối ưu hóa độ trễ và tìm các mạch tối ưu nếu một hoặc hai đầu vào có sẵn muộn hơn các đầu vào khác. Mạch có 5 đầu vào = 2 ^ 32 chức năng có thể có thể thực hiện được bằng cách sử dụng lực lượng vũ phu.
gnasher729

Câu trả lời:


11

Từ công thức đó? Nó có thể được thực hiện. Nhưng nó dễ dàng hơn để bắt đầu với cái này: (sử dụng một ký hiệu khác ở đây)

a ^ b = ~(a & b) & (a | b)

Ok, bây giờ thì sao? Cuối cùng, chúng ta nên rút ra ~(~(~(a & b) & a) & ~(~(a & b) & b))(có vẻ như nó có 5 NAND, nhưng giống như sơ đồ mạch, nó có một biểu thức phụ được sử dụng hai lần).

Vì vậy, hãy tạo ra một cái gì đó trông giống ~(a & b) & a(và tương tự nhưng bở cuối) và hy vọng rằng nó sẽ dính xung quanh: ( andphân phối hơn or)

(~(a & b) & a) | (~(a & b) & b)

Bây giờ khá gần, chỉ cần áp dụng DeMorgan để biến phần giữa đó orthành and:

~(~(~(a & b) & a) & ~(~(a & b) & b))

Và đó là nó.


9

Tôi nghĩ rằng bạn đang yêu cầu bằng chứng này:

A^B = (!A)B + A(!B)
    = !!((!A)B) + !!(A(!B))
    = !(!!A + !B) + !(!A + !!B)
    = !(A + !B) + !(!A + B)
    = !((A + !B)(!A + B))
    = !(A(!A) + AB + (!A)(!B) + B(!B))
    = !(AB + (!A)(!B))
    = !(AB)(!(!A)(!B))
    = !(AB)(!!A + !!B)
    = !(AB)(A+B)
    = !(AB)A + !(AB)B
    = !!(!(AB)A + !(AB)B)
    = !((!(!(AB)A))(!(!(AB)B)))

Mặc dù rõ ràng có 5 NANDgiây được sử dụng trong phương trình kết quả, nhưng trùng lặp !(AB)sẽ chỉ được sử dụng một lần khi bạn thiết kế mạch của nó.


Tôi xin lỗi, nhưng không phải A ^ B có nghĩa là A VÀ B? Có vẻ như ý định của bạn là chứng minh XOR nên ký hiệu nào là hoặc. Tuy nhiên bằng chứng này là những gì tôi thực sự tìm kiếm, cảm ơn bạn!
osiixy

5

Vì bạn đã có câu trả lời sơ đồ, dễ dàng có sẵn từ wikipedia bằng cách nhập tiêu đề câu hỏi của bạn vào Google, dưới dạng sơ đồ .png giống hệt với bạn, bạn có thể dễ dàng tìm thấy công thức bằng cách trích xuất từ ​​sơ đồ đó. Với NAND định nghĩa như NAND(A,B)=AB¯:

  • Cổng tận cùng bên trái cho ;C=AB¯

  • Cổng đầu cho ;D1=AC¯

  • Cổng đầu cho , như NAND là commutatve như AND;D2=BC¯

  • Cổng ngoài cùng bên phải cung cấp cho .E=D1D2¯

Đặt tất cả lại với nhau, trước tiên chúng tôi lưu ý rằng

C=AB¯=A¯+B¯

D1¯=AC=A(A¯+B¯)=AA¯+AB¯=0+AB¯=AB¯

Tương tự như vậy: D2¯=BA¯

Do đó
E=D1D2¯=D1¯+D2¯=AB¯+BA¯

Đó chính xác là định nghĩa của XOR. Bạn chỉ có thể đảo ngược tất cả điều này nếu bạn muốn bắt đầu từ dữ liệu ban đầu của mình, thay vì chỉ kiểm tra câu trả lời.

Tìm câu trả lời không có kiến ​​thức trước

Điều này nhằm trả lời yêu cầu rõ ràng, được thêm dưới dạng chỉnh sửa cho câu hỏi, để tìm cách giải quyết từ đầu. Cho rằng câu hỏi là về một quá trình suy nghĩ, tôi đang cung cấp tất cả các chi tiết.

Tôi sẽ cố gắng dựa vào các ràng buộc của vấn đề (chỉ có 4 cổng NAND) và đối xứng của nó giữa B có thể được bảo tồn trong giải pháp.AB

Một điều tôi biết (giả sử các luồng thông tin từ trái sang phải như trong sơ đồ câu hỏi) là phải có một cổng NAND bìa phải sản sinh ra câu trả lời mong muốn XOR(A,B)=AB¯+BA¯.

Vì vậy, chúng ta có thể cố gắng đoán loại đầu vào nào cho cổng này sẽ tạo ra đầu ra mong muốn.

Chúng tôi biết rằng NAND(X,Y)=XY¯=X¯+Y¯

Thống nhất công thức cuối cùng này với kết quả chúng tôi phải nhận, chúng tôi có được:

  • X¯=AB¯, Do đó X=AB¯¯=A¯+B.

  • và đối xứng Y=A¯B¯=A+B¯.

Lưu ý rằng đây chỉ là khả năng đơn giản nhất. Có các cặp đầu vào khác sẽ cho kết quả mong muốn, bởi vì chúng tôi không thống nhất trong một đại số miễn phí, vì NAND có các thuộc tính phương trình. Nhưng chúng tôi thử điều đó để bắt đầu.

XYAB

Chúng tôi có thể cố gắng lặp lại quy trình hợp nhất (tôi đã làm), nhưng điều này sẽ tự nhiên dẫn chúng tôi sử dụng bốn cổng nữa, từ đó đưa ra giải pháp 5 cổng.

XYZAB

Cho rằng chúng tôi phải cung cấp đối xứng cho YXYZABAB

AB

Z=NAND(A,B)=AB¯=A¯+B¯

Bây giờ, chúng ta phải kiểm tra xem kết hợp ZABXY

AB

Thật dễ dàng để kiểm tra rằng

NAND(Z,A)=ZA¯=AB¯A¯=(A¯+B¯)A¯=A¯A+B¯A¯=0+B¯A¯=B¯A¯=AB¯¯=X

NAND(Z,B)=Y

Do đó chúng ta có thể kết hợp bốn cổng này để có được kết quả mong muốn, tức là hàm XOR.


Không phải theo cách ngược lại để chứng minh rằng họ bằng nhau. Nhưng hình ảnh mà bạn không biết sơ đồ nhưng để xây dựng cổng bằng cách sử dụng cổng nand tối thiểu.
Vượt thời gian

1
Bạn mong đợi điều gì như một câu trả lời? Một kỹ thuật có hệ thống để làm điều đó. Tôi không biết rằng có bất kỳ thứ gì đủ dễ sử dụng để có giá trị sử dụng trong các trường hợp phức tạp. Cho rằng tôi biết câu trả lời tôi chỉ có thể nói dối bạn và giả vờ đã tìm thấy bằng cách suy luận những gì tôi phát hiện ra bằng cách kiểm tra câu trả lời. Điều này nói rằng, nhìn vào những gì tôi nhận được với NAND (A, B) là tất cả những gì có vẻ hữu ích cho một sự khởi đầu. Sau đó, NANDing kết quả với một đối số A hoặc B, cũng là một điều cần xem xét, để có được cái nhìn về vị trí của tôi. Từ đó, một người khá gần với câu trả lời cuối cùng.
babou

1
@Timless Một cách khác để đi về nó là lạc hậu từ câu trả lời, biết rằng câu trả lời là từ một cổng NAND. Nếu bạn cho rằng giải pháp là đối xứng trong A và B, thì nó cung cấp cho bạn một dạng đầu vào có khả năng đến cổng NAND cuối cùng. Có rất nhiều cách để đi về nó, hoặc để tìm câu trả lời, hoặc để biện minh cho việc tìm kiếm nó là một hậu thế. Nhưng một bằng chứng là một bằng chứng, cho dù được tìm thấy bởi sự khéo léo của bạn, hoặc được đưa ra bởi một nhà tiên tri hoặc một người bạn tốt. Và đến một lúc nào đó không ai có thể nói lên sự khác biệt. Trên thực tế, bằng chứng lạc hậu mà tôi đưa ra có thể là bằng chứng tốt nhất, ngay cả khi giải pháp được tìm thấy theo một cách khác.
babou

Trên thực tế, khá phổ biến trong toán học khi có một phần phân tích để tìm ra một giải pháp, sau đó là một phần tổng hợp nơi bạn chứng minh nó là giải pháp. Một người thường cho cả hai, nhưng chỉ phần thứ hai là thực sự cần thiết.
babou

@Timless Cả hai câu trả lời đều dựa trên kiến ​​thức về một công thức cần thu được, suy ra từ sơ đồ cần thu được. Chỉnh sửa của bạn yêu cầu một kịch bản trực quan hợp lý để tìm câu trả lời mà không có bất kỳ kiến ​​thức nào về kết quả. Tôi đã thêm nó vào câu trả lời của tôi, nhưng thật tuyệt khi biết liệu nó có phù hợp với những gì bạn mong đợi hay không.
babou

0

(0,0)

XORNAND(0,0)=1

  • NANDNAND(1,1)=0

    • NAND(0,1)=1NAND(1,0)=1NAND(0,0)NAND.

Chỉ có bốn NANDs có liên quan. Nhưng nó chỉ đúng cho đầu vào(0,0)cho đến nay. Vì vậy, bạn cần kiểm tra đầu vào khác(0,1),(1,0),(1,1)chống lại các giải pháp và thấy rằng nó chỉ hoạt động. May mắn.


0

Tôi đã cố gắng hết sức để đưa ra câu trả lời bằng cách sử dụng công thức như đã hỏi. Hy vọng bạn đánh giá cao nó.
Z = AB '+ A'B
Z = AA' + AB '+ BB' + A'B ---> BB '= AA' = 0
Z = A (A '+ B') + B (B '+ A ')
Z = A (AB)' + B (AB) '-> Gợi ý
để bây giờ (AB)' có thể đi qua cổng NAND thứ nhất, sau đó ở cổng NAND thứ 2 và thứ ba, đầu ra của cổng NAND thứ nhất đi qua với một trong đầu vào là A và B. Sau đó, chúng ta cần thêm một bổ sung để sử dụng cổng NAND thứ tư.
NAND (thứ 1) = (AB) '= A' + B '
NAND (thứ 2) = (A (AB)') '= (A (A' + B '))' = (AB ')' = A '+ B
NAND (thứ 3) = (B (AB) ')' = (B (A '+ B')) '= (A'B)' = A + B '
NAND (thứ 4) = [(A' + B) (A + B ')]' = [A'B '+ AB]' = (A + B) (A '+ B') = AB '+ A'B

Vui mừng!


0

Công thức: XOR = (a và không b) hoặc (không phải a và b).

Đó không phải là những gì bạn muốn, bạn muốn một công thức là NAND. Hãy nhớ rằng không (a hoặc b) = không phải a và không b, và do đó (a hoặc b) = không (không phải a và không b). vì thế

(a và không b) hoặc (không phải a và b) =

không (không (a và không b) và không (không phải a và b)) =

không ((không phải a hoặc b) và (a hoặc không b)) =

NAND (không phải a hoặc b, a hoặc không b).

Vì vậy, chúng tôi đã sử dụng một cổng NAND và phải tính toán (không phải a hoặc b) và (a hoặc không b) bằng ba NAND. Chúng tôi biến mỗi biểu thức thành một NAND:

không phải a hoặc b = không (a và không b) = NAND (a, không phải b)

a hoặc không b = không (không phải a và b) = NAND (không phải a, b)

Bây giờ chúng ta quan sát rằng (x và y) = x và (không phải x hoặc y): Nếu x sai thì cả hai bên đều sai. Nếu x đúng thì (không phải x hoặc y) = (false hoặc y) = y. Điều này đúng với NAND giống như đúng với AND. vì thế

NAND (a, không phải b) = NAND (a, không phải a hoặc không b) = NAND (a, NAND (a, b))

NAND (b, không phải a) = NAND (b, không phải b hay không a) = NAND (b, NAND (a, b)).

Vì vậy, trước tiên chúng ta tìm mid = NAND (a, b), left = NAND (a, mid) và right = NAND (b, mid), cuối cùng là XOR = NAND (trái, phải).


-2

* Từ trái sang phải - D1, D2, D3, D4 ** D1 = (AB) 'HOẶC (A' + B ')

giả sử

(AB) '= C

Đ2 = (AC) '= A' + C '

D3 = (BC) '= B' + C 'rồi

D4 = (D2.D3) '

D4 = ((AC) '. (BC)') '

D4 = (AC) '' + (BC) ''

D4 = (AC) + (BC)

D4 = A. (A '+ B') + B. (A '+ B')

D4 = AB '+ BA' {A.A '= B.B' = 0} **


2
Tôi thấy khó theo dõi câu trả lời này hoặc hiểu quá trình bạn đang sử dụng. Bạn có thể thêm một số câu văn bản để giải thích cách tiếp cận, vì vậy đây không chỉ là một chuỗi các phương trình?
DW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.