В цифровой логике опасность — это нежелательный эффект , вызванный либо недостатком в системе, либо внешними воздействиями как в синхронных [ требуется ссылка ], так и в асинхронных схемах . [1] : 43 Логические опасности — это проявления проблемы, при которой изменения входных переменных не изменяют выход правильно из-за некоторой формы задержки, вызванной логическими элементами ( НЕ , И , ИЛИ вентилями и т. д.). Это приводит к тому, что логика не выполняет свою функцию должным образом. Три различных наиболее распространенных вида опасностей обычно называются статическими, динамическими и функциональными опасностями.
Опасности являются временной проблемой, поскольку логическая схема в конечном итоге установится на желаемой функции. Поэтому в синхронных конструкциях стандартной практикой является регистрация выхода схемы до того, как он будет использоваться в другом домене синхронизации или выведен из системы, чтобы опасности не вызывали никаких проблем. Однако, если это не так, крайне важно устранить опасности, поскольку они могут оказать влияние на другие подключенные системы.
Статическая опасность — это изменение состояния сигнала дважды подряд, когда ожидается, что сигнал останется постоянным. [1] : 48 Когда изменяется один входной сигнал, выходной сигнал изменяется на мгновение, прежде чем стабилизируется до правильного значения. Существует два типа статических опасностей:
В правильно сформированной двухуровневой логике И-ИЛИ, основанной на выражении Суммы продуктов, не будет никаких статических опасностей 0 (но все еще могут быть статические опасности 1). И наоборот, не будет никаких статических опасностей 1 в реализации ИЛИ-И выражения Произведения сумм (но все еще могут быть статические опасности 0).
Наиболее часто используемый метод устранения статических опасностей — добавление избыточной логики (консенсусных терминов в логическом выражении).
Рассмотрим несовершенную схему, которая страдает от задержки в физических логических элементах, например, вентилях И и т. д.
Простая схема выполняет функцию, отмечая:
При взгляде на начальную диаграмму становится ясно, что если бы не было задержек, то схема функционировала бы нормально. Однако два вентиля никогда не производятся абсолютно одинаковыми. Из-за этого несовершенства задержка для первого вентиля И будет немного отличаться от его аналога. Таким образом, ошибка возникает, когда входные данные меняются e, и для решения этой проблемы мы бы обратились к карте Карно . Два вентиля показаны сплошными кольцами, а опасность можно увидеть под пунктирным кольцом. Теорема, доказанная Хаффманом [2], гласит, что добавление избыточного цикла «BC» устранит опасность.
Итак, наша исходная функция теперь выглядит так:
Теперь мы видим, что даже с несовершенными логическими элементами наш пример не покажет признаков опасности, когда A изменит состояние. Эту теорию можно применить к любой логической системе. Сейчас большую часть этой работы выполняют компьютерные программы, но для простых примеров быстрее выполнить отладку вручную. Когда входных переменных много (скажем, 6 или больше), становится довольно сложно «увидеть» ошибки на карте Карно.
Динамическая опасность — это серия изменений состояния сигнала, которые происходят несколько раз подряд, когда ожидается, что сигнал изменит состояние только один раз. [1] : 48 Динамическая опасность — это возможность того, что выход изменится более одного раза в результате однократного изменения входа.
Динамические опасности часто возникают в более крупных логических схемах, где есть разные пути к выходу (от входа). Если каждый путь имеет разную задержку, то быстро становится ясно, что существует потенциал для изменения выходных значений, которые отличаются от требуемого / ожидаемого выхода.
Например, логическая схема должна изменять состояние выхода с 1 на 0 , но вместо этого изменяется с 1 на 0, затем на 1 и, наконец, останавливается на правильном значении 0. Это динамическая опасность.
Как правило, динамические опасности устранить сложнее, но следует отметить, что если из цепи устранены все статические опасности, то динамические опасности возникнуть не могут.
В отличие от статических и динамических опасностей, функциональные опасности возникают из-за изменения, применяемого к более чем одному входу. Не существует конкретного логического решения для их устранения. Один действительно надежный метод — предотвращение одновременного изменения входов, что в некоторых случаях неприменимо. Поэтому схемы должны быть тщательно спроектированы, чтобы иметь равные задержки в каждом пути. [3]