Xác định số lượng cổng NAND / NOR tối thiểu cần thiết để nhận ra biểu thức Boolean


9

Có thuật toán nào để xác định số lượng cổng NAND hoặc NOR tối thiểu với

  1. số lượng đầu vào
  2. sẵn có / không có sẵn của đầu vào bổ sung

cần thiết để nhận ra một biểu thức Boolean? Chúng ta có thể nhận được dạng AND-OR dưới dạng cấy ghép chính thông qua các bản đồ Karnaugh là tối thiểu (theo như tôi biết, thuật toán Quine-McCluskey có được chúng một cách xác định). Có một kỹ thuật tương tự tồn tại cho việc triển khai NAND hoặc NOR không? Ít nhất, kỹ thuật như vậy nên xác định số lượng cổng NAND / NOR tối thiểu cần thiết ngay cả khi không tìm thấy sơ đồ thực tế?

Áp dụng luật của De Morgan về cấy ghép cơ bản dường như không mang tính quyết định,

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

Đây là cho một thực hiện hai giai đoạn hoặc nhiều giai đoạn?
Fizz

@RespawnedFluff Mục tiêu của việc thực hiện đa cấp là để giảm thiểu số lượng cổng, vì vậy việc triển khai NAND / NOR tối thiểu cũng phải là đa cấp.
Samik

Bản đồ K không cung cấp cho bạn kết quả tối thiểu để tối ưu hóa đa cấp.
Fizz

Câu trả lời:


10

Bạn chỉ có thể tìm thấy số lượng cổng tối thiểu trong mạng đa cấp bằng cách giải quyết vấn đề lập trình số nguyên [hoặc tương đương, xem bên dưới]. Vấn đề này là NP-đầy đủ, vì vậy chỉ thực tế để giải quyết tối đa một chục cổng hoặc hơn.

Có các phương pháp gần đúng tồn tại sẽ không cung cấp cho bạn số lượng tối thiểu nhưng dễ điều chỉnh hơn về thời gian cần thiết ... Đây là một chủ đề rộng lớn, về cơ bản là toàn bộ lĩnh vực tối ưu hóa đa cấp. Bạn có thể đọc một tổng quan [miễn phí] ở đây .

Đối với các mạng nhỏ của NAND (tối đa 4 biến), vấn đề đã được giải quyết hoàn toàn bằng cách liệt kê toàn diện [hoặc các phương thức tương đương]. Có một luận án tiến sĩ [2009] khá gần đây của Elizabeth Ann Ernst tóm tắt các kết quả cổ xưa và mở rộng chúng. Ernst sử dụng phân nhánh và liên kết, giúp cải thiện phương pháp toàn diện trong thực tế, nhưng không có triệu chứng. Bà cũng lưu ý rằng các phương pháp liệt kê ngầm khác như lập trình số nguyên hoặc CSP (thỏa mãn ràng buộc, giải quyết thông qua SAT) thực hiện kém hơn trong thực tế.

Cô ấy rõ ràng đã viết một số phần mềm cho phương pháp của mình (được gọi là BESS), nhưng tôi không chắc liệu nó có công khai ở đâu đó không. Toàn văn luận án của cô có sẵn miễn phí tại umich . Và thực sự bạn đã tìm thấy biểu thức tối thiểu cho xor 2 đầu vào (rõ ràng là thứ 2 của bạn), biểu thức được tô sáng bên dưới:

nhập mô tả hình ảnh ở đây

Cô cũng so sánh kết quả chính xác (đối với NAND) với kết quả được tạo ra bởi trình tối ưu hóa heuristic từ ABC .

ABC đã có thể tạo ra một mạng tối ưu cho 340 trên 4.043 chức năng trong đó mạng tối ưu được biết đến. Đối với những chức năng mà ABC không tạo ra một mạng tối ưu, nó trung bình lớn hơn 36% so với mạng tối ưu [.]

Có (rõ ràng) một số mạng [lớn hơn] mà BESS không hoàn thành, nhưng cho phép tìm thấy giới hạn trên (tại điểm tìm kiếm bị bỏ qua). Đối với những người ABC đã làm khá tốt [tốt đối với các giới hạn được tìm thấy], như bạn có thể thấy từ biểu đồ thứ 2 bên dưới.

nhập mô tả hình ảnh ở đây


Nếu bạn tò mò, tôi đã thử ABC về vấn đề xor ... và nó đưa ra 5 cổng, ít nhất là với resyn2tập lệnh. Vì vậy, nó không tốt hơn Logic Friday (sử dụng misII).
Fizz

Có các tập lệnh và cơ sở dữ liệu cho ABC về cơ bản tìm kiếm một số lượng lớn các hàm để triển khai tối ưu được tính toán trước, ví dụ arxiv.org/pdf/1108.3675.pdf Tôi đã không thử cái đó, nhưng ngay cả khi nó hoạt động, công việc khó khăn là thực hiện ở nơi khác
Fizz

Tôi đang xem qua các tài liệu bạn đã cung cấp và chúng trông rất thú vị, mặc dù tôi đang đấu tranh để hiểu chúng. Một khi tôi hiểu đúng về họ, có lẽ tôi sẽ thưởng tiền thưởng. Trong khi đó, có một upvote.
Samik

1

Có thể có những kỹ thuật tốt hơn ngoài kia, nhưng trở lại khi ở thời kỳ đen tối, tôi thấy Bản đồ Karnaugh hoạt động tốt


Bạn có muốn làm sáng tỏ những "thời kỳ đen tối" đó về cách tiến hành thực hiện NAND / NOR tối thiểu từ triển khai AND-OR thu được từ các bản đồ Karnaugh không?
Samik

1

NAND theo sau là NAND tương đương với AND theo sau là OR.

NOR theo sau bởi NOR tương đương với OR theo sau bởi AND.

NAND theo sau bởi NOR sẽ tương đương với AND và tiếp theo là AND không thực sự có ý nghĩa nhiều. NOR theo sau bởi NAND sẽ tương đương với OR theo sau bởi OR.

Trong trường hợp chung, tôi không tin rằng có bất kỳ cách khả thi nào để tìm ra giải pháp tối thiểu cho một vấn đề với số lượng lớn đầu vào (rõ ràng đối với số lượng đầu vào nhỏ, bạn có thể dùng vũ lực). Quine-McClusky chỉ xem xét các giải pháp hai cấp độ (giải pháp hai cấp tối thiểu thường không phải là giải pháp tối thiểu tổng thể) và có thể trở nên không thể tính toán được với các bảng chân lý phức tạp và số lượng lớn đầu vào.


Vì vậy, không có cách nào tốt hơn so với dịch chuyển bong bóng?
Samik

1

Thuật toán tốt nhất là thuật toán Espresso . Ở một mức độ nào đó, điều này được thực hiện trong tổng hợp FPGA

Logic thứ sáu là một phần mềm bạn có thể sử dụng. LƯU Ý: điều này làm giảm một cổng XOR xuống còn 5 cổng NAND.


Nhưng Espresso cũng cho triển khai AND-OR, phải không?
Samik

1
Espresso là "tốt nhất" chỉ theo nghĩa là nó khả thi đối với các đầu vào lớn (công thức) [không giống như bản đồ k], nhưng nó không đưa ra công thức tốt nhất / tối thiểu trong mọi trường hợp.
Fizz
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.