VHDL: Sử dụng toán tử '*' khi triển khai hệ số nhân trong thiết kế


10

Các GPU hiện nay đã được xây dựng trong các khối DSP, các GPU mới nhất thậm chí còn được xây dựng theo các đơn vị điểm nổi tương thích với chuẩn IEEE-754.

Có thể tạo thực thể / mô-đun DSP bằng GUI sau khi chọn các tham số bắt buộc trong đó, và sau đó ngay lập tức trong thiết kế.

Khi nào chúng ta cần thực hiện micromanagment như vậy trong thiết kế các khối DSP thực tế và khi nào chúng ta chỉ cần nhập toán tử '*' trong mã và để công cụ tổng hợp xử lý các chi tiết cấp thấp? Cái nào tốt hơn?

Có nhiều loại thuật toán nhân khác nhau khi nói đến phép nhân nhị phân. Kể từ bây giờ, chúng tôi đã xây dựng các khối DSP trên silicon và thậm chí được xây dựng theo hệ số nhân dấu phẩy động, điều này có nghĩa là tất cả các thuật toán đó đã không thực sự trở nên lỗi thời.


Những gì FPGA có FPU tương thích 754 trong vải?
Martin Thompson

Câu trả lời:


6

Tôi đã làm điều này một vài lần bản thân mình.

Nói chung, các công cụ thiết kế sẽ chọn giữa triển khai vải và lát DSP dựa trên các cài đặt tổng hợp.

Chẳng hạn, đối với Xilinx ISE, trong cài đặt quy trình tổng hợp, Tùy chọn HDL, có cài đặt "-use_dsp48" với các tùy chọn: Tự động, Tự động, Có, Không. Như bạn có thể tưởng tượng, điều này kiểm soát mức độ khó của các công cụ Các lát DSP. Tôi đã từng gặp một vấn đề khi tôi nhân một số nguyên với 3, suy ra một lát DSP - ngoại trừ tôi đã tự suy ra từng lát DSP trong chip, vì vậy synth đã thất bại! Tôi đã thay đổi cài đặt thành Không, vì tôi đã sử dụng mọi lát cắt dsp.

Đây có lẽ là một quy tắc tốt (tôi vừa mới tạo ra): nếu thiết kế của bạn có tốc độ dưới 50 MHz và có lẽ bạn sẽ sử dụng ít hơn 50% các lát DSP trong chip, sau đó chỉ cần sử dụng *, + và - toán tử. điều này sẽ suy ra các lát DSP không có thanh ghi đường ống. Điều này thực sự giới hạn tốc độ tối đa. (Tôi không biết điều gì xảy ra khi bạn sử dụng phép chia)

Tuy nhiên, nếu có vẻ như bạn sẽ chạy các lát gần với tốc độ tối đa của lát DSP (333 MHz cho cấp tốc độ bình thường Spartan 6) Bạn sẽ sử dụng tất cả các lát, bạn nên tự suy luận chúng .

Trong trường hợp này, bạn có hai lựa chọn.

Tùy chọn 1: sử dụng thủ công mẫu khởi tạo DSP thô. Tùy chọn 2: sử dụng khối IP từ Xilinx Core Generator. (Tôi sẽ sử dụng tùy chọn này. Đồng thời, bạn sẽ tìm hiểu tất cả về gen cốt lõi, sẽ giúp ích trong tương lai)

Trước khi bạn thực hiện một trong những điều này, hãy đọc một vài trang đầu tiên của hướng dẫn sử dụng lát DSP. Trong trường hợp của Spartan 6, (DSP48A1), đó sẽ là Xilinx doc UG389: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

Trước tiên hãy xem xét tùy chọn Core Generator. Tôi thường tạo một dự án thử nghiệm trong Core Generator cho phần tôi đang làm việc, nơi tôi tạo bất kỳ số lượng khối IP nào chỉ để tìm hiểu hệ thống. Sau đó, khi tôi sẵn sàng thêm một thiết kế vào ISE, tôi nhấp chuột phải vào Phân cấp thiết kế, nhấp vào nguồn mới và chọn "IP (CORE Generator & Architecture Wizard)" để tôi có thể chỉnh sửa và tạo lại khối trực tiếp từ dự án của tôi.

Trong Core gen, hãy xem các khối IP khác nhau mà bạn có thể chọn - có một vài chục, hầu hết đều khá tuyệt.

Lõi nhân là thứ bạn nên xem xét đầu tiên. Kiểm tra mỗi trang và nhấp vào nút biểu dữ liệu. Các phần quan trọng là độ rộng bit nguyên, các giai đoạn đường ống (độ trễ) và bất kỳ tín hiệu điều khiển nào. Điều này tạo ra khối đơn giản nhất có thể bằng cách lấy đi tất cả các cổng bạn không cần.

Khi tôi đang xây dựng bộ lọc IIR 5 bậc 3 vào năm ngoái, tôi đã phải sử dụng mẫu khởi tạo thủ công vì tôi đang xây dựng một triển khai rất tùy chỉnh, với 2 lát DSP có tốc độ gấp 4 lần tốc độ mẫu. Đó là một nỗi đau hoàn toàn.


13

Nếu bạn chỉ muốn nhân hai số và chúng phù hợp với khối DSP thì *nhà điều hành nên suy ra một khối DSP. Nếu không, hãy gửi công cụ tổng hợp lại :)

Tuy nhiên, để tận dụng các kết hợp phức tạp hơn của chức năng DSP thường yêu cầu khởi tạo trực tiếp khối và định cấu hình các tham số của nó. Ví dụ về những điều có thể không ánh xạ tốt bằng suy luận (sử dụng Xilinx DSP48E1 làm ví dụ):

  • Sử dụng bộ cộng trước
  • Sử dụng tích lũy bài
  • Sử dụng máy dò mẫu
  • Sử dụng đơn vị logic

Và đặc biệt là sự kết hợp của những điều trên.

Các công cụ tổng hợp chưa đủ tốt để lập bản đồ kết hợp hoàn toàn tùy ý logic và số học hiệu quả như bạn có thể hy vọng.


4

Nếu có các khối DSP, bạn nên sử dụng chúng nếu có thể bởi vì nó sẽ hiệu quả hơn so với sử dụng LUT để làm điều tương tự. Trừ khi bạn không cần phép nhân hiệu suất cao, trong trường hợp đó bạn nên thực hiện, giả sử, một bộ cộng đường ống và thanh ghi thay đổi để tiết kiệm không gian.

Tuy nhiên, tôi sẽ xem xét việc suy ra các khối DSP trước khi đi vào các công cụ GUI. Hướng dẫn sử dụng XST của Xilinx có HDL 'người nhận' để biết cách khởi tạo các khối DSP bằng verilog / VHDL thuần túy. Về cơ bản, nếu bạn thêm đủ các thanh ghi trước và / hoặc sau bội số, XST sẽ sử dụng khối DSP để thực hiện thao tác tự động. Bạn có thể kiểm tra nhật ký tổng hợp để xem liệu nó có suy ra chính xác các khối DSP không. Tôi đoán Altera có một cái gì đó tương tự.

Tình cờ, tôi chỉ nghiền ngẫm điều này vài phút trước vì tôi hiện đang làm việc trên một triển khai twister Mersenne chỉ sử dụng một số nhân cho hạt giống ban đầu. Việc thực hiện vượt qua đầu tiên của tôi không đáp ứng thời gian, nhưng chức năng là chính xác. XST cũng đưa hoạt động nhân lên vào các khối DSP, tuy nhiên nó không được tối ưu hóa nên nó chạy nhanh khoảng một nửa như tôi muốn. Tôi có thể sẽ thực hiện lại hệ số nhân bằng cách sử dụng kỹ thuật shift-and-add, sẽ mất 32 lần số chu kỳ xung nhịp, nhưng sẽ không còn yêu cầu hệ số nhân phần cứng.


Tại sao nó phải thất bại thời gian khi sử dụng hệ số nhân phần cứng?
quantum231

Rõ ràng, 32 bit x 32 bit nhân không có đường ống mất hơn 8 ns, rõ ràng.
alex.forencich

hmm tôi thấy, đã không xem xét điều đó Vì vậy, các khối DSP không được đường ống. Tôi tự hỏi làm thế nào chính xác họ ngụ ý nhân. Đây có phải là một hệ số nhân song song cứng thực tế không?
quantum231

Tôi nghĩ rằng nó có thể được cấu hình để làm việc theo một vài cách khác nhau. Theo hướng dẫn sử dụng XST, việc thêm đủ các thanh ghi vào đầu vào và đầu ra sẽ cho phép XST sử dụng hệ số nhân theo đường ống trong một lát DSP48. Trong trường hợp của tôi chỉ có một thanh ghi đầu ra và không có thanh ghi đầu vào, vì vậy nó không thể tận dụng lợi thế này. Vì đây chỉ là khởi tạo (gieo PRNG), tôi đã thay thế hệ số nhân song song bằng hệ số nhân nối tiếp bit để tiết kiệm sử dụng tài nguyên.
alex.forencich

2

Nó phụ thuộc vào mức độ tối ưu hóa bạn cần và mức độ di động nên là thiết kế của bạn. Nó hơi giống phần mềm, tối ưu hóa bằng cách sử dụng một chút lắp ráp hoặc để trình biên dịch chọn hướng dẫn. Bạn cũng có thể có một số sự đánh đổi kích thước / tốc độ để bạn không thể mua được hệ số nhân chính xác kép.

Tôi không biết ở đó các bộ nhân FP được thiết kế cứng trong các GPU.

Một toán tử nhân tương thích thực tế theo chuẩn IEEE P754 phù hợp với CPU liên quan đến nhiều hơn một số nhân lớn: Bạn cần thêm số mũ, biến đổi dịch chuyển, quản lý infinites và một vài cờ chủ yếu vô dụng (không chính xác, dưới dòng ...)


Các thế hệ đồ họa mới nhất như Altera 10 series có hệ số nhân dấu phẩy động tương thích với chuẩn IEEE-754! Tôi chưa có cơ hội sử dụng chúng.
quantum231

Nếu chúng ta đã xây dựng các khối DSP thì nên sử dụng chúng thay vì hệ số nhân tổ hợp hoặc sử dụng một số thuật toán khác, ví dụ như sử dụng khối bộ nhớ phải không?
quantum231

2

Tôi đọc tài liệu này http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/ con / fpl2014-ronak.pdf :

Mặc dù các chức năng phù hợp trong một khối DSP có thể được tổng hợp một cách hiệu quả từ mã RTL theo đường ống, chúng tôi đã thấy rằng các chức năng phức tạp hơn đòi hỏi nhiều khối DSP phải chịu hiệu suất thấp hơn. Tuy nhiên, một mô tả RTL tiêu chuẩn của một hàm toán học có thể được xử lý rất nhiều, ví dụ, sau mỗi hoạt động, vì đường ống này có thể không tính đến cấu trúc và các giai đoạn bên trong của khối DSP, thiết kế tổng hợp kết quả có thể thể hiện hiệu suất dưới chuẩn các khối DSP được kết hợp theo cách không cho phép chúng chạy ở tốc độ tối đa.

Tôi ước tôi có thể tìm thấy nguồn công cụ của họ để kiểm tra phát hiện của họ.

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.