Hãy xem xét thuật toán trong câu hỏi:
[(a + b) + abs(b - a)]/2
Điều này có một giai đoạn cộng và trừ sau đó được đưa vào bổ sung giai đoạn thứ hai. Việc chia cho 2 là không đáng kể trong phần cứng, nó có thể được thực hiện bằng cách loại bỏ LSB. Tuy nhiên, bộ cộng / trừ toàn bộ hai giai đoạn khá chậm và thâm dụng cổng, đặc biệt nếu bạn xếp tầng nhiều caparis như bạn.
Dựa trên câu trả lời của Wouter van Ooijen, cấu trúc tổng quát là một bộ so sánh kỹ thuật số cung cấp tín hiệu chọn lọc của mux:
mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
Các sơ đồ trên là dành cho:
(A > B) ? A : B
nhưng lưu ý rằng nó có thể được cấu hình lại dễ dàng cho bất kỳ so sánh giữa hai đầu vào bằng cách thực hiện các kết nối logic khác nhau giữa đầu ra so sánh và chọn mux.
Vì vậy, nếu chúng ta biết cách xây dựng ba đầu ra từ bộ so sánh, chúng ta có thể thực hiện bất kỳ so sánh nào trong phần cứng. Logic so sánh được mô tả tốt ở đây . Để tối ưu hóa phần cứng, chúng tôi sẽ chỉ loại bỏ logic điều khiển các đầu ra so sánh không sử dụng.
Nhưng cuối cùng, nếu nó đi vào phần cứng, nó phải trải qua quá trình tổng hợp. Vì vậy, bạn không nên ám ảnh về sơ đồ cấp cổng nào là tối ưu. Thay vào đó, hãy tối ưu hóa mã và thuật toán của bạn để ít nhất bạn không buộc bộ tổng hợp tạo ra kết quả không hiệu quả. "Với một số mẹo thông minh, việc kiểm tra các cặp bit có thể được kết hợp với muxer cho cùng một cặp bit", và cách dễ nhất để thực hiện tối ưu hóa này là tổng hợp.