Триггеры — схемы, которые могут сохранять информацию о своём состоянии продолжительное время и позволяют изменять его с помощью входящего сигнала красного камня.
Введение
Триггеры являются, по сути дела, ячейками памяти объёмом в один бит. Они могут запоминать два состояния — либо включено (1), либо не включено (0) — и сохранять его на протяжении длительного времени. Этим они отличаются от схем, которые взаимодействуют со входящими сигналами только во время включения; они позволяют превратить одиночный импульс в постоянный сигнал, «превратить кнопку в рычаг».
Устройства на основе триггеров могут использоваться для подачи сигнала, который изменяется каждый раз, когда устройство включено, даже при использовании одних и тех же входов. Подобные устройства, реализующие секвенциальную логику, зависящую от предыдущих состояний входов, позволяют создавать счётчики, часы с длинным периодом и сложные модули памяти, которые нельзя создать с помощью одних только комбинационных логических схем (вентилей). Триггеры также используются для того, чтобы устройство по-разному работало на основе не только текущего, но и предыдущего состояния входов.
Существуют несколько основных групп триггеров, которые разделены на основе входов. Входы имеют свои обозначения в зависимости от назначения:
- S — включение (от англ. set);
- R — сброс (от англ. reset);
- T — переключение (от англ. toggle);
- D — вход, состояние которого необходимо задержать (от англ. delay — задержка или data — данные);
- C — тактовый вход для синхронных триггеров (от англ. clock — часы).
- J и K — аналоги соответственно входов S и R у JK-триггеров (от англ. jump — прыжок и kill — отключение).
Существуют также более общие обозначения: для выхода традиционно используется символ Q. Иногда помимо Q имеется и обратный выход Q̅, состояние которого противоположно выходу Q; тогда само устройство получает обозначение «триггер с двухфазным выходом». Кроме того:
- если у триггера имеется вход C, то такой триггер называется синхронным. Поступающий на выход Q сигнал обновляется не сразу, а после подачи сигнала на вход C (то же относится к выходу Q̅ при его наличии). Все остальные триггеры являются асинхронными;
- если триггер реагирует непосредственно на уровень сигнала на входах, то такой триггер называется одноступенчатым (англ. latch — «защёлка»). Если же триггер реагирует на изменение состояния сигналов на входах (так называемый фронт сигнала), то он называется двухступенчатым (англ. flip-flop — образное обозначение «шлёпания»). Все рассматриваемые триггеры считаются одноступенчатыми, если не указано другое.
Основное внимание в данной статье уделяется асинхронным триггерам как наиболее практичным в условиях Minecraft, где быстродействие схем из красного камня чётко ограничено тактами, длительность которых, как правило, на порядки превышает быстродействие электронных схем в реальной жизни.
Наиболее распространены следующие триггеры:
- RS-триггер (иногда SR-триггер) имеет отдельные входы S и R для изменения состояния (соответственно в 1 или 0).
- T-триггеры имеют только один вход T, изменение состояния которого приводит к переключению состояния триггера с 1 до 0 или обратно.
- SRT-триггеры совмещают функционал RS-триггеров и T-триггеров.
- D-триггеры являются синхронными. Они запоминают состояние входа D до тех пор, пока не будут обновлены тактовым сигналом на входе C.
- JK-триггеры являются аналогами RS-триггеров, T-триггеров и SRT-триггеров. Вместо входов R и S у такого триггера имеются соответственно входы J и K. Для изменения состояния на противоположное необходимо подать сигнал на оба входа J и K одновременно. Множество JK-триггеров синхронные (как и все триггеры такого рода, используемые в реальном мире), то есть обновляются только при подаче сигнала на вход C. Хотя синхронные JK-триггеры распространены в электронных схемах в реальной жизни, в Minecraft они используются редко в связи с малой потребностью в синхронных триггерах как таковых, а также громоздкостью. Более удобной альтернативой для игры являются асинхронные JK-триггеры, которые существуют в Minecraft, но непрактичны в реальной жизни.
В статье приводятся схемы состояний различных триггеров при различных входах. Возле выходов Q и Q̅ в скобках указывается переменная времени t, указывающая текущий момент времени, также может указываться время t-1 для предыдущего состояния выходов.
RS-триггеры
Таблица состояний для асинхронного RS-триггера S | R | S̅ | R̅ | Q(t) | Q̅(t) |
1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | Q(t-1) | Q̅(t-1) |
1 | 1 | 0 | 0 | Н/Д |
RS-триггер является одним из простейших видов триггеров в Minecraft. У него всего два входа: S (от англ. set) и R (от англ. reset), и при подаче сигнала на один из них триггер меняет своё состояние, сохраняя его до следующего сигнала. Если сигнал подан на вход S, то сигнал на выходе Q становится положительным, если же сигнал подан на вход R — то отрицательным. Если сигнал подан на оба входа, то поведение RS-триггера не определено. В этом разделе основное внимание отведено асинхронным RS-триггерам без входа синхронизации C. Синхронным аналогом RS-триггера является синхронный JK-триггер, который также отличается наличием определённого поведения при подаче сигнала на оба входа (триггер переключает своё состояние на противоположное).
Наиболее распространены следующие виды RS-триггеров:
- RS-NOR-триггер, созданный на основе двух вентилей «ИЛИ-НЕ» (англ. NOR gate). Вариант RS-NOR-триггера на основе красных факелов является самым распространённым RS-триггером, а также одним из самых компактных и доступных триггеров в игре в целом: для него потребуются всего 2 красных факела, несколько единиц красной пыли и несколько твёрдых блоков. Также могут использоваться повторители. Некоторые варианты имеют входы, совмещённые с выходами (дуплексные входы/выходы), то есть если подать сигнал на один из входов, он на этом же входе и останется.
- RS-NAND-триггер, созданный на основе двух вентилей «И-НЕ» (англ. NAND gate). В отличие от RS-NOR-триггера принимает обратные сигналы, то есть если на входе S был потерян сигнал, то это будет равносильно подаче сигнала на аналогичный вход RS-NOR-триггера (то же самое со входом R). Кроме того, RS-NAND-триггер более затратен, так как для вентиля И-НЕ требуется больше ресурсов (тогда как одиночный красный факел сам по себе является вентилем «ИЛИ-НЕ»).
- RS-триггеры на основе передвижения блоков — источников сигнала поршнями. Хотя они компактнее RS-NOR-триггеров, но поршни более затратные в отличие от красных факелов, составляющих основу RS-NOR- и RS-NAND-триггеров, а также издают шум при изменении состояния.
- Триггеры на основе выбрасывателей или загрузочных воронок, перемещающих между собой предметы. В данном случае сигналы на выходах выдаются с помощью компараторов, главные входы которых подключены к выбрасывателям или воронкам. В случае воронок те отключаются вентилями «НЕ» (чаще всего красными факелами), чтобы задержать перемещение предмета. В отличие от RS-триггеров на основе факелов данные виды триггеров требуют значительно больше ресурсов, в частности кварц Нижнего мира, необходимый при крафте компараторов. Кроме того, сигнал на выходе имеет неполную мощность, которая может потребовать усиления с помощью повторителя.
T-триггеры
Таблица состояний для T-триггера T | Q(t) |
0 | Q(t-1) |
1 | Q̅(t-1) |
T-триггер является одним из двух наиболее распространённых видов триггеров в Minecraft (наряду с RS-триггерами). Он имеет только один вход T, который используется для переключения сигнала на выходе Q. Для возвращения выхода в прежнее состояние необходимо подать сигнал на T во второй раз. Это позволяет использовать источники сигналов, активные только определённое количество времени (например, кнопки, нажимные пластины, наблюдатели), для постоянного питания того или иного устройства; отключить его можно второй активацией источника. Кроме того, с помощью T-триггера можно отсчитывать каждый второй сигнал, что делает его основой для двоичных счётчиков и ряда таймеров большой периодичности.
В разделе рассматриваются асинхронные T-триггеры без входа C. Синхронный JK-триггер может выполнять функции T-триггера, если объединить входы J и K в один. Существуют несколько подходов для создания T-триггеров:
- Использование генератора тактовых импульсов с системой блокировки. Во время активации генератор меняет своё состояние, после чего через определённое время он блокируется. В случае одноступенчатой «защёлки» генератор блокируется только после падения сигнала на входе, и если сигнал слишком длинный, на входе сигнал будет периодически меняться (фактически подобное устройство представляет собой контролируемый генератор тактовых импульсов). Это не характерно для двухступенчатых триггеров, реагирующих на фронт сигнала. Наиболее эффективными среди таких T-триггеров являются устройства на основе блокировки повторителей, отчасти напоминающие D-триггеры.
- Использование RS-триггера с системой перенаправления входящего сигнала. В зависимости от текущего состояния триггера входной сигнал будет подключен к тому входу RS-триггера, который в данный момент позволяет изменить его состояние. Для этого могут использоваться логические вентили с поршнями, а также вагонетки. Такой вид T-триггеров легче всего преобразовать в SRT-триггеры.
- Перемещение блоков с помощью поршней или предметов с помощью выбрасывателей. Просто запитать оба поршня или выбрасывателя, направленные друг в друга, одновременно нельзя (фактически это будет попыткой подать сигнал на оба входа RS-триггера). Поэтому необходимо использовать несколько устройств: например, четыре поршня, которые будут перемещать блок или предмет по кругу. Наиболее компактными в этой категории являются T-триггеры на основе перемещения предметов.
- Перемещение блока с помощью одного липкого поршня. Если липкий поршень принимает сигнал короче, чем 1,5 такта красного камня (0,15 секунд), то он сразу перемещает блок и оставляет его на новом месте. Такие T-триггеры часто снабжены средствами для «укорачивания» сигнала. Данный вид триггеров работает только в Java Edition.
На деле, конечно, подобное деление условно, так как существует возможность создания T-триггера, совмещающего ряд из этих подходов.
T-триггеры на основе генераторов тактовых импульсов
T-триггеры на основе RS-триггеров
T-триггеры на основе перемещения блоков или предметов
D-триггеры
Синхронный D-триггер используется для того, чтобы изменение входного сигнала D оказывало влияние на работу схемы только в определённый момент, а именно во время подачи сигнала на вход синхронизации C. Когда сигнал подаётся на вход C, триггер запоминает состояние входа D и устанавливает в него выход Q, а затем сохраняет его до следующей активации входа C.
Для реализации D-триггера легче всего использовать повторители в режиме блокировки сигнала (для этого один повторитель необходимо направить прямо в боковую сторону другого повторителя). Одноступенчатый триггер можно реализовать с помощью всего лишь двух повторителей (один из них блокируется другим), а двуступенчатый — с помощью четырёх повторителей и факела. Без использования блокирующих повторителей создание D-триггера заметно усложняется и требует использования RS-триггеров.
D-триггеры на основе блокировки повторителей
D-триггеры на основе RS-триггеров
SRT-триггеры и JK-триггеры
Таблица состояний для JK-триггера (синхронного) S | R | Q(t-1) | Q(t) |
0 | любой | Q(t) |
1 | 0 | 1 |
0 | 1 | 0 |
1 | Q̅(t) |
Таблица состояний для SRT-триггера S | R | T | Q(t) |
0 | 0 | Q(t) |
1 | Q̅(t) |
1 | 0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 | не определено[проверить] |
0 | 1 |
1 | 0 |
1 |
SRT-триггер совмещает в себя функции RS-триггера и T-триггера. Помимо возможности устанавливать триггер в любое конкретное состояние (с помощью входов S и R), такое устройство позволяет переключать текущее состояние с помощью входа T. Подобный триггер часто можно создать на основе T-триггера, если в он свою очередь использует RS-триггер: для этого необходимо подключиться к его входам S и R напрямую (но так, чтобы не вмешиваться в работу входа T). Схожей универсальностью обладает JK-триггер, где вместо отдельного входа T для переключения необходимо подать сигнал на оба входа (которые носят название J и K) одновременно. Хотя в реальной жизни все используемые JK-триггеры синхронные (то есть имеют вход синхронизации C), в условиях Minecraft возможно создание асинхронного JK-триггера. Дело в том, что для определения одновременной подачи сигнала на оба входа нужно учитывать быстродействие триггера. И если в реальной жизни это нереально из-за чрезвычайно коротких интервалов быстродействия, то в Minecraft быстродействие минимально ограничено тактами красного камня, составляющими 0,1 секунды, что вполне достаточно для практической реализации. Переключение JK-триггера работает надёжно только в том случае, если триггер двухступенчатый (реагирует на фронт сигнала), как в случае с T-триггерами. Синхронный JK-триггер может выполнять роль D-триггера (для этого необходимо подключить вход J к входу K через вентиль НЕ), хотя, естественно, лучше использовать для этой цели именно D-триггер. SRT-триггеры и асинхронные JK-триггеры
См. также