2011-12-19 25 views
5

Tôi biết cần phải đồng bộ hóa tất cả các đầu vào với FPGA trước khi sử dụng các đầu vào đó để tránh tính di động. Tôi cũng nhận thức được sự cần thiết phải đồng bộ hóa tín hiệu mà qua các lĩnh vực đồng hồ trong một FPGA duy nhất. Câu hỏi này không phải là về việc chuyển các miền đồng hồ.Có cần đăng ký cả đầu vào và đầu ra của mỗi lõi phần cứng không?

Câu hỏi của tôi là cho dù đó là một ý tưởng tốt để thường xuyên đăng ký tất cả của các đầu vào và đầu ra của mỗi mô-đun phần cứng nội bộ trong một thiết kế FPGA. Lý do là chúng ta muốn chia nhỏ các chuỗi dài của logic tổ hợp để cải thiện tốc độ xung nhịp để chúng ta có thể đáp ứng các ràng buộc thời gian cho một tốc độ đồng hồ đã chọn. Điều này sẽ bổ sung thêm chu kỳ độ trễ bổ sung tỷ lệ thuận với số lượng mô-đun mà tín hiệu phải vượt qua. Đây có phải là ý tưởng hay hay không? Người ta chỉ nên đăng ký đầu vào chứ không phải đầu ra?

trả lời Tóm tắt

Rule of thumb: đăng ký tất cả các kết quả đầu ra của lõi FPGA nội bộ; không cần phải đăng ký đầu vào. Nếu một đầu ra đã đến từ một thanh ghi, chẳng hạn như thanh ghi trạng thái của một máy trạng thái, thì không cần phải đăng ký lại.

Trả lời

5

Rất khó để đưa ra quy tắc cứng và nhanh chóng. Nó thực sự phụ thuộc vào nhiều yếu tố.

Nó có thể:

  • Tăng Fmax bằng cách phá vỡ lên đường tổ hợp
  • Hãy địa điểm và tuyến đường dễ dàng hơn bằng cách cho phép các công cụ để truyền bá lý ra ở phần
  • Hãy phân vùng thiết kế của bạn dễ dàng hơn, cho phép để xây dựng lại một phần.

Nó sẽ không giải quyết các vấn đề thời gian đường dẫn quan trọng. Nếu có một con đường quan trọng bên trong một trong những "khối" chính của bạn, thì nó sẽ vẫn là con đường quan trọng của bạn.

Ngoài ra, bạn có thể gặp phải các sự cố khác, tùy thuộc vào cách thiết kế của bạn đầy đủ trên phần mục tiêu.

Những điều này cho biết, tôi chỉ nghiêng về phía đăng ký đầu ra.

+0

Tôi đã nói chuyện với một người cũng chỉ đưa ra lời khuyên tương tự khi đăng ký đầu ra. –

+0

Tôi thường phân vùng mô-đun để kết quả đầu ra datapath là sổ đăng ký. Mặc dù điều này chắc chắn không phải là một quy tắc. –

2

Đăng ký tất cả các đầu vào và đầu ra của mọi mô-đun phần cứng nội bộ trong thiết kế FPGA là một chút quá mức cần thiết. Nếu một thanh ghi đầu ra cung cấp một thanh ghi đầu vào không có logic giữa chúng, thì 2x thanh ghi bắt buộc được tiêu thụ. Trừ khi, tất nhiên, bạn đang làm cân bằng con đường logic.

Chỉ đăng ký đầu vào chứ không phải đầu ra của mọi mô-đun phần cứng nội bộ trong thiết kế FPGA là cách tiếp cận thiết kế bảo thủ. Nếu thiết kế đáp ứng các yêu cầu về hiệu năng và sử dụng tài nguyên, thì đây là một cách tiếp cận hợp lệ.

Nếu thiết kế không đáp ứng các yêu cầu về hiệu suất/sử dụng, thì bạn phải thực hiện phân tích thêm thời gian để giảm thanh ghi trong một đường logic nhất định trong FPGA.

+0

Điều gì về việc đăng ký chỉ các đầu ra chứ không phải đầu vào? –

+0

Miễn là đầu vào pin FPGA được đăng ký, sau đó đăng ký đầu ra mô-đun nội bộ thay vì đầu vào mô-đun nội bộ không quan trọng. –

2

Câu hỏi của tôi là có nên đăng ký thường xuyên tất cả các đầu vào và đầu ra của mọi mô-đun phần cứng nội bộ trong thiết kế FPGA hay không.

Không, ý tưởng hay là thường xuyên giới thiệu các thanh ghi như thế này.

  1. Làm cả đầu vào và đầu ra đều không cần thiết. Chúng sẽ không có logic giữa thanh ghi đầu ra và thanh ghi đầu vào tiếp theo.
  2. Nếu khối của tôi chứa một cổng AND duy nhất, nó quá mức cần thiết. Nó phụ thuộc vào thời gian và độ phức tạp của thiết kế.
  3. Các giai đoạn đăng ký cần được suy nghĩ và thiết kế hợp lý. Điều gì sẽ xảy ra khi một đầu ra FIFO đầy hoặc các điều kiện gian hàng khác? Tất cả các tín hiệu có độ trễ đăng ký phù hợp để chúng xuất hiện ở đúng giai đoạn trong chu kỳ đúng không? Thêm đăng ký không nhất thiết phải đơn giản như nó có vẻ.

Lý do là chúng ta muốn chia tay chuỗi dài của logic tổ hợp để cải thiện tốc độ xung nhịp để chúng tôi có thể đáp ứng những hạn chế thời gian cho một tốc độ xung nhịp chọn. Điều này sẽ bổ sung thêm chu kỳ độ trễ bổ sung tỷ lệ thuận với số lượng mô-đun mà tín hiệu phải vượt qua. Đây có phải là ý tưởng hay hay không?

Trong trường hợp này, có vẻ như bạn phải giới thiệu thanh ghi và bạn không nên đọc các điểm trước đó là "không làm điều đó". Chỉ cần không làm điều đó một cách mù quáng. Hãy suy nghĩ về logic điều khiển xung quanh thanh ghi và bản chất đa chu kỳ (hiện tại) của logic. Bây giờ bạn đang xây dựng một "Đường ống". Có khả năng để ngăn chặn một đường ống đúng cách khi đầu ra không thể viết là một nguồn rất lớn của các lỗi.

Hãy nghĩ đến những chiếc xe đang di chuyển trên đường. Nếu một chiếc xe áp dụng phanh của nó và dừng lại, tất cả các xe phía sau cần phải là tốt. Nếu đèn phanh xe đầu tiên không hoạt động, xe tiếp theo sẽ không nhận tín hiệu phanh, và nó sẽ bị hỏng. Tương tự, mỗi giai đoạn trong một đường ống cần phải nói cho giai đoạn trước nó dừng lại một lúc. Bạn có thể tìm thấy rằng thay vì có đường dẫn thời gian dài dọc theo đường dẫn tính toán của bạn đi từ đầu vào đến đầu ra, bạn kết thúc với đường dẫn thời gian dài trên kích hoạt của bạn kiểm soát tất cả các giai đoạn đăng ký từ đầu ra đến đầu vào.

0

Một tùy chọn khác mà bạn có là để cho phép các công cụ hoạt động cho bạn. Thêm vào cuối của hệ thống hoàn chỉnh của bạn một bó đăng ký (nếu bạn muốn đường ống dẫn hơn) và kích hoạt trong công cụ tổng hợp của bạn retiming. Điều này sẽ di chuyển các thanh ghi (hy vọng) giữa logic mà nó hữu ích nhất.

Các vấn đề liên quan