วิธีสร้างประตู XOR โดยใช้เกต NAND เพียง 4 ตัว


17

xorเกทตอนนี้ฉันต้องสร้างเกทนี้โดยใช้nandเกท4 เท่านั้น

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

the xor = (a and not b) or (not a and b)ซึ่งก็คือ

A¯B+AB¯

ฉันรู้คำตอบ แต่จะได้รับแผนภาพประตูจากสูตรได้อย่างไร

ประตู xor

แก้ไข

xor = (a and not b) or (not a and b)ผมหมายถึงสังหรณ์ใจให้ฉันฉันควรจะได้รับอย่างใดอย่างหนึ่งถ้าผมทำทีละขั้นตอนตามคำนิยาม

A¯B¯AB¯¯¯

และxorจะสร้างด้วย 5 nandประตู (ภาพแรก # 1 ด้านล่าง)

xor gate 2

คำถามของฉันเป็นเหมือน: ลองนึกภาพคนแรกในประวัติศาสตร์ที่คิดสูตรนี้เขาหรือเธอ (กระบวนการคิด) จะได้รับการแก้ปัญหา 4 nandครั้งจากสูตรนี้ได้อย่างไร

A¯B+AB¯

ฉันแน่ใจว่าคุณรู้วิธีการใช้ XOR (หรือฟังก์ชั่นอื่น ๆ ) และแปลงเป็นวงจรเทียบเท่าที่ใช้ NAND เท่านั้น (ซึ่งเป็นไปได้เสมอเนื่องจาก NAND เสร็จสมบูรณ์แล้ว ) อย่างไรก็ตามถ้าคุณถามวิธีลดสูตรนี้ให้ใช้เพียง 4 NAND หรือโดยทั่วไปน้อยกว่า NAND และไม่ว่าจะเป็นไปได้หรือไม่ที่จะได้รับวงจรที่เทียบเท่ากับk NANDs - ฉันไม่แน่ใจว่ามีวิธีง่าย ๆ คำตอบสำหรับสิ่งนั้น kk
Ran G.

ด้านล่างนี้เป็นคำตอบสำหรับปัญหาสองข้อ ของฉันค่อนข้างตรงไปตรงมาเกี่ยวกับความจริงที่ว่าคุณสามารถออกแบบ (หลัง) วิธีหาการก่อสร้างที่ต้องการจากการรู้ผลสุดท้ายล่วงหน้าซึ่งได้รับในคำถามและสามารถใช้ได้บนอินเทอร์เน็ต เห็นได้ชัดว่าเป็นวิธีที่ง่ายกว่าในการทำสิ่งต่าง ๆ ไร้สาระอย่างที่ดูเหมือนว่าขาดวิธีการทั่วไปที่ไม่มีคำตอบ ดังนั้นฉันสนใจที่จะรู้ว่าเพราะเหตุใดผู้ลงคะแนนจึงต้องการคำตอบมากกว่าหนึ่งข้อเมื่อพวกเขาทำ ... หากคุณจะใช้เวลาในการแสดงความคิดเห็นสั้น ๆ ขอบคุณล่วงหน้า.
babou

คำถามนี้ขึ้นอยู่กับการปิดไม่ชัดเจน ฉันคิดว่ามันอาจจะค่อนข้างชัดเจนว่า OP จะขอและอื่น ๆ i8nteresting ถ้า OP ใส่ใจที่จะตอบสนองต่อผู้ใช้ต่างๆที่พยายามที่จะตอบเขา
Babou

electronics.stackexchange.com/questions/84714/… - คำถามนี้เป็นคำถามทั่วไปคำตอบให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทั่วไปในการแก้ปัญหานี้และคำตอบนี้electronics.stackexchange.com/a/84803แสดงวิธีรับ NAND การเป็นตัวแทนสำหรับผู้ดำเนินการ XOR
Anton Trunov

ฉันเล่นกับปัญหาที่คล้ายกันและเพิ่งเขียนโปรแกรมที่ลองทุกอย่างเป็นระบบ ... ใช้ได้ดีกับอินพุตสูงสุดสี่รายการซึ่งมีฟังก์ชันที่เป็นไปได้ 65,536 รายการเท่านั้น สำหรับวงจรที่ซับซ้อนขึ้นเล็กน้อยนี้ทำให้ฉันสามารถปรับการหน่วงเวลาให้เหมาะสมและเพื่อหาวงจรที่เหมาะสมหากมีอินพุตหนึ่งหรือสองตัวช้ากว่าอื่น ๆ วงจรที่มี 5 อินพุต = 2 ^ 32 ฟังก์ชั่นที่เป็นไปได้อาจจะสามารถทำได้โดยใช้กำลังดุร้าย
gnasher729

คำตอบ:


13

จากสูตรนั้น มันสามารถทำได้ แต่การเริ่มต้นด้วยสิ่งนี้ง่ายกว่า: (ใช้สัญลักษณ์อื่นที่นี่)

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

ตกลงตอนนี้คืออะไร ในที่สุดเราก็ควรจะได้รับ~(~(~(a & b) & a) & ~(~(a & b) & b))(ซึ่งดูเหมือนว่าจะมี 5 NANDs แต่เช่นเดียวกับแผนภาพวงจรที่มีการแสดงออกย่อยซึ่งใช้สองครั้ง)

ดังนั้นทำสิ่งที่ดูเหมือน~(a & b) & a(และสิ่งเดียวกัน แต่ด้วยbตอนจบ) และหวังว่ามันจะติดอยู่: ( andกระจายไปor)

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

ปิดตอนนี้เพียงแค่ใช้ DeMorgan เพื่อเปลี่ยนค่ากลางorให้เป็นand:

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

และนั่นคือมัน


9

ฉันคิดว่าคุณกำลังขอหลักฐานนี้:

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)))

แม้ว่าจะเห็นได้ชัดว่ามีการใช้ 5 NANDs ในสมการผลลัพธ์ แต่ซ้ำกัน!(AB)จะถูกใช้เพียงครั้งเดียวเมื่อคุณกำลังออกแบบวงจร


ฉันขอโทษ แต่ A ^ B ไม่ใช่ A AND B ใช่ไหม ดูเหมือนว่าคุณตั้งใจจะพิสูจน์ XOR ซึ่งสัญลักษณ์ควรเป็น⊕หรือ⊻ อย่างไรก็ตามหลักฐานนี้เป็นสิ่งที่ฉันค้นหาจริงๆขอบคุณ!
osiixy

5

เนื่องจากคุณมีคำตอบไดอะแกรมอยู่แล้วจึงสามารถเปิดใช้งานได้อย่างง่ายดายจาก วิกิพีเดียโดยพิมพ์ชื่อคำถามของคุณใน Google เป็นไดอะแกรม. png ที่ เหมือนกันกับของคุณคุณควรหาสูตรได้ง่ายโดยแยกออกจากไดอะแกรมนั้น ให้นิยาม NAND เป็น NAND(A,B)=AB¯:

  • ประตูด้านซ้ายสุดให้ ;C=AB¯

  • ประตูด้านบนให้ ;D1=AC¯

  • ประตูด้านบนให้เนื่องจาก NAND เป็น commutatve เช่น AND;D2=BC¯

  • ประตูขวาสุดให้ 2E=D1D2¯

เมื่อนำทุกอย่างมารวมกันเราจะทราบก่อนว่า

C=AB¯=A¯+B¯

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

ในทำนองเดียวกัน: D2¯=BA¯

ดังนั้น
E=D1D2¯=D1¯+D2¯=AB¯+BA¯

ซึ่งเป็นนิยามของ XOR อย่างแม่นยำ คุณอาจย้อนกลับทั้งหมดนี้หากคุณต้องการเริ่มต้นจากข้อมูลเริ่มต้นแทนที่จะตรวจสอบคำตอบ

ค้นหาคำตอบที่ไม่มีความรู้ล่วงหน้า

สิ่งนี้มีจุดประสงค์เพื่อตอบคำขอที่ชัดเจนซึ่งถูกเพิ่มเป็นการแก้ไขคำถามเพื่อหาวิธีแก้ไขตั้งแต่เริ่มต้น เนื่องจากคำถามนั้นเกี่ยวกับกระบวนการคิดฉันจึงให้รายละเอียดทั้งหมด

AB

XOR(A,B)=AB¯+BA¯.

ดังนั้นเราสามารถลองเดาได้ว่าอินพุตแบบใดที่ประตูนี้จะสร้างเอาต์พุตที่ต้องการ

NAND(X,Y)=XY¯=X¯+Y¯

การรวมสูตรสุดท้ายนี้กับผลลัพธ์ที่เราได้รับเราได้รับ:

  • X¯=AB¯X=AB¯¯=A¯+B.

  • Y=A¯B¯=A+B¯.

โปรดทราบว่านี่เป็นเพียงความเป็นไปได้ที่ง่ายที่สุด มีอินพุตอีกคู่หนึ่งที่จะให้ผลลัพธ์ที่ต้องการเพราะเราไม่ได้รวมกันในพีชคณิตอิสระเนื่องจาก NAND มีคุณสมบัติเท่าเทียมกัน แต่เราลองทำดู

XYAB

เราสามารถลองทำซ้ำขั้นตอนการรวมกัน (ฉันทำ) แต่สิ่งนี้จะนำเราไปสู่การใช้ประตูเพิ่มอีกสี่บานซึ่งเป็นวิธีแก้ปัญหา 5 ประตู

XYZAB

XYZABAB

AB

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

ตอนนี้เราต้องตรวจสอบว่าการรวม ZABXY

AB

มันง่ายที่จะตรวจสอบว่า

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

เหมือนกับ NAND(Z,B)=Y

ดังนั้นเราสามารถเขียนสี่ประตูเหล่านี้เพื่อให้ได้ผลลัพธ์ที่ต้องการเช่นฟังก์ชัน XOR


ไม่ใช่ในทางกลับกันเพื่อพิสูจน์ว่าพวกเขาเท่ากัน แต่ภาพที่คุณไม่รู้จักแผนภาพ แต่เพื่อสร้างประตูโดยใช้เกต nand ขั้นต่ำ
ตลอดกาล

1
คุณคาดหวังอะไรในฐานะคำตอบ? เทคนิคที่เป็นระบบสำหรับการทำเช่นนั้น ฉันไม่ทราบว่ามีสิ่งใดที่สามารถใช้งานได้ดีพอที่จะใช้ในกรณีที่ซับซ้อน ระบุว่าฉันรู้คำตอบฉันสามารถโกหกคุณและแกล้งทำเป็นพบโดยให้เหตุผลสิ่งที่ฉันค้นพบโดยการตรวจสอบคำตอบ สิ่งนี้กล่าวว่าการดูสิ่งที่ฉันได้รับจาก NAND (A, B) นั้นเป็นสิ่งที่มีประโยชน์สำหรับการเริ่มต้น จากนั้นการลบผลลัพธ์ด้วยอาร์กิวเมนต์ A หรือ B ก็เป็นอีกสิ่งหนึ่งที่ต้องพิจารณาเพื่อรับมุมมองว่าฉันอยู่ที่ไหน จากตรงนั้นมีคำตอบสุดท้ายอยู่ใกล้ ๆ
babou

1
@Timeless อีกวิธีหนึ่งในการดำเนินการคือย้อนกลับจากคำตอบโดยรู้ว่าคำตอบนั้นเป็นประตู NAND หากคุณคิดว่าวิธีแก้ปัญหานั้นสมมาตรใน A และ B มันจะช่วยให้คุณมีรูปแบบของอินพุตที่ประตู NAND สุดท้าย มีหลายวิธีที่จะไปเกี่ยวกับเรื่องนี้ไม่ว่าจะเพื่อหาคำตอบหรือเพื่อหาเหตุผลที่พบว่ามันเป็นโปสเตอร์ แต่หลักฐานก็เป็นข้อพิสูจน์ไม่ว่าคุณจะค้นพบโดยความเฉลียวฉลาดหรือได้รับจากออราเคิลหรือเพื่อนที่ดี และในบางจุดไม่มีใครสามารถบอกความแตกต่างได้ อันที่จริงหลักฐานย้อนหลังที่ฉันให้อาจเป็นข้อพิสูจน์ที่ดีที่สุดแม้ว่าจะพบวิธีแก้ปัญหาด้วยวิธีอื่นก็ตาม
babou

ที่จริงแล้วมันเป็นเรื่องธรรมดาในวิชาคณิตศาสตร์ที่จะมีส่วนการวิเคราะห์เพื่อหาวิธีการแก้ปัญหาจากนั้นส่วนการสังเคราะห์ที่คุณพิสูจน์ว่ามันเป็นทางออก มักจะให้ทั้งสองอย่าง แต่เพียงส่วนที่สองเท่านั้นที่จำเป็นจริงๆ
babou

@Timeless ทั้งสองคำตอบขึ้นอยู่กับความรู้ของสูตรที่จะได้รับจากการอนุมานจากแผนภาพที่จะได้รับ การแก้ไขของคุณขอให้สถานการณ์สมมติที่ใช้งานง่ายน่าเชื่อถือเพื่อค้นหาคำตอบโดยไม่ต้องทราบล่วงหน้าเกี่ยวกับผลลัพธ์ ฉันได้เพิ่มเข้าไปในคำตอบของฉัน แต่มันจะดีที่จะรู้ว่ามันเหมาะกับสิ่งที่คุณคาดหวัง
Babou

0

ฉันรับอินพุต (0,0) ตัวอย่างเช่น.

สำหรับ แฮคเกอร์ผลลัพธ์ที่ต้องการคือ 0 อย่างไรก็ตาม NAND(0,0)=1.

  • เพราะวิธีเดียวที่จะได้รับ 0 ใช้ NAND คือ (ที่ชั้นสุดท้าย) NAND(1,1)=0คุณควรผลิตสอง 1 ตัวก่อน

    • ตามที่ NAND(0,1)=1 หรือ NAND(1,0)=1คุณสร้าง 1 โดยใช้อันเดียว NAND(0,0) ที่เลเยอร์แรกและป้อนพร้อมกับอินพุตหนึ่ง 0 เป็นเลเยอร์ที่สอง NAND.

สี่เท่านั้น NANDมีส่วนร่วม แต่มันถูกต้องสำหรับอินพุตเท่านั้น(0,0)จนถึงตอนนี้ ดังนั้นคุณต้องตรวจสอบอินพุตอื่น(0,1),(1,0), และ (1,1)กับการแก้ปัญหาและพบว่ามันใช้งานได้ โชคดี.


0

ฉันพยายามอย่างดีที่สุดเพื่อให้คำตอบโดยใช้สูตรตามที่ถามหวังว่าจะขอบคุณ
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) '-> คำแนะนำ
ดังนั้นตอนนี้ (AB)' สามารถผ่านประตู NAND ที่ 1 จากนั้นในประตู NAND ที่ 2 และที่สามเอาท์พุทของประตู NAND ที่ 1 ผ่านหนึ่ง อินพุตเป็น A และ B. หลังจากนี้เราจำเป็นต้องใช้ส่วนประกอบเพิ่มเติมเพื่อใช้เกต NAND ที่สี่
NAND (ที่ 1) = (AB) '= A' + B '
NAND (2nd) = (A (AB)') '= (A (A' + B '))' = (AB ')' = A '+ B
NAND (ที่ 3) = (B (AB) ')' = (B (A '+ B')) '= (A'B)' = A + B '
NAND (ที่ 4) = [(A' + B) (A + B ')]' = [A'B '+ AB]' = (A + B) (A '+ B') = AB '+ A'B

มีความสุข!


0

สูตร: XOR = (a และไม่ใช่ b) หรือ (ไม่ใช่ a และ b)

นั่นไม่ใช่สิ่งที่คุณต้องการคุณต้องการสูตรที่เป็น NAND จำไว้ว่าไม่ใช่ (a หรือ b) = ไม่ใช่ a และไม่ b และดังนั้น (a หรือ b) = ไม่ (ไม่ใช่ a และไม่ใช่ b) ดังนั้น

(a และไม่ใช่ b) หรือ (ไม่ใช่ a และ b) =

ไม่ใช่ (ไม่ใช่ (a และไม่ใช่ b) และไม่ใช่ (ไม่ใช่ a และ b)) =

ไม่ ((ไม่ใช่ a หรือ b) และ (a หรือไม่ใช่ b)) =

NAND (ไม่ใช่ a หรือ b, a หรือไม่ใช่ b)

ดังนั้นเราจึงใช้เกท NAND หนึ่งอันและต้องคำนวณ (ไม่ใช่ a หรือ b) และ (a หรือไม่ b) โดยใช้ NAND สามตัว เราเปลี่ยนแต่ละนิพจน์เป็น NAND:

ไม่ใช่ a หรือ b = ไม่ (a และไม่ใช่ b) = NAND (a, ไม่ใช่ b)

a หรือไม่ b = not (ไม่ใช่ a และ b) = NAND (ไม่ใช่ a, b)

ตอนนี้เราสังเกตว่า (x และ y) = x และ (ไม่ใช่ x หรือ y): ถ้า x เป็นเท็จทั้งสองข้างจะเป็นเท็จ ถ้า x เป็นจริงดังนั้น (ไม่ใช่ x หรือ y) = (false หรือ y) = y สิ่งนี้เป็นจริงสำหรับ NAND เช่นเดียวกับ AND ดังนั้น

NAND (a, not b) = NAND (a, ไม่ใช่ a หรือไม่ b) = NAND (a, NAND (a, b))

NAND (b, ไม่ใช่ a) = NAND (b, ไม่ใช่ b หรือไม่ใช่ a) = NAND (b, NAND (a, b))

ดังนั้นเราจึงหา mid = NAND (a, b), left = NAND (a, mid) และ right = NAND (b, mid), สุดท้าย XOR = NAND (ซ้าย, ขวา)


-2

* จากซ้ายไปขวา - D1, D2, D3, D4 ** D1 = (AB) 'หรือ (A' + B ')

สมมติ

(AB) '= C

D2 = (AC) '= A' + C'

D3 = (BC) '= B' + C 'จากนั้น

D4 = (D2.D3)'

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

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

D4 = (AC) + (BC)

D4 = a. (A + B ') + บี (A + B')

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


2
ฉันพบว่ามันยากที่จะทำตามคำตอบนี้หรือเข้าใจว่าคุณใช้กระบวนการอะไร คุณสามารถเพิ่มประโยคข้อความเพื่ออธิบายวิธีการได้ดังนั้นนี่ไม่ใช่แค่ลำดับของสมการหรือไม่
DW
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.