Я новый инженер-электрик, так что терпите меня. Я слышал, что некоторые другие инженеры, с которыми я работаю, рассказывают о состоянии гонки, которое существует в одной из наших трасс.
Что это значит?
pcb-design
Stihl Alighve
источник
источник
Ответы:
Это очень просто означает, что две вещи одновременно «гонятся» за результатом.
Примером является схема со сбросом и выводом Set. Если вы запускаете сброс, выход становится равным 0. Если вы активируете набор, выход становится равным 1. Если вы сначала настроили триггер, а затем очень, очень быстро после него сбросите будет видно, поэтому на выходе будет 0.
Но если они оба срабатывают в одно и то же время, что происходит?
Если разработчик схемы обратил внимание, должен быть ответ, если это важно для функции. Если нет определенного ответа на этот вопрос, схема имеет состояние гонки, когда сигнал из набора и сброса «гоняют» друг друга, чтобы увидеть, какой из них выигрывает, чтобы определить выход.
Трасса с наименьшей задержкой обычно побеждает, но тогда вы можете рассматривать состояние гонки как точный триггер, при котором наиболее задержанный путь запускается ровно намного раньше, чем более быстрый.
Многие схемы, в том числе логические строительные блоки внутри микросхем, имеют определенные условия гонки, но обычно они таковы, что когда вы используете схему так, как она предназначена, вы не заметите. Очень часто, когда инженеры говорят «состояние гонки» вслух пару раз, они на самом деле означают, что это также может произойти при нормальном использовании, что может стать проблемой, потому что в состоянии гонки нельзя предсказать нормальную работу.
В программном обеспечении этот термин также используется, но часто для обозначения проблем с синхронизацией или блокировок. Это похожий принцип, хотя. Часто, когда у вас на компьютере запущены два процесса, но они используют одну и ту же память, вы защищаете эту память от записи одним, в то время как другой использует ее. Если вы не называете это возможным условием гонки: один процесс может считывать значение, которое находится в процессе обновления, или оба могут записывать в него одновременно, и тогда вы не знаете, что будет бывает.
источник
fopen()
, записать в него данныеfclose()
, затемchmod()
защитить его. Это короткое окно междуfopen()
иchmod()
открывает возможное состояние состязания, при котором режим файла по умолчанию может позволить нежелательному постороннему человеку работать с файлом способом, запрещенным послеchmod()
вызова. Решение состоит в том, чтобы создать файлopen()
вместо этого, что позволяет установить режим как часть операции создания файла.Термин «состояние гонки» подразумевает, что (1) два или более сигналов могут поступать в любом порядке, сколь угодно близко друг к другу, и (2) невозможно аналитически показать, что существует практически нулевая вероятность любой возможной комбинации прибытия раз ставит проблему.
С точки зрения одного триггера, чей ввод данных может измениться в любое время относительно часов, почти одновременные переходы на часах и входах данных могут представлять собой состояние гонки. Однако, с точки зрения общего поведения схемы, они не создавали бы состояния гонки, если бы они могли возникать только в тех случаях, когда никакая нисходящая цепь не заботилась бы о том, что удерживала защелка, и никакая нисходящая схема не начинала заботиться о том, что удерживала защелка. до тех пор, пока не поступит тактовый импульс, который не может находиться рядом с какими-либо переходами на входе данных.
Кроме того, поскольку зачастую невозможно полностью полностью исключить возможность проблемных входных таймингов, многие анализы состояния гонки говорят о том, что, если выходные данные одного регистра поступают в другой, который управляется теми же часами, второй регистр всегда фиксируется «чистый» максимум или «чистый» минимум, даже если входы в первый регистр заставили его захватить уровень входа, который был прямо на пороге переключения. Теоретически, первая защелка могла бы зафиксировать уровень, который был достаточно выше или ниже своего точного порога переключения, чтобы выходной уровень переключался точно при поступлении следующего тактового импульса.
Как следствие, если нужно, например, взять вход и передать его в последовательность из трех триггеров, и иметь схему, которая выдает высокий уровень всякий раз, когда второй флоп был высоким, а третий - низким, тогда любой нарастающий фронт, который происходит на ввод данных, которому предшествует полная длительность такта низкого времени, а затем полный период такта высокого времени, по существу гарантированно приведет к тому, что выход схемы будет высоким в течение ровно одного такта.
смоделировать эту схему - схема, созданная с использованием CircuitLab
В этой схеме сигнал с несколько нерегулярной синхронизацией нормируется на тактовую частоту тремя способами таким образом, чтобы генерировать выходной сигнал, который является высоким для одного тактового цикла после каждого нарастающего фронта. Первая попытка нормализовать сигнал генерирует выход, который выглядит неприятно и имеет очевидное состояние гонки, если вход и такт изменяются одновременно. Второй подход намного лучше, но все еще имеет состояние гонки (которое симулятор не может вызвать), если синхронизация часов и данных заставляет первый регистр захватывать промежуточное значение. Третий подход представляет собой обычную практику и, как правило, считается безопасным, поскольку даже если первый регистр не может зафиксировать чистый максимум или чистый минимум, очень маловероятно, что выход из первого регистра будет иметь абсолютно правильное поведение, чтобы заставить второй регистр не захватывать чисто. Если данные изменяются очень близко к часам, они могут быть захвачены в текущем цикле или не получены до следующего, но если любая из этих ситуаций будет приемлемой, условия гонки отсутствуют.
источник
Вкратце, это означает, что на результат процесса будет влиять последовательность поступления двух входов, и эта последовательность является неопределенной (не может быть гарантирована).
источник