Как отмечает Дейв Твид, если FPGA не включает в себя аппаратные средства триггера, которые могут работать на обоих краях тактового генератора, необходимо будет написать собственную логику для реализации желаемого поведения с использованием обычных односторонних триггеров. Хотя существует ряд различных способов реализации схемы, которая во многом похожа на двухгранный триггер, такие схемы обычно добавляют некоторые временные ограничения, которые отличаются от тех, которые связаны с триггерами.
Например, простой подход состоит в том, чтобы иметь модуль, объединяющий два xors с двумя входами и пару триггеров «T» (где состояние входа, когда поступает тактовый импульс, указывает, должен ли этот фронт такта переключать выход), один срабатывает по нарастающему фронту, а другой - по спадающему фронту. Выход модуля будет равен xor выходов триггеров, а вход для обоих триггеров будет xor выхода модуля и его входа.
Схема, спроектированная таким образом, будет работать в основном как двухгранный триггер, хотя с более длительным временем установки и распространения, но с дополнительным ограничением по времени. Нормальный триггер, который не находится на пути обратной связи, не будет возражать, если начало фронта тактового импульса имеет кучу кратковременных импульсов при условии, что тактовые импульсы стабилизируются на допустимом уровне, и при условии, что ограничение времени установки, измеренное до первый импульс короткого замыкания и ограничения времени удержания и времени активности часов, измеренные со времени, когда импульс часов стабильно активен. Поведение вывода триггера будет неопределенным в течение нестабильного времени, но будет определено после стабилизации часов. Модуль double-xor-double-flop добавил бы дополнительное временное ограничение, согласно которому любой фронт тактовых импульсов, который мог бы изменить выходной сигнал, должен находиться на безопасном расстоянии от любого другого фронта тактовых импульсов, который мог бы это сделать. Несоблюдение этого ограничения, например, из-за того, что три тактовых фронта находятся в очень близкой последовательности, в то время как входные данные не совпадают с выходными, может оставить выходной сигнал в неопределенном или метастабильном состоянии (обратите внимание, что сценарии, включающие четное количество фронтов, не являются проблемой , поскольку такие сценарии будут включать только импульсы ускорения, случай с тремя фронтами (или другие случаи с нечетным числом, превышающим единицу) является проблемой, поскольку после импульсов ускорения будет действительный импульс.
Альтернативной схемотехникой может быть наличие двух триггеров, как указано выше, но подача их выходов в мультиплексор. Эта схема не будет выброшена в плохое состояние импульсами ускорения, и ее ограничения синхронизации будут такими же, как и у нижележащих защелок, но будет иметь тот недостаток, что выходной сигнал будет высоким и должен оставаться (или был низким и должен оставаться низким). ) так что мог кратковременно дать сбой по краю часов. В некоторых цепях это не имеет значения, но в других это будет иметь значение.
Вероятно, для инструментов логического синтеза было бы возможно автоматически реализовать двухсторонние триггеры, проанализировав, какие временные ограничения были определены как важные, но это будет несколько затруднительно. Это также увеличило бы риск того, что небольшое изменение в проекте может привести к серьезным изменениям в реализации и, таким образом, привести к значительным и неожиданным изменениям в поведении.