Triển khai trình bổ sung khác nhau


7

Tôi đang kết hợp một ALU, mà tôi muốn tổng hợp trên một FPGA. Bộ cộng mang theo phía trước là bộ bổ sung được nhiều người chọn sử dụng thay vì bộ cộng mang gợn. Tuy nhiên, một ý nghĩ thoáng qua tâm trí tôi. Các bộ cộng mang gợn mà tôi đã đặt cùng nhau trước đây chỉ đơn giản là có một loạt các bộ cộng đầy đủ một bit được kết nối với nhau. Mặc dù vậy, điều gì sẽ xảy ra nếu tôi thiết kế một bộ cộng đầy đủ 4 bit? Tôi không nói về một bộ cộng được tạo thành từ bốn bộ cộng một bit. Tôi đang nói về một thành phần duy nhất với 9 đầu vào (x3, x2, x1, x0, y3, y2, y1, y0, cin). Tôi biết điều này sẽ có 512 trạng thái có thể (2 ^ (9 đầu vào)).

Điều tôi đang tự hỏi là:

  1. Rõ ràng là sẽ có một số lượng lớn các cổng được sử dụng, nó có đáng không?
  2. Nếu tôi đang triển khai tất cả các thành phần của mình bằng cách sử dụng cổng NAND với độ trễ nhất định hoặc tất cả điều này, thì tốc độ cải thiện sẽ thấy trong 32 bit bằng cách sử dụng a.) Bộ cộng đầy đủ 4 bit b.) Bộ cộng CLA c. ) Bộ cộng đầy đủ 1 bit
  3. Có một số triển khai khác của một adder mà tôi không biết.
  4. Mặc dù một adder là một phần rất nam tính của ALU, nhưng hầu hết các nhà thiết kế kỹ thuật số thực sự đi đâu? Hoặc họ chỉ đơn giản là sử dụngassign Sum = X+Y+cin;

3
Bạn muốn đếm các trạng thái là 2 ^ 9 chứ không phải 9 ^ 2. Đó là 512.
DarenW

@DarenW bạn nói đúng, không chắc tôi đang nghĩ gì ...
sj755

hấp dẫn. Tôi nghi ngờ lát cắt 4 bit tùy chỉnh của bạn sẽ giống với 4 bộ cộng đầy đủ một bit với mạch nhìn về phía trước, nhưng có thể không. Đây là điều - nó chắc chắn sẽ không cần phức tạp hơn thế. Tuy nhiên, câu hỏi liệu bạn có thể tối ưu hóa hơn 4x đầy đủ + 4 bit CLA hay không là một câu hỏi thú vị.
JustJeff

@JustJeff Lý do lái xe chính cho việc triển khai này là trong một bộ cộng đầy đủ bốn bit, các tín hiệu chỉ cần đi qua hai cấp độ của cổng thay vì 8 hoặc hơn các cổng cần thiết cho 4 bộ cộng đầy đủ một bit. Nó sẽ là một tốc độ tăng gấp 4 lần. Và tôi chắc chắn rằng một bộ cộng đầy đủ 4 bit sẽ tốt hơn bộ cộng CLA 4 bit. Một lần nữa, nó chỉ có hai cấp độ.
sj755

Câu trả lời:


4

Để trả lời # 4, ít nhất là trong mã được nhắm mục tiêu để tổng hợp, một bộ cộng thường sẽ được mã hóa thành assign sum = x + y. Điều này cho phép lựa chọn cách thực hiện trình cộng cho đến công cụ tổng hợp. Có một sự đánh đổi chi phí / hiệu suất. Không có yêu cầu hiệu suất chặt chẽ, công cụ sẽ thực hiện một bộ cộng mang gợn, vì điều đó có chi phí thấp nhất. Nếu có các yêu cầu hiệu suất mạnh hơn, công cụ sẽ thực hiện một cấu trúc tinh vi hơn, với một số chi phí được thêm vào. Một khả năng khác để tổng hợp FPGA là bộ cộng sẽ được ánh xạ tới thành phần DSP có mục đích đặc biệt, nếu có trong thiết bị đích.

Khi hiệu suất tối đa được mong muốn, logic sẽ được thiết kế bằng tay thay vì được thực hiện bằng công cụ tổng hợp. Trong trường hợp này, ngoài mô hình tham chiếu mức cao với biểu mẫu sum = x + y, còn có một mô tả cấp thấp hơn mô tả các cổng hoặc bóng bán dẫn riêng lẻ (điều này có thể được thực hiện trong HDL hoặc trong một công cụ sơ đồ). Kịch bản "hiệu suất tối đa" này gần như chắc chắn sẽ là một triển khai ASIC chứ không phải là một FPGA.

Để (không thực sự) trả lời # 3, vì hơn bao giờ bạn muốn biết về kiến ​​trúc trình cộng, tôi thấy luận điểm này được liên kết từ một chủ đề trên edaboard: http://www.iis.ee.ethz.ch/~zimmi/publications /adder_arch.pdf .

Để trả lời # 1 và # 2, cách tốt nhất để tìm ra những thứ như thế này là thực hiện một số thí nghiệm, bất cứ điều gì khác là suy đoán. Những gì bạn sẽ nhận được cho thiết kế "bộ cộng đầy đủ 4 bit" phụ thuộc vào cách bạn mã hóa nó. Nếu bạn mã hóa nó như một bộ cộng, công cụ có thể sẽ làm những gì nó đã làm dù sao, mặc dù có thể không nhận ra rằng các bộ cộng 4 bit đi cùng nhau để tạo thành một bộ cộng lớn hơn. Nếu bạn mã hóa nó như là một hàm logic, bạn có thể nhận được một cái gì đó nhanh hơn so với triển khai Ripple-carry, nhưng bạn có thể không.


Cảm ơn bạn rất nhiều. Đó là một bài viết tuyệt vời mà bạn đã kéo. Tôi đoán tôi cũng có thể quên đi bộ cộng đầy đủ 4 bit. Tôi biết rằng nó đã quá xa. Vẫn sẽ rất tốt để có một tập tin Verilog cho một điều như vậy. Dù sao, cảm ơn vì sự giúp đỡ ...
sj755

Tôi đề nghị thay thế cụm từ "Nếu có một hạn chế hiệu suất tối thiểu ..." bằng "Yêu cầu hiệu suất chặt chẽ vắng mặt ...". Mặt khác, lần đầu tiên không rõ ràng về việc các ràng buộc là tối thiểu hay liệu các ràng buộc đó có chỉ định mức hiệu suất tối thiểu hay không.
supercat

6

Những gì bạn không muốn làm là tự thực hiện trình bổ sung ngoài cổng. Sử dụng các tính năng mà VHDL / Verilog cung cấp cho bạn để thêm số. Bất kỳ trình bổ sung nào bạn tạo sẽ lớn hơn và chậm hơn bất kỳ trình biên dịch VHDL / Verilog nào có thể làm.

Lý do cho điều này rất đơn giản: Các công cụ của FPGA có logic chuyên dụng để thực hiện các bộ cộng với số lượng logic tối thiểu và nhanh nhất có thể. Điều này bao gồm logic chuỗi mang đặc biệt và định tuyến. Nếu bạn để trình biên dịch sử dụng những thứ này thì bạn sẽ được hưởng lợi từ những thứ đã có trong FPGA. Nói cách khác, chỉ cần thực hiện Sum = X + Y + cin, trong đó X và Y là các số nhiều bit.


Làm thế nào để tôi biết điều này chắc chắn. Cuối cùng, điều này được thực hiện với số lượng LUT được sử dụng, bạn có biết thực tế là các trình tổng hợp Xilinx hoặc Altera thực hiện công việc tốt hơn so với mô tả cấu trúc thực sự. Tôi chắc rằng họ làm một công việc tuyệt vời, nhưng điều này gây nhiều tò mò cho tôi.
sj755

@ seljuq70 Có nhiều cách để phân tích điều này, nhưng cuối cùng, người ta tin rằng "mù quáng" tin tưởng vào trình biên dịch đang làm gì, tự mình thực hiện một số thử nghiệm và lỗi, hoặc phân tích đầu ra của trình biên dịch để xem nó đang làm gì (a.la. Xilinx Trình chỉnh sửa đồ họa). Tôi đã thực hiện đủ thử nghiệm và lỗi để biết rằng trình biên dịch sử dụng đúng logic chuỗi mang chuyên dụng. Ngoài ra, nó không chỉ là vấn đề sử dụng LUT mà còn là vấn đề tốc độ. Do logic chuyên dụng và định tuyến cho chuỗi mang, giải pháp này có thể nhanh hơn nhiều so với giải pháp chỉ LUT.

1
Nó giống như tình huống với trình biên dịch phần mềm; Hai mươi năm trước, tối ưu hóa trình biên dịch là không rõ ràng, nhưng ngày nay chúng khá tốt. Lý do là nếu có các giải pháp tối ưu cho logic, các trình biên dịch phần cứng có thể đã sử dụng chúng.
JustJeff

@JustJeff Chính xác! Thiết kế logic logic tốt đòi hỏi phải biết những gì có thể để lại cho trình biên dịch một cách an toàn và những gì chúng ta cần làm thủ công. Thật không may, đó là một mục tiêu di chuyển và đòi hỏi kinh nghiệm để tìm ra.

4

Viết mã dễ đọc (cho người khác hoặc cho chính bạn trong thời gian hai tuần :)

 a <= b+c;

Tin tưởng vào bộ tổng hợp cho đến khi nó được chứng minh rằng

  • nó không làm những gì bạn muốn
  • bạn không đáp ứng các mục tiêu khu vực, thời gian hoặc sức mạnh của bạn.

Để làm bất cứ điều gì khác là tối ưu hóa sớm.

Sau đó, và chỉ sau đó, lộn xộn cố gắng cải thiện mọi thứ. Nhưng ít nhất đến thời điểm này, bạn đã có một bản kiểm tra bảo hiểm đầy đủ của tùy chọn "đơn giản" (bạn có làm điều đó trước khi bắt đầu tối ưu hóa không, phải không? :).


0

Tôi thứ hai rằng công cụ của bạn có thể sẽ thực hiện bổ sung tốt hơn bạn làm.

Đối với các loại trình bổ sung khác nhau, hãy kiểm tra Hennessy và Patterson, phiên bản thứ 3 của IIRC (mỗi phiên bản là một cuốn sách hoàn toàn khác nhau!).

Một cách để tăng tốc độ bổ sung là sử dụng cơ bản là một trình cộng gợn nhưng KHÔNG thêm hoàn toàn vào mỗi bước: mỗi phép cộng tạo ra một tổng và kết quả thực hiện, và các gợn sóng mang qua một giai đoạn trên mỗi lần thêm. Rất hữu ích để thực hiện phép nhân.


Hennessy và Patterson, "Thiết kế và tổ chức máy tính: Giao diện phần cứng / phần mềm."? Hay Hennessy và Patterson, "Kiến trúc máy tính: một cách tiếp cận định lượng."?
davidcary
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.