"Chốt" khác với "Flip-Flop" ở chỗ FF chỉ thay đổi đầu ra của nó để đáp ứng với cạnh đồng hồ. Một chốt có thể thay đổi đầu ra của nó để đáp ứng với thứ khác ngoài đồng hồ. Ví dụ, SR-Latch có một bộ và đầu vào thiết lập lại và nếu một trong số chúng đang hoạt động thì đầu ra có thể thay đổi. Trong trường hợp SR-FF chỉ đáp ứng với một bộ hoặc đặt lại khi đó cũng có cạnh đồng hồ.
Trong một đồ họa, bạn muốn logic của mình được đồng bộ hóa hoàn toàn. Có nghĩa là tất cả các thành phần lưu trữ (như FF) đều được tạo xung nhịp từ một nguồn đồng hồ duy nhất. Bất cứ điều gì không đồng bộ với đồng hồ đó cần phải được xử lý rất cẩn thận nếu không sẽ xảy ra lỗi thời gian.
Một chốt về cơ bản là một yếu tố lưu trữ không đồng bộ. Nó không có đầu vào đồng hồ, và do đó không thể được đồng bộ hóa với bất kỳ đồng hồ nào. Tôi nên lưu ý rằng có FF với các đầu vào đặt lại và đặt lại không đồng bộ, và các đầu vào này phải được xử lý cẩn thận như các chốt thông thường.
Đi sâu vào tất cả các vấn đề thời gian mà chốt có thể gây ra là vượt xa những gì có thể được đề cập ở đây, nhưng tôi xin đưa ra một ví dụ:
Giả sử bạn có SR-Latch và bạn muốn đặt nó mỗi khi bộ đếm 8 bit đạt đến một giá trị nhất định. Tôi không chắc mã Verilog sẽ là gì, nhưng trong VHDL, mã là: set <= '1' khi Count = "11010010" khác '0'; Tín hiệu đặt đó đi đến đầu vào đã đặt trên SR-Latch của chúng tôi.
Logic được tạo ra hoàn toàn là tổ hợp; một hỗn hợp của cổng và cổng, hoặc cổng và bộ biến tần (Hoặc LUT). Nhưng các đường dẫn tín hiệu thông qua logic tổ hợp đó không phải lúc nào cũng hoàn hảo và tín hiệu "đặt" có thể bị trục trặc trên đó. Đường dẫn tín hiệu qua một nhóm cổng cụ thể có thể mất nhiều thời gian hơn nhóm khác, khiến đầu ra được thiết lập hoạt động trong một thời gian ngắn trước khi đầu ra lắng xuống trạng thái cuối cùng.
Sự cố đầu ra này có thể khiến SR-Latch của chúng ta được thiết lập, mặc dù nó không được phép. Nếu chúng ta chuyển từ SR-Latch sang SR-FF, đồng hồ tắt cùng một đồng hồ với bộ đếm, thì SR-FF sẽ đợi một chu kỳ toàn bộ đồng hồ trước khi thay đổi trạng thái. Về bản chất, nó sẽ chờ tín hiệu đặt ổn định trước khi nhìn vào nó.
Nếu các đường dẫn thông qua logic tổ hợp cho tín hiệu đặt chỉ được định tuyến khác nhau (gây ra độ trễ khác nhau), thì hành vi trục trặc cũng sẽ thay đổi. Logic có thể hoạt động tốt, nhưng sau đó vì bạn đã thay đổi một thứ hoàn toàn không liên quan nên logic này được định tuyến khác và do đó, lỗi xuất hiện. Nhiệt độ và điện áp cũng sẽ thay đổi thời gian tín hiệu, và do đó có thể thay đổi hành vi trục trặc.
Điều này không chắc chắn trong thời gian là lý do tại sao bạn nên tránh chốt trong logic của bạn. FF's an toàn hơn nhiều để sử dụng. Đây là lý do tại sao trình biên dịch của bạn cảnh báo bạn về các chốt, vì rất dễ nhầm lẫn một chốt và bạn có thể không muốn nó ở đó.
Tất nhiên, đôi khi chốt được yêu cầu. Bạn chỉ cần sử dụng chúng rất hiếm khi, chỉ khi hoàn toàn cần thiết, và sau đó bạn phải thiết kế logic đúng để không xảy ra trục trặc.