การกำหนดจำนวนขั้นต่ำของประตู NAND / NOR ที่จำเป็นในการรับรู้นิพจน์บูลีน


9

มีอัลกอริทึมใด ๆ ในการกำหนดจำนวนขั้นต่ำของ NAND หรือ NOR ประตูด้วยหรือไม่

  1. จำนวนอินพุตที่กำหนด
  2. ความพร้อมใช้งาน / ไม่พร้อมใช้งานของอินพุตที่สมบูรณ์

จำเป็นสำหรับการรับรู้นิพจน์บูลีนหรือไม่ เราสามารถได้รับแบบฟอร์ม AND-OR ในฐานะ implicants สำคัญผ่านแผนที่ Karnaugh ที่มีน้อยที่สุด (เท่าที่ฉันรู้อัลกอริทึมQuine-McCluskey ทำให้พวกเขาได้รับการกำหนดอย่างแน่นอน) มีเทคนิคที่คล้ายคลึงกันสำหรับการใช้งาน NAND หรือ NOR หรือไม่ อย่างน้อยเทคนิคดังกล่าวควรกำหนดจำนวนขั้นต่ำที่ต้องการของประตู NAND / NOR แม้จะไม่พบแผนภาพจริง

การใช้กฎของเดอมอร์แกนในการทำรากฟันเทียมนั้นดูไม่ชัดเจนนัก

A ⊕ B = A'B + AB' = ((A'B)'(AB')')' [5 NAND gates]
A ⊕ B = (AB + A'B')' = ((ABAB+ABB') + (A'AB+A'B'))' = (AB(AB+B') + A'(AB+B'))' = ((AB+A')(AB+B'))' = (((AB)'A)'((AB)'B)')' [4 NAND gates by reusing (AB)']

นี่สำหรับการดำเนินการสองขั้นตอนหรือหลายขั้นตอนหรือไม่
Fizz

@RespawnedFluff เป้าหมายของการใช้งานหลายระดับคือการลดจำนวนประตูดังนั้นการใช้งาน NAND / NOR น้อยที่สุดควรเป็นแบบหลายระดับ
Samik

K-map ไม่ได้ให้ผลลัพธ์ที่น้อยที่สุดสำหรับการเพิ่มประสิทธิภาพหลายระดับ
Fizz

คำตอบ:


10

คุณสามารถค้นหาจำนวนขั้นต่ำของประตูในเครือข่ายหลายระดับโดยการแก้ปัญหาการเขียนโปรแกรมจำนวนเต็ม [หรือเทียบเท่าดูด้านล่าง] ปัญหานี้เกิดจากปัญหา NP-complete ดังนั้นจึงสามารถนำไปใช้แก้ปัญหาได้มากถึงสิบประตู

มีวิธีการประมาณที่จะไม่ให้จำนวนขั้นต่ำ แต่จะง่ายกว่าในแง่ของเวลาที่ต้องใช้ ... สิ่งเหล่านี้เป็นหัวข้อที่กว้างใหญ่ในตัวเองโดยทั่วไปเป็นฟิลด์ทั้งหมดของการเพิ่มประสิทธิภาพหลายระดับ คุณสามารถอ่าน [ฟรี] ภาพรวมที่นี่

สำหรับเครือข่ายขนาดเล็กของ NAND (มากถึง 4 ตัวแปร) ปัญหาได้รับการแก้ไขอย่างสมบูรณ์โดยการแจงนับอย่างละเอียด [หรือวิธีการที่เทียบเท่า] มีวิทยานิพนธ์ระดับปริญญาเอกล่าสุด [2009] โดย Elizabeth Ann Ernst ที่สรุปผลโบราณและขยายออกไป เอินส์ทใช้สาขาและขอบเขตซึ่งปรับปรุงตามวิธีการแบบละเอียดถี่ถ้วนในทางปฏิบัติ แต่ไม่แสดงอาการ เธอยังตั้งข้อสังเกตว่าวิธีการแจงนับอื่น ๆ เช่นการเขียนโปรแกรมจำนวนเต็มหรือ CSP (ความพึงพอใจข้อ จำกัด การแก้ไขผ่าน SAT) มีประสิทธิภาพแย่ลงในทางปฏิบัติ

เห็นได้ชัดว่าเธอเขียนซอฟต์แวร์บางอย่างสำหรับวิธีการของเธอ (เรียกว่า BESS) แต่ฉันไม่แน่ใจว่าจะให้บริการแบบสาธารณะหรือไม่ ข้อความเต็มของวิทยานิพนธ์ของเธอเป็นอิสระที่มีที่umich และแน่นอนคุณพบนิพจน์ที่น้อยที่สุดสำหรับ 2-xor input (อันที่สองของคุณชัด) อันที่ไฮไลต์ด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้เธอยังเทียบผลที่แน่นอน (สำหรับ NANDs) กับผู้ผลิตโดยเพิ่มประสิทธิภาพการแก้ปัญหาจากเอบีซี

ABC สามารถสร้างเครือข่ายที่ดีที่สุดสำหรับ 340 จาก 4,043 ฟังก์ชั่นที่เป็นที่รู้จักเครือข่ายที่ดีที่สุด สำหรับฟังก์ชั่นเหล่านั้นที่ ABC ไม่ได้ผลิตเครือข่ายที่ดีที่สุดมันก็ใหญ่กว่าเครือข่ายที่ดีที่สุด 36% [.]

มี (ชัด) เครือข่าย [ใหญ่กว่า] บางแห่งที่ BESS ไม่เสร็จ แต่อนุญาตให้พบขอบเขตบน (ณ จุดที่การค้นหาถูกทอดทิ้ง) สำหรับ ABC เหล่านั้นทำได้ค่อนข้างดี [อย่างดีเกี่ยวกับขอบเขตที่พบ] ดังที่คุณเห็นจากกราฟที่ 2 ด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่


หากคุณสงสัยฉันได้ลอง ABC เกี่ยวกับปัญหา xor แล้วและมันให้ 5 ประตู nand อย่างน้อยก็ในresyn2สคริปต์ ดังนั้นจึงไม่ดีไปกว่า Logic Friday (ซึ่งใช้ misII)
Fizz

มีสคริปต์และฐานข้อมูลสำหรับ ABC ที่ค้นหาฟังก์ชันจำนวนมากสำหรับการปรับใช้ที่ดีที่สุดที่คำนวณไว้ล่วงหน้าเช่นarxiv.org/pdf/1108.3675.pdfฉันยังไม่ได้ลองใช้งาน แต่แม้ว่ามันจะทำงานได้ดี ทำที่อื่น
Fizz

ฉันกำลังดูเนื้อหาที่คุณให้และพวกเขาดูน่าสนใจมากฉันกำลังพยายามเข้าใจพวกเขา เมื่อฉันเข้าใจพวกเขาอย่างถูกต้องแล้วฉันจะมอบรางวัลให้ ในขณะเดียวกันมี upvote
Samik

1

อาจมีเทคนิคที่ดีกว่านั้น แต่เมื่อย้อนกลับไปในยุคมืดฉันพบว่าKarnaugh Mapsทำงานได้ดี


คุณอยากทราบหรือไม่ว่าการเปิดเผยยุคมืดเหล่านั้นเกี่ยวกับวิธีดำเนินการปรับใช้ NAND / NOR ให้น้อยที่สุดจากการใช้งาน AND-OR ที่ได้รับจากแผนที่ Karnaugh
Samik

1

NAND ตามด้วย NAND เทียบเท่ากับ AND ตามด้วย OR

NOR ตามด้วย NOR เทียบเท่ากับ OR ตามด้วย AND

NAND ตามด้วย NOR จะเทียบเท่ากับ AND ตามด้วยและซึ่งไม่สมเหตุสมผลจริงๆ NOR ตามด้วย NAND ในทำนองเดียวกันจะเทียบเท่ากับ OR ตามด้วย OR

ฉันไม่เชื่อว่าในกรณีทั่วไปมีวิธีที่เป็นไปได้ที่จะหาทางออกเล็กน้อยสำหรับปัญหาที่มีอินพุตจำนวนมาก (เห็นได้ชัดว่าสำหรับอินพุตขนาดเล็กที่คุณสามารถบังคับกำลังได้) Quine-McClusky ดูที่ soloutions สองระดับเท่านั้น (soloution ที่น้อยที่สุดสองระดับมักจะไม่ใช่ soloution โดยรวมที่น้อยที่สุด) และสามารถกลายเป็น infeasible กับตารางความจริงที่ซับซ้อนและอินพุตจำนวนมาก


ดังนั้นจึงไม่มีวิธีที่ดีไปกว่าการเปลี่ยนฟอง?
Samik

1

อัลกอริทึมที่ดีที่สุดคืออัลกอริทึมEspresso ในระดับนี้จะถูกนำไปใช้ในการสังเคราะห์ FPGA

Logic fridayเป็นซอฟต์แวร์ชิ้นหนึ่งที่คุณสามารถใช้ได้ หมายเหตุ: สิ่งนี้ช่วยลดประตู XOR เป็น 5 NAND


แต่เอสเพรสโซ่ยังให้การใช้งาน AND-OR ด้วยใช่ไหม
Samik

1
เอสเพรสโซ่นั้น "ดีที่สุด" เฉพาะในแง่ที่เป็นไปได้สำหรับอินพุตขนาดใหญ่ (สูตร) ​​[ไม่เหมือนกับแผนที่ k] แต่มันไม่ได้ให้สูตรที่ดีที่สุด / น้อยที่สุดในทุกกรณี
Fizz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.