Tôi là một kỹ sư điện mới nên chịu đựng tôi. Tôi nghe một số kỹ sư khác mà tôi làm việc cùng nói về tình trạng chủng tộc tồn tại trong một trong các mạch của chúng tôi.
Điều đó nghĩa là gì?
Tôi là một kỹ sư điện mới nên chịu đựng tôi. Tôi nghe một số kỹ sư khác mà tôi làm việc cùng nói về tình trạng chủng tộc tồn tại trong một trong các mạch của chúng tôi.
Điều đó nghĩa là gì?
Câu trả lời:
Điều đó có nghĩa là, rất đơn giản là hai thứ cùng một lúc "chạy đua" cho kết quả.
Một ví dụ là một mạch có Ghim đặt lại và Ghim cài đặt, nếu bạn kích hoạt cài đặt lại, đầu ra trở thành 0. Nếu bạn kích hoạt cài đặt, đầu ra trở thành 1. Nếu bạn kích hoạt lần đầu tiên thiết lập và sau đó thiết lập lại rất nhanh sau đó, hãy đặt lại sẽ được nhìn thấy, vì vậy đầu ra là 0.
Nhưng, nếu cả hai đều được kích hoạt cùng một lúc, điều gì xảy ra?
Nếu người thiết kế mạch chú ý, cần có câu trả lời, nếu điều đó quan trọng đối với chức năng. Nếu không có câu trả lời nhất định cho câu hỏi đó, mạch có điều kiện cuộc đua, trong đó tín hiệu từ tập hợp và thiết lập lại "cuộc đua" với nhau để xem cái nào thắng để xác định đầu ra.
Con đường có độ trễ ít nhất thường sẽ giành chiến thắng, nhưng sau đó bạn có thể thấy điều kiện cuộc đua là trình kích hoạt chính xác trong đó con đường bị trì hoãn nhiều nhất được kích hoạt chính xác đến mức đó trước khi nhanh hơn.
Nhiều mạch, bao gồm các khối xây dựng logic bên trong IC, có các điều kiện chủng tộc nhất định, nhưng thông thường chúng là như vậy khi bạn sử dụng mạch theo cách nó được dự định, mà bạn sẽ không nhận thấy. Vì vậy, thường khi các kỹ sư nói "điều kiện cuộc đua" một vài lần họ thực sự có nghĩa rằng đó cũng là một điều có thể xảy ra trong sử dụng bình thường, đó sẽ là một vấn đề, bởi vì trong điều kiện cuộc đua, hoạt động bình thường không thể dự đoán được.
Trong phần mềm, thuật ngữ này cũng được sử dụng, nhưng thường để chỉ các vấn đề về thời gian hoặc khóa. Đó là một nguyên tắc tương tự, mặc dù. Thông thường khi bạn có hai tiến trình trong một máy tính chạy độc lập, nhưng sử dụng cùng một bộ nhớ, bạn sẽ bảo vệ bộ nhớ đó khỏi bị ghi bởi một, trong khi quá trình kia đang sử dụng nó. Nếu bạn không gọi đó là điều kiện chủng tộc có thể xảy ra: Một quá trình có thể là đọc một giá trị đang trong quá trình cập nhật hoặc cả hai có thể viết cho nó cùng một lúc và sau đó bạn không biết điều gì sẽ xảy ra xảy ra
fopen()
, ghi dữ liệu vào fclose()
nó, sau chmod()
đó để bảo mật nó. Cửa sổ ngắn đó nằm giữa fopen()
và chmod()
mở một điều kiện cuộc đua có thể trong đó chế độ tệp mặc định có thể cho phép người ngoài không mong muốn làm việc với tệp theo cách bị từ chối sau chmod()
cuộc gọi. Giải pháp là tạo tệp open()
thay thế, cho phép thiết lập chế độ như một phần của hoạt động tạo tệp.
Thuật ngữ "điều kiện chủng tộc" ngụ ý rằng (1) hai hoặc nhiều tín hiệu có thể đến theo bất kỳ thứ tự nào, tùy ý gần nhau và (2) không thể chỉ ra một cách phân tích rằng về cơ bản không có xác suất nào về sự kết hợp có thể xảy ra lần đặt ra một vấn đề.
Từ quan điểm của một lần lật đơn có đầu vào dữ liệu có thể thay đổi bất cứ lúc nào đối với đồng hồ, các chuyển đổi gần như đồng thời trên đồng hồ và đầu vào dữ liệu có thể đặt ra một điều kiện cuộc đua. Tuy nhiên, từ quan điểm về hành vi mạch tổng thể, họ sẽ không đặt ra điều kiện cuộc đua nếu chúng chỉ có thể xảy ra vào những thời điểm mà không có sự tuần hoàn xuôi dòng sẽ quan tâm đến những gì chốt giữ và không có mạch hạ lưu nào bắt đầu quan tâm đến những gì chốt được giữ cho đến sau khi có xung đồng hồ không thể ở bất kỳ nơi nào gần bất kỳ chuyển đổi nào trên đầu vào dữ liệu.
Hơn nữa, vì thường không thể loại bỏ hoàn toàn mọi khả năng về thời gian đầu vào có vấn đề, nhiều phân tích về điều kiện cuộc đua sẽ nói rằng nếu đầu ra của một thanh ghi được đưa vào một thanh ghi khác được điều khiển bởi cùng một đồng hồ, thì thanh ghi thứ hai sẽ luôn luôn chốt mức cao "sạch" hoặc mức "sạch" ngay cả khi các đầu vào của thanh ghi đầu tiên khiến nó bắt được một mức đầu vào đúng ở ngưỡng chuyển đổi. Về lý thuyết, chốt đầu tiên có thể bắt được một mức vừa đủ trên hoặc dưới ngưỡng chuyển đổi chính xác của nó để mức đầu ra sẽ chuyển đổi chính xác khi xung đồng hồ tiếp theo đến.
Kết quả là, nếu một người ví dụ như lấy một đầu vào và chuyển nó thành một chuỗi gồm ba lần lật, và có một mạch phát ra cao bất cứ khi nào flop thứ hai cao nhưng thứ ba thấp, thì bất kỳ cạnh tăng nào xảy ra trên đầu vào dữ liệu đi trước thời gian thấp có giá trị toàn bộ thời gian thấp và sau đó là thời gian đầy đủ của thời gian cao, về cơ bản sẽ được đảm bảo để làm cho đầu ra của mạch cao trong chính xác một chu kỳ đồng hồ.
mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
Trong sơ đồ này, một tín hiệu có thời gian hơi bất thường được chuẩn hóa thành đồng hồ theo ba cách theo cách để tạo ra một đầu ra cao cho một chu kỳ đồng hồ sau mỗi cạnh tăng. Nỗ lực đầu tiên để bình thường hóa tín hiệu tạo ra một đầu ra trông khó chịu và có một điều kiện cuộc đua rõ ràng nếu đầu vào và đồng hồ thay đổi đồng thời. Cách tiếp cận thứ hai tốt hơn rất nhiều, nhưng vẫn có điều kiện cuộc đua (mà trình giả lập không thể kích hoạt) nếu thời gian của đồng hồ và dữ liệu khiến thanh ghi đầu tiên thu được giá trị trung gian. Cách tiếp cận thứ ba đại diện cho thông lệ chung và thường được coi là an toàn, vì ngay cả khi đăng ký đầu tiên không đạt được mức cao sạch hoặc mức thấp sạch, rất khó có khả năng đầu ra từ thanh ghi đầu tiên có hành vi chính xác để khiến thanh ghi thứ hai không lấy được sạch. Nếu dữ liệu thay đổi rất gần với đồng hồ, nó có thể bị lấy theo chu kỳ hiện tại hoặc không bị lấy cho đến lần tiếp theo, nhưng nếu một trong hai tình huống sẽ được chấp nhận thì không có điều kiện cuộc đua.