Tại sao chúng ta cần đồng bộ hóa đầu vào không đồng bộ trong FSM?


8

Tôi mới được học điện tử kỹ thuật số. Tôi biết rằng có những cổng thực hiện các chức năng logic, tôi đã tìm hiểu về RS-Latch, D-Latch và Master-Slave-D-Flip-Flop. Bây giờ tôi có thể thực hiện các chức năng logic và lưu trữ trạng thái, tôi có thể tạo Máy hữu hạn trạng thái (ví dụ đèn giao thông). Trong lớp, chúng tôi đã nói về ví dụ về đèn giao thông cụ thể này và có một cuộc thảo luận về những vấn đề phát sinh, nếu chúng tôi sẽ thêm nút khởi động / dừng (tín hiệu cho đèn giao thông rằng người đi bộ đang chờ đèn xanh).

Kết luận là, nút này sẽ là đầu vào không đồng bộ, chúng ta cần đặt một flip flop trước máy trạng thái để đầu vào này có thể được đồng bộ hóa đầu tiên.

Điều tôi không hiểu là, vấn đề với các đầu vào không đồng bộ là gì? Tại sao chúng ta cần phải đồng bộ hóa nó? Và tại sao một cú lật ở phía trước của máy trạng thái hoặc mặt sau sẽ giúp đồng bộ hóa? Tôi đã đọc qua nhiều bài báo, nói về "tính di động" nhưng tôi vẫn không hiểu

Cảm ơn rất nhiều

Câu trả lời:


6

Như bạn đã hiểu, máy trạng thái điều khiển đèn giao thông của bạn là một máy đồng bộ. Đó là, nó được điều khiển bởi một số đồng hồ theo cách mà tất cả các thay đổi logic tổ hợp xảy ra và giải quyết các giá trị ổn định đủ lâu trước cạnh đồng hồ tiếp theo để đáp ứng thời gian thiết lập cần thiết.

sơ đồ

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

nhập mô tả hình ảnh ở đây

Nếu dữ liệu thay đổi trong thời gian thiết lập đó, đầu ra cuối cùng sẽ không chỉ không thể đoán trước được, mà do tính ổn định của meta, thực sự có thể nổi hoặc nhảy xung quanh một số giá trị trung gian trong một thời gian trước khi nó chọn giá trị cuối cùng. Nó thậm chí có thể dao động giữa logic một và logic 0 ở tần số cao gây ra dòng chảy và gia nhiệt đáng kể.

nhập mô tả hình ảnh ở đây

Như vậy, bất kỳ đầu vào không đồng bộ nào cho máy trạng thái cần phải được đồng bộ hóa tại một số điểm để hệ thống hoạt động như bạn mong muốn. Tuy nhiên, điều đó không nhất thiết có nghĩa là bạn LUÔN cần thêm một chốt khác vào hệ thống.

Nếu đầu vào chỉ tiếp tục đến một "cổng tiếp theo" VÀ trạng thái của đầu vào độc lập với tất cả các đầu vào khác, thì thực sự không có vấn đề gì nếu tín hiệu đến muộn cho bên. Về cơ bản, bạn cần phải hỏi ... "Nếu chúng ta bỏ lỡ đầu vào cho một chu kỳ đồng hồ, điều đó có quan trọng không?"

Tuy nhiên, nếu đầu vào cung cấp nhiều cổng khác nhau. Các cổng tiếp theo có thể thấy các mức logic khác nhau và truyền một trạng thái sai lầm sang chốt tiếp theo. Về cơ bản một loạt những điều xấu có thể xảy ra.

Điều này có thể được minh họa với ví dụ đơn giản của bạn. Lưu ý nếu độ di động tại REG1 chưa được xử lý trước đồng hồ tiếp theo, nó có thể khiến cả đèn WALK và đèn giao thông bật cùng lúc hoặc không thể bật.

sơ đồ

mô phỏng mạch này

Hơn nữa, nếu đầu vào không đồng bộ có mối quan hệ với đầu vào không đồng bộ khác mà bạn dự kiến ​​sẽ xảy ra cùng một lúc, đầu vào thứ hai có thể được nhận ra nhưng đầu vào thứ hai thì không.

Trong cả hai trường hợp, bạn cần thêm một chốt đồng bộ hóa vào đầu vào để đưa thời gian tín hiệu phù hợp với đồng hồ của máy trạng thái. Lưu ý, điều này thêm một độ trễ chu kỳ đồng hồ hoặc trễ nửa chu kỳ đồng hồ nếu bạn sử dụng cạnh khác của tín hiệu đồng hồ.

Tuy nhiên, bạn có thể hỏi, "nhưng không phải chốt đó có gặp phải vấn đề tương tự không?" và tất nhiên, câu trả lời sẽ là có. Nhưng mẹo ở đây là cho phép sự ổn định meta tiềm năng xảy ra tại một điểm trong mạch nơi nó không quan trọng như tôi đã nhấn mạnh ở trên.

Tìm điểm đó có thể có vấn đề với đầu vào phụ thuộc. Thông thường, logic bổ sung cần phải được thêm vào để đủ điều kiện những đầu vào đó.

Tuy nhiên, hãy lưu ý tính di động là một điều xác suất. Mặc dù, do sự khác biệt về dung sai sản xuất, hầu hết các chốt sẽ nhanh chóng thay thế, có khả năng nó sẽ không ổn định trong một thời gian. Khoảng cách giữa các xung đồng hồ càng dài thì khả năng nó sẽ ổn định càng cao. Như vậy, nếu đồng hồ hệ thống của bạn ở tần số cao, nên phân chia nó xuống để thực hiện chốt trước để cho phép có nhiều thời gian giải quyết hơn. Tuy nhiên, thậm chí sau đó không có đảm bảo.

Một suy nghĩ cuối cùng. Tôi đã đề cập rằng có khả năng ổn định meta gây ra dòng điện cao và sưởi ấm khi đồng bộ hóa một đầu vào bên ngoài ngẫu nhiên. Thật không may, có rất ít bạn có thể làm để khắc phục điều đó và các vấn đề về tính di động lâu dài ngoài việc loại bỏ các mạch đầu vào không đồng bộ.


Cảm ơn bạn! Vì vậy, một chu kỳ đồng hồ thêm từ flip flop thêm thời gian cho sự ổn định để ổn định? Ngoài ra, tại sao chúng ta sẽ đặt một flip flop, vào cuối của một FSM?
Eren

@Eren Có thêm thời gian và cung cấp cho nó một nơi an toàn, hợp lý, để giải quyết đồng bộ. Nói chung, bạn muốn tất cả các đầu ra thay đổi cùng một lúc. Vì vậy, giai đoạn cuối thường là một đầu ra lật, hay chính xác hơn là đầu ra "chốt", vì vậy các đầu ra đều đồng bộ.
Trevor_G

1
đã cho bạn +1 cho nhiều cổng, nhưng tin tưởng rằng bạn sửa các đoạn cuối cùng của mình. Khả năng siêu bền trong chốt đồng bộ cũng quan trọng, bởi vì điều đó có thể được truyền vào mạch. Không có cách chữa trị cho sự di căn. Tuy nhiên, bạn có thể giảm khả năng xuống mức xác suất nhỏ bằng cách chờ đợi lâu hơn trước khi có quyết định cuối cùng. Để tránh giảm tốc độ xung nhịp, điều này thường được thực hiện bằng cách đặt thêm các D-flop trước nó. Khi khả năng xảy ra lỗi giảm xuống một lần trong thời đại vũ trụ, với 1 tỷ mạch ở tốc độ xung nhịp tối đa, hầu hết mọi người đều coi khả năng di động 'đã được chữa khỏi'
Neil_UK

@Neil_UK yup, tôi đã cố gắng nói điều đó, mà không gây nhầm lẫn cho OP quá nhiều. Vẫn là một công việc đang tiến triển. Phải bước ra cho ngày mặc dù. Cảm ơn.
Trevor_G

1
Tính siêu bền là một bogeyman trong các loại thảo luận này. Trong thực tế, tình huống bạn mô tả nơi bạn cung cấp nhiều đầu vào trên ranh giới đồng hồ sẽ thất bại thường xuyên hơn so với việc bạn nhận được các sự kiện di động. Độ trễ định tuyến có thể sai lệch theo thứ tự nano giây, điều đó có nghĩa là sự thay đổi trong dữ liệu có thể đạt đến một lần lật trước cạnh tăng của đồng hồ nhận và có thể đạt đến một lần lật khác sau khi cạnh tăng. Tôi làm cho sự khác biệt này bởi vì tính di động chỉ là một vấn đề trong trường hợp bạn có rất ít chùng, trong khi định tuyến lệch luôn là một vấn đề.
jalalipop

3

Một vấn đề với thiết kế không đồng bộ, là sự hiện diện của chủng tộc hoặc mối nguy hiểm. Nói ví dụ trong mạch này, hãy để A = 1, B = 0 và C = 1 ban đầu và do đó D ổn định và ổn định ở 1.

nhập mô tả hình ảnh ở đây

Bây giờ hãy để B thay đổi thành 1 và C thay đổi thành 0 cùng một lúc . Rõ ràng là D sẽ vẫn ở mức 1. Nhưng trong các mạch thực, độ trễ lan truyền và độ trễ dây là vấn đề. Do đó, rất có thể sự thay đổi trong C đến cổng OR nhanh hơn thay đổi trong B truyền đến cổng OR, thông qua cổng AND. Kết quả là D bị kéo về 0 trong giây lát, trước khi nó trở lại trạng thái ổn định 1. Đây được gọi là chủng tộc hoặc nguy hiểm. Trục trặc nhất thời này có thể kích hoạt bất cứ mạch nào xuất hiện sau D và quá trình chuyển đổi không mong muốn này được truyền qua toàn bộ mạch. Điều này gây ra sự tiêu hao năng lượng không mong muốn và có thể lỗi trong chức năng.

Để tránh những vấn đề này, chúng ta có thể đăng ký đầu vào và đầu ra bằng cách thêm D-flip-flop trước tất cả các đầu vào A, B, C và sau đầu ra D. Vì vậy, bây giờ mạch của chúng ta chỉ chốt các đầu vào ổn định ở các cạnh đồng hồ, tính toán biểu thức, chốt D và chỉ xuất ra ở cạnh đồng hồ tiếp theo. Điều này đảm bảo rằng không có trục trặc nào như vậy trong đầu vào hoặc đầu ra được lan truyền trong mạch của chúng tôi, miễn là tất cả các đầu vào cho flip-flop đều đáp ứng thiết lập và thời gian giữ.

Đây là lý do chính tại sao các thiết kế đồng bộ được ưa thích hơn, bất chấp tốc độ mà các thiết kế không đồng bộ mang lại.


Cảm ơn rât nhiều! Tôi chỉ có một câu hỏi nữa nếu điều đó ổn. Thêm dép tông trước đầu vào và sau đầu ra sẽ gây ra sự dịch chuyển của hai chu kỳ đồng hồ. Sự thay đổi sẽ gây ra bất kỳ rắc rối cho máy nhà nước của chúng tôi? Có một sự tương tự với Người A đếm đến 7 và hỏi Người B nếu anh ta đếm đúng. B sẽ phân tích nó và trả lời "Có". Nếu chúng ta có một cú lật ở phía trước và sau khi xuất ra, câu trả lời "có" sẽ đến với người A khi anh ta ở tuổi 9. Tôi không thấy điều này sẽ gây ra bất kỳ rắc rối nào mặc dù ngoài độ trễ
Eren

Sau khi chốt các đầu vào trong một chu kỳ đồng hồ, chúng ta sẽ nhận được đầu ra trong chính chu kỳ đồng hồ tiếp theo. Chức năng sẽ vẫn như cũ. Chuyển trạng thái trong mỗi chu kỳ đồng hồ. Đó là cách mà FSM thường được thiết kế.
Mitu Raj

Phải đó là sự chậm trễ gây ra bởi flip-flop, nhưng điều đó không ảnh hưởng đến chức năng.
Mitu Raj
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.