Tại sao các GPU có chốt khi chúng gần như không bao giờ được sử dụng?


7

Câu hỏi này là một câu hỏi tiếp theo của câu hỏi hiện có: "Khi nào sử dụng chốt tốt hơn so với dép xỏ ngón trong một fpga hỗ trợ - cả hai" .

Nếu việc sử dụng các chốt trong đồ họa của FPGA bị giới hạn trong các tình huống hiếm nhất hoặc hiếm gặp, tại sao các chốt của FPGA lại có chốt? Tôi có nghĩa là hầu hết các thiết kế đồ họa không sử dụng nó. Vậy thì tại sao lại lãng phí phần cứng cho logic như vậy!


Điều gì khiến bạn nghĩ rằng họ đang lãng phí phần cứng? Một flip-flop chỉ là hai chốt, vì vậy không quá khó để sử dụng một nửa flip-flop như một chốt.
Joe Hass

1
Các gia đình gần đây của Xilinx (Virtex 6 và 7) chỉ có một nửa các yếu tố lưu trữ có thể định cấu hình là chốt hoặc flipflops ... Trước đó, đó là 100% trong số họ. Theo như tôi có thể nói không ai trong số các GPU gần đây của Altera có bất kỳ chốt nào và tôi cũng không thể nhớ những cái cũ hơn làm như vậy. Tôi nghĩ rằng nó sẽ biến mất từ ​​từ!
Martin Thompson

Đối với họ UltraScale và UltraScale + của Xilinx, hướng dẫn kiến ​​trúc cho biết: "Có 16 phần tử lưu trữ trên mỗi lát CLB. Tất cả có thể được định cấu hình là các flip-flop loại D được kích hoạt cạnh hoặc các chốt nhạy cấp độ. Tùy chọn chốt nằm ở trên cùng hoặc trên cùng. Nửa dưới của CLB. Nếu tùy chọn chốt được chọn trên thành phần lưu trữ, tất cả tám thành phần lưu trữ trong nửa đó phải được sử dụng làm chốt hoặc không được sử dụng. Khi được định cấu hình là chốt, chốt sẽ trong suốt khi đầu vào đồng hồ CLB ( CLK) là Cao. " Như @JoeHass đã nói: nó không lãng phí tài nguyên vì các thanh ghi được cấu hình lại dưới dạng chốt.
Daniel Wisehart

Câu trả lời:


5

Tôi sẽ nói trước điều này với lời cảnh báo rằng tôi không cập nhật về hoạt động bên trong của các kiến ​​trúc đồ họa gần đây. Vì vậy, câu trả lời này có thể không thích hợp. tùy thuộc vào việc các công cụ FPGA có hỗ trợ dòng thiết kế mà tôi sẽ thảo luận hay không.

Có lẽ đúng là tổng khối lượng cổng thô được đưa vào thị trường có lẽ là các thiết kế dựa trên chốt. Điều này là do sự ưu tiên của các đóng góp của bộ vi xử lý đối với tổng số bóng bán dẫn vận chuyển. Vì vậy, yeah, một biện pháp nhân tạo. Tổng cộng có khá ít người thiết kế theo cách này, nhưng hầu hết các bộ xử lý đều sử dụng sơ đồ:

Đám mây logic -> chốt (+ 'đồng hồ) -> đám mây logic -> chốt (đồng hồ có đồng hồ) -> lặp lại semi ad-infinitum.

Mà nếu bạn nhìn vào nó là định dạng chính tắc cho một nô lệ chủ FF, nhưng với nhiều logic hơn được chèn giữa chủ và nô lệ.

Đại đa số mọi người, về tổng số thiết kế (như số lượng thiết kế) sử dụng kích hoạt cạnh miền đồng hồ duy nhất. Tuy nhiên, để trích dẫn Dally và Poulton (Kỹ thuật hệ thống kỹ thuật số) "Tuy nhiên, thời gian kích hoạt cạnh hiếm khi được sử dụng trong các bộ vi xử lý cao cấp và thiết kế hệ thống phần lớn vì nó dẫn đến thời gian chu kỳ tối thiểu phụ thuộc vào độ lệch của đồng hồ". Việc sử dụng các chốt được điều khiển bởi đồng hồ hai pha không chồng chéo dẫn đến thời gian rất mạnh mẽ mà phần lớn không nhạy cảm với độ lệch. Điều này thêm vào sự phức tạp trong thiết kế, tín hiệu từ một miền đồng hồ không thể được trộn lẫn.

Mặt khác là nó hiếm khi được dạy trong trường học.

Nếu đây là một câu hỏi về thiết kế kỹ thuật số hệ thống cao cấp. Đó sẽ là câu trả lời của bạn. Nếu điều này áp dụng cho FPGA - tôi không biết chắc chắn nhưng tôi đề nghị COULD này là lý do.

BTW - Tôi muốn đề xuất cuốn sách đó cho bất kỳ ai nghiêm túc về thiết kế VLSI kỹ thuật số tiên tiến.

"Dally, William J. và John W." Poulton. Kỹ thuật hệ thống kỹ thuật số. Nhà xuất bản Đại học Cambridge.


Bạn có thể trích dẫn một ví dụ bằng cách sử dụng sơ đồ đồng hồ đó? Tôi biết ARM không sử dụng nó và nó gây ra các sự cố về công cụ (chèn chuỗi quét, v.v.)
pjc50

INTEL, IBM và tài liệu tham khảo đến từ cuốn sách được đề cập.
giữ chỗ

Tôi có thể xác nhận những gì rawbrawb nói. Trong thực tế, chúng tôi đã sử dụng hai tín hiệu đồng hồ riêng biệt và đảm bảo rằng chúng không bị chồng chéo. Điều này đã loại bỏ bất kỳ vấn đề thời gian giữ có thể có với chi phí phân phối hai đồng hồ. Thời điểm là khó khăn và tôi đã tự bắn vào chân mình lần đầu tiên.
Joe Hass

6502 đáng kính sử dụng đồng hồ hai pha để có hiệu quả tốt; sử dụng các pha đồng hồ không chồng lấp làm giảm lượng mạch cần thiết để chốt và cũng có thể giảm bớt một số hạn chế về thời gian. Một tính năng rất hay của thiết kế đồng hồ chia là chúng có thể chịu được một lượng sai lệch đồng hồ tùy ý mà không phải có độ trễ lan truyền tối thiểu trong bất kỳ đường dẫn phản hồi chốt nào. Vấn đề lớn nhất với họ là rất nhiều công cụ không được trang bị tốt để xử lý chúng.
supercat

6

Đây là một danh sách sơ bộ về lý do tại sao các chốt trong các GPU:

  1. Đôi khi nó là giải pháp duy nhất. Thông thường khi giao tiếp với các tiêu chuẩn và / hoặc thiết bị cũ.
  2. Mặc dù FF tốt hơn nhưng một số người khăng khăng sử dụng chốt. Những người đó cũng sẵn sàng chi tiền cho các GPU.

Và đó là tất cả những gì tôi có thể nghĩ ra. Trong 10 năm qua, tôi chỉ sử dụng một chốt một lần và nó là để giao tiếp với PowerPC trong đó địa chỉ / bus dữ liệu được ghép kênh yêu cầu một chốt để hủy ghép kênh.


0

Mục đích chính của một FPGA là thực hiện trong silicon một thiết bị thực hiện một số hành vi mong muốn; đôi khi điều này sẽ yêu cầu một thiết bị thực hiện một vài chức năng trong khi đồng hồ chính bị tắt hoặc phản ứng theo những cách hạn chế đối với các xung ngắn so với thời gian của đồng hồ. Một ví dụ đơn giản, giả sử một người đang thiết kế một bảng với 74HC373 rời rạc muốn loại bỏ và có 17 chân dự phòng trên CPLD của một người (giả sử / OE trên '373 bị trói thấp). Những chân này về cơ bản nên hoạt động như sau:

Bất cứ lúc nào Kích hoạt cao và D0-D7 có giá trị trong 10ns trở lên, Q0-Q7 sẽ hợp lệ và sẽ phản ánh các giá trị trên D0-D7. Các chân Qn có thể được coi là không hợp lệ, bất kỳ có thể xuất ra bất cứ thứ gì, trong 10ns đầu tiên sau khi Bật lên cao, bất cứ lúc nào Dn không hợp lệ hoặc thay đổi và trong 10ns sau đó. Bất kỳ Q0-Q7 nào hợp lệ khi bật xuống sẽ giữ giá trị của chúng cho đến khi lần tiếp theo Bật lên cao.

Lưu ý rằng D0-D7 được phép thay đổi bất kỳ lúc nào liên quan đến cạnh tăng của Bật. Do đó, cạnh tăng của Bật không thể được sử dụng làm đồng hồ. Cũng lưu ý rằng vì đầu ra của flop sẽ không có giá trị cho đến một lúc sau cạnh đồng hồ, nhưng Q0-Q7 được yêu cầu có hiệu lực tại thời điểm Kích hoạt xuống thấp nếu D0-D7 có hiệu lực trong 10ns trước đó, việc giảm xuống cạnh của Bật cũng không thể được sử dụng làm đồng hồ.

Về mặt lý thuyết, người ta có thể sử dụng các cổng rời rạc để xây dựng mạch chốt không đồng bộ, các kỹ thuật như vậy không hoạt động tốt trong các GPU. Vấn đề là để các mạch như vậy hoạt động đúng, nó phải có một hoặc nhiều nút có độ trễ lan truyền được đảm bảo lớn hơn 0. Mặc dù thực tế các cổng thực tế hầu như luôn có độ trễ lan truyền tích cực (với sự xuất hiện của các mức logic thay đổi chậm, đầu ra của cổng có thể thay đổi trước khi đầu vào của nó được chuyển đổi hoàn toàn), các cổng FPGA có thể hoạt động như thể chúng có độ trễ lan truyền âm. Nếu các nút sai trong vòng phản hồi có độ trễ âm, mạch có thể không hoạt động như dự định. Sử dụng các yếu tố chốt rõ ràng được đảm bảo có độ trễ phản hồi tích cực có thể tránh được các vấn đề như vậy.


0

Tôi nghĩ rằng sự nhầm lẫn bắt nguồn từ khẳng định rằng "Hầu hết các kiến ​​trúc FPGA thực sự hỗ trợ cả chốt và flip-flop." Hầu hết trong số chúng bao gồm một flip-flop và định tuyến đủ để bạn có thể sử dụng các tài nguyên logic để tạo ra một mạch hoạt động như một chốt. Sơ đồ dưới đây cho thấy một cấu trúc đơn giản nhưng khá phổ biến cho một ô logic đơn trong các GPU dựa trên LUT. Bằng cách hy sinh một đầu vào cho chức năng phản hồi bằng MUX2, đồng thời đặt MUX1 để bỏ qua flipflop, bạn có thể thực hiện chốt với hai đầu vào. Lưu ý rằng các mux này thường là một phần của cấu hình và không thể thay đổi trong quá trình hoạt động. Một chốt như vậy không thể dự đoán được hoặc nhanh như sử dụng thanh ghi đồng bộ - đặc biệt nếu bạn chỉ cần một bộ không đồng bộ hoặc đặt lại (thường chỉ có một lần), mà chúng có xu hướng có. hiệu suất. Mặc dù, có nhiều biến thể của thiết kế tồn tại, chẳng hạn như Cyclone IV có thể định tuyến các tín hiệu khác thông qua một thanh ghi không được sử dụng như vậy, nhưng tôi vẫn chưa thấy một kiến ​​trúc FPGA cung cấp một chốt; nếu bạn biết ai đó, xin vui lòng cho tôi biết.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Khi sử dụng logic chốt, khi nào tôi có thể nghĩ ra hai kịch bản. Đầu tiên là phát hiện các sự kiện nhanh hơn đồng hồ của bạn, chẳng hạn như để thêm các điểm đánh dấu trục trặc trong bộ phân tích logic (flipflop có thể làm điều đó với chi phí sử dụng mạng đặt / đặt lại). Thứ hai là bỏ qua một lớp các thanh ghi để rút ngắn một đường ống (tính theo chu kỳ) khi thang đo tần số đủ thấp để cho phép logic sâu hơn. Cả hai đều là những tình huống khá chuyên biệt mà các công cụ FPGA thường không được thiết kế cho. Cái sau thực sự là một đường vòng giống như MUX1, không phải là chốt, nhưng có khả năng gây ra cảnh báo chốt chính xác vì các công cụ không mong đợi nó (và MUX1 không thể điều khiển được bằng tín hiệu logic) và một triển khai có thể sử dụng chốt trong suốt .


1
Tất cả các loạt "6" trước của Xilinx đều có chốt. "6" và "7" có 50% thanh ghi của chúng có thể định cấu hình là chốt hoặc flipflops, phần còn lại chỉ là flipflops.
Martin Thompson

Tôi đứng sửa! Tôi nghĩ rằng tôi khá quen thuộc với dòng Spartan 3, nhưng thực sự văn bản về các thành phần lưu trữ trong CLB chỉ ra sự hỗ trợ cho chế độ chốt, mặc dù các biểu tượng và bảng chân lý chỉ được hiển thị cho chế độ đồng bộ, ngay cả trong sơ đồ lát cắt đầy đủ.
Yann Vernier

1
Tôi không nhất thiết phải nghĩ đến việc chốt "bỏ qua" một lớp các thanh ghi, mà thay vào đó là giảm bớt các hạn chế về thời gian để những gì cần thiết không phải cho mỗi giai đoạn hoàn thành trong một khoảng thời gian, mà là thời gian kết hợp của bất kỳ cặp nào các giai đoạn liên tiếp để hoàn thành trong hai giai đoạn đồng hồ (ví dụ 50 MHz, một thiết bị có thiết lập / giữ 2ns sẽ yêu cầu mọi giai đoạn phải là 16ns hoặc ít hơn, ngược lại, một thiết kế dựa trên chốt có thể tồn tại với giai đoạn mất 25ns nếu trước đó và thành công chỉ mất 5ns). Mặt khác, bạn nhắc tôi về một điểm mà tôi đã bỏ lỡ trong câu trả lời của mình: ...
supercat

Nếu người ta sử dụng logic thông thường hoặc CPLD để tính toán một chốt như Out = (D và E) hoặc (Q và! E) hoặc (D và Q), thì khi E ở mức thấp, D có thể làm bất cứ điều gì mình thích mà không có hiệu lực ( thậm chí là tạm thời) trên Q. Trong một FPGA, tuy nhiên, LUT có thể diễn giải biểu thức là (D và E và Q) hoặc (D và E và! Q) hoặc (D và! E và Q) hoặc (! D và! E và Q). Nếu Q cao và E thấp, cạnh giảm trên D có thể khiến thuật ngữ (D và! E và Q) trở thành sai trước khi (! D và! E và Q) trở thành đúng, gây ra sự cố cho Q. thông tin phản hồi, trục trặc đó có thể trở thành chốt của trạng thái mới của Q. Rất tiếc.
supercat
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.