Một thiết kế đồ họa có thể không đồng bộ (hoặc hoàn toàn) không đồng bộ?


39

Chúng tôi đã có một khóa học về FPGA / Verilog rất ngắn tại trường đại học (5 năm trước) và chúng tôi luôn sử dụng đồng hồ ở mọi nơi.

Bây giờ tôi bắt đầu lại với các GPU như một sở thích và tôi không thể không tự hỏi về những đồng hồ đó. Chúng có hoàn toàn bắt buộc không, hoặc một thiết kế dựa trên nền tảng đồ họa có thể hoàn toàn không đồng bộ? Liệu người ta có thể xây dựng một loạt logic phức tạp và có những thứ gợn qua nó nhanh nhất có thể?

Tôi nhận ra rằng có rất nhiều vấn đề với điều này, giống như biết khi tín hiệu được truyền qua tất cả các phần của mạch và đầu ra đã ổn định. Đó là bên cạnh quan điểm. Không phải là tôi thực sự muốn xây dựng một thiết kế hoàn toàn không đồng bộ, mà chỉ để cải thiện sự hiểu biết của tôi về các khả năng.

Đối với người mới bắt đầu của tôi, có vẻ như cấu trúc duy nhất hoàn toàn cần có đồng hồ là một reg, và sự hiểu biết của tôi là một loại GPU thông thường (giả sử, Cyclone II) sẽ có các flip-flop được nối sẵn với các tín hiệu đồng hồ cụ thể. Điều này có đúng không? Có bất kỳ đồng hồ ngầm nào khác như thế này và chúng có thể được điều khiển thủ công bởi thiết kế không?


3
Tôi biết Simon Moore tại trường đại học Cambridge đã nghiên cứu rất nhiều về thiết kế không đồng bộ, bao gồm cả việc chế tạo chip thử nghiệm. Nó đòi hỏi một bộ công cụ thiết kế hoàn toàn mới và có tác dụng phụ kỳ lạ: tốc độ thực hiện tỷ lệ nghịch với nhiệt độ, chẳng hạn.
pjc50

Câu trả lời:


27

Một câu trả lời ngắn sẽ là: có; một câu trả lời dài hơn sẽ là: nó không xứng đáng với thời gian của bạn.

Bản thân một bản đồ có thể chạy một thiết kế không đồng bộ hoàn toàn không có vấn đề gì. Kết quả mà bạn nhận được là vấn đề vì thời gian thông qua bất kỳ FPGA nào là không thể dự đoán được. Vấn đề lớn hơn là thực tế là thiết kế thời gian và kết quả của bạn sẽ gần như chắc chắn khác nhau giữa các phiên địa điểm và tuyến đường khác nhau. Bạn có thể đặt các ràng buộc trên các đường dẫn không đồng bộ riêng lẻ để đảm bảo rằng chúng không mất quá nhiều thời gian, nhưng tôi không chắc chắn rằng bạn có thể chỉ định độ trễ tối thiểu.

Cuối cùng, điều đó có nghĩa là thiết kế của bạn sẽ không thể đoán trước và có khả năng thay đổi hoàn toàn dù chỉ là một thay đổi thiết kế nhỏ. Bạn sẽ phải xem qua toàn bộ báo cáo thời gian mỗi khi bạn thay đổi bất cứ điều gì chỉ để đảm bảo rằng nó sẽ vẫn hoạt động. Mặt khác, nếu thiết kế đồng bộ, bạn chỉ cần tìm một đường chuyền hoặc thất bại ở cuối địa điểm và tuyến đường (giả sử các ràng buộc của bạn được thiết lập đúng, không mất nhiều thời gian).

Trong thực tế, mọi người nhắm đến các thiết kế hoàn toàn đồng bộ nhưng nếu bạn chỉ cần đệm hoặc đảo ngược tín hiệu, bạn không cần phải trải qua một lần lật miễn là bạn buộc nó đúng cách.

Hy vọng điều này sẽ xóa nó lên một chút.


3
Tôi đã phải sử dụng một số thiết bị có thiết kế đồ họa không đồng bộ. Họ đã rất khó để làm việc với. Vui lòng ít nhất sử dụng các ràng buộc về thời gian
Tim Williscroft 7/12/2016

1
Mặc dù đúng là có thể thực hiện các thiết kế không đồng bộ với một FPGA, hầu hết các FPGA được xây dựng để hỗ trợ các thiết kế đồng bộ cụ thể. Chúng có nhiều tài nguyên (PLL, mạch phân phối đồng hồ và số lượng flip-flop khổng lồ) sẽ bị lãng phí trong một thiết kế không đồng bộ.
Dmitry Grigoryev

2
Câu trả lời này không cung cấp lời khuyên đặc biệt tốt. Bạn có thể tạo ra một GPU không có xung nhịp và nó thực sự đơn giản hóa địa điểm và tuyến đường, loại bỏ rất nhiều vấn đề liên quan đến yêu cầu về thời gian và do đường ống hạt mịn có thể có thông lượng cao hơn đáng kể. Vấn đề thực sự xảy ra khi bạn cố gắng ánh xạ một mạch có xung nhịp tới một GPU không có xung nhịp vì chúng có các đặc điểm thời gian rất khác nhau. Nó có thể được thực hiện, nó chỉ cần một chút xử lý front-end để thực hiện chuyển đổi. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham

20

"Người ta có thể xây dựng một loạt logic phức tạp và có những thứ gợn qua nó nhanh nhất có thể không?" Vâng. Toàn bộ CPU đã được xây dựng hoàn toàn không đồng bộ - ít nhất một trong số đó là CPU nhanh nhất trên thế giới. http://en.wikipedia.org/wiki/Asynyncous_circuit#Asynyncous_CPU

Điều đó cho tôi thấy rằng mọi người từ chối các kỹ thuật thiết kế không đồng bộ, mặc dù về mặt lý thuyết chúng có một số lợi thế so với các kỹ thuật thiết kế đồng bộ, chỉ vì (như những người khác ở đây đã nói) các thiết kế không đồng bộ không được hỗ trợ tốt bởi các công cụ có sẵn.

Đối với tôi, điều đó giống như khuyến nghị rằng tất cả các cây cầu được làm từ gỗ, bởi vì nhiều người có công cụ chế biến gỗ hơn công cụ gia công thép.

May mắn thay, một số lợi thế của thiết kế không đồng bộ có thể đạt được trong khi vẫn sử dụng các kỹ thuật thiết kế chủ yếu là đồng bộ bằng cách sử dụng thiết kế đồng bộ cục bộ (GALS) không đồng bộ toàn cầu .


Tôi cảm thấy chính xác theo cách tương tự về xu hướng hiện đại để định tuyến PCB trên lưới vuông , mặc dù lợi ích của việc di chuyển ít quan trọng hơn nhiều.
Roman Starkov

@romkyns - Điều đó càng làm cho việc viết phần mềm PCB sử dụng lưới không trực tràng trở nên khó khăn .
Sói Connor

1
@supercat: Tôi nghi ngờ bạn đang ám chỉ logic bốn pha . Đó là một trong những tín hiệu đồng hồ nhiều pha dường như bị lãng quên.
davidcary

1
@davidcary: Sắp xếp, ngoại trừ cả hai "pha" trên một dây - một pha được điều khiển bởi cạnh tăng và một pha theo cạnh rơi. Về cơ bản, tôi sẽ chia đồng hồ chốt thành bốn loại: tăng sạch, giảm sạch, tăng muộn, giảm muộn. Các chốt được ghi bởi (L / CB) một cạnh tăng hoặc giảm sạch có thể lấy dữ liệu từ bất kỳ cạnh tăng hoặc giảm nào. L / CB một cạnh tăng muộn có thể lấy dữ liệu từ L / CB sạch cạnh tăng bất kỳ cạnh giảm nào. L / CB do cạnh giảm muộn có thể lấy dữ liệu từ L / CB sạch hoặc bất kỳ tăng nào.
supercat

1
@davidcary: Với điều kiện là thời gian lan truyền nhanh nhất cho bất kỳ chốt nào vượt quá thời gian giữ lâu nhất và với điều kiện là đường tín hiệu dài nhất từ ​​cạnh đồng hồ, thông qua logic gating đồng hồ và chốt "trễ" được kích hoạt bởi cạnh đó, đến bất kỳ chốt nào được kích hoạt bởi cạnh sau, không vượt quá thời gian tối thiểu giữa các cạnh đồng hồ, tôi nghĩ rằng một thiết kế như vậy phải hoàn toàn đáng tin cậy và không có tính di động được tạo ra bên trong dưới bất kỳ sự chậm trễ lan truyền nào.
supercat

5

Một yếu tố chưa được đề cập là tính di động. Nếu một mạch chốt bị tấn công với một chuỗi các đầu vào / chuyển đổi sao cho trạng thái kết quả sẽ phụ thuộc vào độ trễ lan truyền hoặc các yếu tố không thể đoán trước khác, không có gì đảm bảo rằng trạng thái kết quả sẽ là "cao" hoặc "thấp". Ví dụ, hãy xem xét một flip flop được kích hoạt cạnh hiện đang xuất ra mức "thấp" và có sự thay đổi đầu vào của nó từ thấp đến cao gần như cùng lúc với cạnh đồng hồ xuất hiện. Nếu cạnh đồng hồ xảy ra đủ lâu trước khi thay đổi đầu vào, đầu ra sẽ chỉ ở mức thấp cho đến cạnh đồng hồ tiếp theo. Nếu cạnh đồng hồ xảy ra đủ lâu sau khi thay đổi đầu vào, đầu ra sẽ nhanh chóng chuyển một lần từ thấp sang cao và ở đó cho đến cạnh đồng hồ tiếp theo. Nếu cả hai điều kiện đó không áp dụng,. Nó có thể ở mức thấp, hoặc nhanh chóng chuyển đổi một lần và ở mức cao, nhưng nó có thể ở mức thấp trong một lúc và sau đó chuyển đổi, hoặc sau đó một thời gian sau đó chuyển đổi trở lại, hoặc chuyển đổi qua lại một vài lần, v.v.

Nếu một thiết kế hoàn toàn đồng bộ và tất cả các đầu vào được đồng bộ hóa kép, rất khó có khả năng một xung thời gian sẽ chạm vào chốt đầu tiên của bộ đồng bộ hóa theo cách khiến nó chuyển sang thời điểm hoàn hảo để gây nhầm lẫn thứ hai chốt. Nói chung, có thể an toàn khi coi những điều như "sẽ không xảy ra". Tuy nhiên, trong một thiết kế không đồng bộ, thường khó hơn nhiều để lý luận về những điều đó. Nếu một ràng buộc thời gian trên một mạch chốt (không chỉ là lật, mà bất kỳ sự kết hợp logic nào hoạt động như một chốt) đều bị vi phạm, không có thông tin nào về việc đầu ra sẽ làm gì cho đến lần tiếp theo có điều kiện đầu vào hợp lệ buộc chốt đến một trạng thái được biết đến. Hoàn toàn có khả năng các đầu ra bị trì hoãn sẽ khiến các hạn chế về thời gian của các đầu vào hạ lưu bị vi phạm, dẫn đến các tình huống không mong muốn,

Cách an toàn nhất để mô hình hóa một mạch không đồng bộ là hầu như mọi mạch đầu ra đều tạo ra đầu ra "X" trong một thời gian bất cứ khi nào nó chuyển giữa "0" và "1". Thật không may, cách tiếp cận này thường dẫn đến gần như tất cả các nút hiển thị "X", ngay cả trong các trường hợp trong thực tế gần như chắc chắn sẽ dẫn đến hành vi ổn định. Nếu một hệ thống có thể hoạt động khi được mô phỏng là có tất cả các đầu ra trở thành "X" ngay sau khi đầu vào thay đổi và duy trì "X" cho đến khi đầu vào ổn định, đó là một dấu hiệu tốt, mạch sẽ hoạt động, nhưng để các mạch không đồng bộ hoạt động theo các ràng buộc như vậy thường là khó khăn.


4

Tất nhiên, nếu các yêu cầu thiết kế của bạn đủ chậm để nhiều sự chậm trễ bên trong vẫn là các đơn đặt hàng có cường độ dài hơn thời gian bạn quan tâm, thì đó không phải là vấn đề và bạn có thể xem báo cáo thời gian để theo dõi điều này, nhưng có giới hạn cho những gì bạn có thể làm một cách hữu ích mà không có thông tin trạng thái nội bộ. Nếu bạn chỉ muốn tạo ra một cái gì đó giống như bộ ghép kênh 100 đầu vào thì tốt, chỉ cần nhớ rằng mỗi đầu vào sẽ có độ trễ lan truyền khác nhau. Trong thực tế, bạn có thể nhận được một số hiệu ứng thú vị và hỗn loạn với số lượng lớn các vòng phản hồi dao động chậm trễ không thể đoán trước - có thể một bộ tổng hợp dựa trên nền tảng hoàn toàn không đồng bộ hóa có thể là 'tương tự' tiếp theo ..


4

Vâng, bạn có thể. Bạn có thể bỏ qua hoàn toàn các flipflops và xây dựng tất cả từ LUT. Và / hoặc bạn có thể sử dụng các yếu tố trạng thái của hầu hết các Xilinx FPGA như các chốt (kích hoạt mức) thay vì các flipflops (được kích hoạt cạnh).


3
Một điều nguy hiểm với điều đó là trừ khi người ta hạn chế trình biên dịch logic, nó có thể tạo ra logic có thời gian lan truyền âm cho một số cổng. Ví dụ: nếu chỉ định X=(someComplexFormula)Y=X & D, nếu trình biên dịch thay thế công thức đó cho X và xác định X & Dtương đương với A & D, trình biên dịch có thể thay thế tính toán Y theo A và D, thay vì theo X, do đó cho phép tính toán của Y để tiến hành nhanh hơn so với X. Sự thay thế như vậy là hợp lệ với logic tổ hợp, nhưng tàn phá logic tuần tự không đồng bộ.
supercat

@supercat - Tôi chưa bao giờ làm việc với các công cụ của Xilinx, nhưng khi tôi làm việc với Altera FPGA, bạn luôn có tùy chọn chỉ định bất kỳ đường dẫn quan trọng nào như các mô-đun cổng được kết nối thay vì trong RTL, tại đó có bất kỳ tối ưu hóa nào như vậy tàn tật.
Jules

@Jules: Tất cả các thiết kế logic lập trình của tôi đã sử dụng Abel, một ngôn ngữ hơi ngớ ngẩn, nhưng có thể chỉ định mọi thứ theo cách mà một số CPLD có thể thực hiện, nhưng có thể gây khó khăn cho công cụ tổng hợp VHDL hoặc Verilog. Ví dụ, trong một trong các dự án của tôi, tôi đã khai thác thực tế rằng các bộ phận Xilinx có đồng hồ, bộ không đồng bộ và đặt lại không đồng bộ, để thực hiện đăng ký thay đổi có thể tải không đồng bộ. Nếu tôi cần phải làm những việc như vậy trong một đồ họa, chưa bao giờ sử dụng Verilog hoặc VHDL, tôi nên học những gì cần thiết để làm điều đó? BTW, nếu bộ nhớ phục vụ, tôi đã sử dụng flops T cho shifter và ...
supercat

... thời gian sao cho việc ghi async chỉ có thể xảy ra vào những thời điểm khi đầu vào T ở mức thấp, giả sử rằng nếu đồng hồ nop xảy ra gần đầu xung ghi, thì ghi async sẽ mở rộng đủ xa hơn nó để đảm bảo giá trị ổn định và nếu đồng hồ nop xảy ra ở gần cuối, đơn giản là nó sẽ giữ một giá trị vẫn ổn định. Tôi không chắc làm thế nào một người có thể xử lý hiệu quả các trường hợp như vậy trong VHDL hoặc Verilog.
supercat

@supercat - gặp vấn đề tương tự, nhìn vào Sổ tay thiết bị Cyclone IV tôi thấy rằng cách tiếp cận tốt nhất cho cùng một vấn đề sẽ là sử dụng tùy chọn "Tải đồng bộ trên toàn LAB" ("LAB" là một nhóm gồm 16 yếu tố logic , vì vậy nếu kích thước của một thanh ghi như vậy không kết thúc bội số của 16 bit thì một số bit sẽ bị lãng phí, nhưng dù sao đây có vẻ là tùy chọn hữu ích nhất). Bây giờ tôi có hai tùy chọn: Tôi có thể viết phiên bản chức năng sẽ yêu cầu công cụ tổng hợp để chọn cách thực hiện đăng ký cần thiết (thường sẽ là tùy chọn tốt nhất), hoặc, nếu tôi có thời gian nghiêm ngặt ...
Jules

3

Như @Andrey đã chỉ ra rằng nó không xứng đáng với thời gian của bạn. Cụ thể các công cụ không làm điều này, vì vậy bạn sẽ hoàn toàn tự làm. Ngoài ra, vì chúng có các thanh ghi tích hợp, bạn sẽ không lưu bất cứ thứ gì bằng cách không sử dụng chúng.


3

Thực sự có BA loại thiết kế.

  1. Kết hợp. Không có đồng hồ và không có đường dẫn phản hồi và hệ thống không có "bộ nhớ". Khi một hoặc nhiều đầu vào thay đổi, gợn thay đổi theo logic. Sau một thời gian, đầu ra ổn định ở trạng thái mới, cho đến khi đầu vào thay đổi một lần nữa.
  2. Tuần tự đồng bộ. Một hệ thống được xây dựng từ các thanh ghi và các khối logic tổ hợp, các thanh ghi được xung nhịp bởi một số lượng nhỏ (thường là 1) đồng hồ. Nếu có nhiều đồng hồ thì có thể cần các định kiến ​​đặc biệt cho các tín hiệu truyền từ miền đồng hồ này sang miền khác.
  3. Tuần tự không đồng bộ. Có các đường dẫn phản hồi, chốt, thanh ghi hoặc các yếu tố khác cung cấp cho bộ nhớ thiết kế của các sự kiện trong quá khứ và không bị xung nhịp bởi các dòng đồng hồ được phân tích dễ dàng.

Nói chung khi tổng hợp / tối ưu hóa logic tổ hợp, các công cụ sẽ cho rằng tất cả những gì quan trọng là kết quả cuối cùng là gì và thời gian tối đa cần thiết để giải quyết kết quả đó.

Bạn có thể xây dựng một thiết kế hoàn toàn kết hợp và nó sẽ đi đến kết quả đúng. Các đầu ra có thể thay đổi theo bất kỳ thứ tự nào và có thể thay đổi nhiều lần trước khi đạt đến giá trị cuối cùng của chúng. Thiết kế như vậy rất lãng phí tài nguyên logic. Hầu hết các yếu tố logic sẽ dành phần lớn thời gian của chúng ở trạng thái chờ trong khi trong một hệ thống tuần tự, bạn có thể đã sử dụng lại các yếu tố đó để xử lý nhiều mục dữ liệu.

Trong một hệ thống đồng bộ tuần tự, tất cả vấn đề là các đầu ra của khối tổ hợp đã ổn định về trạng thái chính xác của chúng khi chúng được đặt ở vị trí lật tiếp theo. Không quan trọng họ thay đổi thứ tự nào hoặc liệu họ có bị trục trặc trên đường đi không. Một lần nữa, các công cụ có thể dễ dàng biến điều này thành logic với điều kiện đồng hồ đủ chậm để đưa ra câu trả lời đúng (và chúng có thể cho bạn biết nếu đồng hồ bạn muốn sử dụng đủ chậm).

Trong một hệ thống tuần tự không đồng bộ, các giả định đó được đưa ra khỏi cửa sổ. Trục trặc có thể quan trọng, thứ tự thay đổi đầu ra có thể quan trọng. Cả hai công cụ và bản thân các bản đồ được thiết kế cho các thiết kế đồng bộ. Đã có nhiều cuộc thảo luận (thiết kế đồ họa không đồng bộ của google nếu bạn muốn biết thêm) về khả năng triển khai các hệ thống không đồng bộ trên các đồ họa tiêu chuẩn hoặc trên các thiết kế cụ thể nhưng nó vẫn nằm ngoài thực tiễn thiết kế được chấp nhận chính thống


2

Vâng. Nếu bạn không có cấu trúc kiểu quy trình thì nó không nên làm những việc như suy ra các thanh ghi. Sẽ có những thứ như bộ nhớ trên bo mạch yêu cầu đồng hồ, mặc dù nếu bạn thực sự muốn, bạn có thể tạo ra những thứ này không đồng bộ.


1
Ý của bạn là làm cho câu trả lời này phải không?
Kevin Vermeer

1

FWIW Tôi nghĩ rằng tôi nên thêm một mục tiêu rõ ràng trong các giải pháp logic không đồng bộ woukd là giảm mức tiêu thụ điện năng toàn cầu.

Những chiếc đồng hồ toàn cầu / PLL / bộ đệm này đốt cháy rất nhiều Joules.

Khi các giải pháp đồ họa uốn khúc thành đấu trường chạy bằng pin (ví dụ: Lattice Icestick), thì khía cạnh này sẽ thu hút được nhiều sự chú ý hơn.


Đây là một điểm tốt, mặc dù đáng để xem xét rằng một mạch tổ hợp được thiết kế kém thực hiện hoạt động tương tự như một mạch tuần tự trong một số trường hợp có thể thực hiện nhiều chuyển đổi thoáng qua khi kết quả một phần được tính toán và đầu ra cuối cùng được cập nhật để giải thích cho chúng, và trong các mạch CMOS (như hầu hết các GPU), mức tiêu thụ năng lượng tỷ lệ thuận với số lần chuyển đổi. Đồng hồ có thể gây ra sự chuyển đổi không cần thiết, nhưng bạn cũng có thể giảm rất nhiều năng lượng bằng cách vô hiệu hóa đồng hồ trong các phần của mạch không cần thiết vào lúc này.
Jules
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.