Fluid logic: различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
(Продолжил перевод)
(Закончил большую часть перевода.)
Строка 312: Строка 312:
Другой фактор — скорость течения воды. Её можно улучшить. Можно подавать воду под давлением, если заставить воду течь из резервуара на несколько z-уровней выше. В схемах на бесконечном течении можно заменить пластину на ступеньку вверх, ведущую в комнату 2x1 на уровне выше. Один тайл там можно сделать ступенькой вниз, другой — нажимной плитой. Это заставит воду вытекать оттуда быстрее. Для уменьшения задержки при выключении можно настроить пластину на 7-7. Это чуть увеличит потребление воды, но оно всё ещё останется относительно малым.
Другой фактор — скорость течения воды. Её можно улучшить. Можно подавать воду под давлением, если заставить воду течь из резервуара на несколько z-уровней выше. В схемах на бесконечном течении можно заменить пластину на ступеньку вверх, ведущую в комнату 2x1 на уровне выше. Один тайл там можно сделать ступенькой вниз, другой — нажимной плитой. Это заставит воду вытекать оттуда быстрее. Для уменьшения задержки при выключении можно настроить пластину на 7-7. Это чуть увеличит потребление воды, но оно всё ещё останется относительно малым.


==Edge Detector==
==Детектор края сигнала (Edge Detector)==
Иногда полезно иметь схему, которая бы зависела не от уровня сигнала, а от его смены — например, включение рычага может активировать одно событие, а его выключение — другое.
Иногда полезно иметь схему, которая бы зависела не от уровня сигнала, а от его смены — например, включение рычага может активировать одно событие, а его выключение — другое.


Строка 436: Строка 436:
На жидкостной логике можно реализовать относительно маленькие [[Memory_(computing)|ячейки памяти]], использующие совсем немного механизмов. Они обычно довольно примитивные, так что более продвинутые операции с памятью требуют дополнительных устройств, но если нужно просто хранить бит информации, то их трудно превзойти в компактности.
На жидкостной логике можно реализовать относительно маленькие [[Memory_(computing)|ячейки памяти]], использующие совсем немного механизмов. Они обычно довольно примитивные, так что более продвинутые операции с памятью требуют дополнительных устройств, но если нужно просто хранить бит информации, то их трудно превзойти в компактности.


====S/R Latch====
====RS-триггер (S/R Latch)====


{| style="border-spacing: 0"
{| style="border-spacing: 0"
Строка 461: Строка 461:
Автор: Hussel [http://dwarffortresswiki.org/index.php/User:Hussell/SetResetLatch]
Автор: Hussel [http://dwarffortresswiki.org/index.php/User:Hussell/SetResetLatch]


SR-триггер (set/reset latch) активируется, когда получает set сигнал — открытие двери {{Tile|┼|#0F0}}, запускающее внутрь воду, активирующую нажимную пластину (она должна быть настроена на 5-7) — и остаётся активным, даже когда сигнал set исчезает. Он деактивируется только при получении сигнала reset — открытии двери {{Tile|┼|#F00}}, позволяющем воде вытечь с пластины и деактивировать её. После этого триггер остаётся деактивированным, пока снова не получит сигнал set.
RS-триггер (set/reset latch) активируется, когда получает set сигнал — открытие двери {{Tile|┼|#0F0}}, запускающее внутрь воду, активирующую нажимную пластину (она должна быть настроена на 5-7) — и остаётся активным, даже когда сигнал set исчезает. Он деактивируется только при получении сигнала reset — открытии двери {{Tile|┼|#F00}}, позволяющем воде вытечь с пластины и деактивировать её. После этого триггер остаётся деактивированным, пока снова не получит сигнал set.


Как и в реальной жизни, в этой схеме не следует подавать одновременно сигналы set и reset.
Как и в реальной жизни, в этой схеме не следует подавать одновременно сигналы set и reset.


====D-Latch====
====D-триггер (D-Latch)====


{| style="border-spacing: 0"
{| style="border-spacing: 0"
Строка 490: Строка 490:
|}
|}


This cell "tests" the state of the "Data" (hence D ) input controlling the door {{Tile|┼|#FFF|#800}} and the pressure plate (set to trigger on 5-7 liquid) will take on that input's state when the "enable" input opens door {{Tile|┼|#FFF|#080}}: if the data input is on, water can pass from the source to the pressure plate and fills the cell. If the data input is off, water will spread from the plate to the door's tile and lower liquid depth over the plate.  
У D-триггера (D-Latch) также есть два входа: enable {{Tile|┼|#FFF|#080}} и data {{Tile|┼|#FFF|#800}}. При включении входа enable в ячейку будет записано значение data: если data включен, то вода затечёт в ячейку и нажмёт на пластину, если же data выключен, то вода вытечет с пластины в освободившуюся ячейку, деактивировав пластину.


This cell will turn "on" whenever both data and enable input are on, but will only turn "off" when the data input is off at the moment the enable input ''switches'' from off to on, making it a hybrid of a Latch (reacts to changes in data as long as enabled) and a flipflop (only reacts to data state the moment enable changes from off to on). While this is clearly a weakness of the design, it is very compact and uncomplicated, needing a mere four mechanisms to link the doors to the inputs.
Пластину следует настроить на уровень жидкости 5-7.


====Toggle Flipflop====
Следует отметить, что ячейка включается уровнем сигнала входов (включается, если включены и data, и enable), но выключается краем сигнала (выключается, если data был выключен в момент, когда включился enable). Это слабое место этой ячейки, но она очень компактна, проста и дешёва (на неё нужно всего 4 механизма, включая входы и выходы), что компенсирует сложность использования в сложных схемах.
 
====T-триггер (Toggle Flipflop)====


{| style="border-spacing: 0"
{| style="border-spacing: 0"
Строка 519: Строка 521:
|}
|}


This is a cell which changes state to the opposite whenever its "control" input switches from off to on. The door {{Tile|┼|#FFF|#080}} is activated by the control input, and both the door and the bridge {{Tile|╬|#FFF|#800}} are linked to the pressure plate (triggering on 5-7 water).  
Эта ячейка меняет своё состояние на противоположное каждый раз, когда сигнал control переключается с выключенного на включенное состояние. Сигнал control привязывается к двери {{Tile|┼|#FFF|#080}}; кроме того, и дверь, и мост {{Tile|╬|#FFF|#800}} связаны с нажимной пластиной, настроенной на 5-7.


The operation is not immediately obvious, thus a breakdown, beginning with the cell in the "off" state:
Принцип её работы не очевиден, так что рассмотрим его, начиная с ячейки в выключенном состоянии:


Water on the plate is 4 or less, the bridge is lowered. When the "clock/control" turns on, the door opens and water rushes onto the plate. The plate triggers and sends "on" signals to both bridge and door. The signal to the door is ignored, since the door's already open. The bridge receives a "raise" signal and reacts to it with a 100 step delay. Neither the bridge raising nor the door closing (when the control turns off again) does anything to the pressure plate's state, it remains "on".
На пластине 4 или меньше воды, мост опущен. Когда control включается, дверь открывается и вода натекает на пластину. Пластина посылает включающий сигнал на дверь и мост. Сигнал к двери игнорируется (дверь уже открыта), мост, через 100 тактов, поднимается. Ни поднятие моста, ни закрытие двери (когда выключается сигнал control) ничего не делают с пластиной, она остаётся включенной.


Water on the plate is 5 or more (usually 7), the bridge is raised. When the clock turns on, water spreads from the plate to the door's tile. Water level on the plate falls under the activation threshold. After the normal pressure plate reset delay of 99 steps, "off" signals are sent to the door and the bridge. The door will immediately close, the bridge will lower 100 steps later. The cell is "off" and will remain so until the clock turns on again.  
Вода на пластине находится на уровне 5 или больше, мост поднят. Когда control включается, вода вытекает с пластины на тайл с открывшейся дверью, и пластина деактивируется. Через примерно 100 тактов пластина посылает сигнал выключения двери и мосту. Дверь немедленно закрывается, мост опускается через 100 тактов. Ячейка вернулась в исходное выключенное состояние и будет в нём пребывать, пока не будет подан сигнал control.





Версия от 09:25, 5 августа 2019

Жидкостная логика — форма компьютеризации, использующая жидкость (обычно воду), управляемую различными методами, чтобы нажимать на нажимные пластины в определённое время и в определённом порядке, чтобы выполнять некоторую желаемую работу.

Схемы, основанные на бесконечном течении

Такие схемы относительно просты и дешевы, но требуют бесконечный источник и бесконечный приемник жидкости для работы. Хотя некоторых потерь воды можно избежать, построив дополнительные схемы для сохранения воды, закрывающиеся конструкции, такие как шлюзы, всегда будут уничтожать воду, так что в любом случае придётся её как-то возмещать. В приведённых примерах используются поднимающиеся мосты и шлюзы, так как у них одинаковая задержка в 100 тиков при включении/отключении сигналом. Мосты работают как инвертированные входы, так как они блокируют проход, когда получают сигнал включения, в отличие от шлюзов, которые при сигнале включения открываются. Каналы в схемах нужны для отвода жидкости.

AND

X
X
^
·

Элемент AND (И) создаётся просто расположением двух шлюзов подряд и подсоединением каждого к своему входу: XX. Когда оба шлюза получают сигнал включения, они открываются и позволяют воде пройти до нажимной пластины. Пластину необходимо настроить на реагирование на 4-7 (чтобы уменьшить число ложных срабатываний от того, что вода успела пройти, пока переключаются шлюзы, или от того, что вода не успела утечь, когда шлюзы закрылись).

  • Если использовать мосты вместо шлюзов, можно получить элемент NOR.
  • Выход можно инвертировать, настроив нажимную пластину на 0-3.
  • Можно использовать больше двух шлюзов, чтобы обрабатывать конъюнкцию более двух сигналов.
  • Можно поставить две пластины и настроить одну на 4-7, другую на 0-3, чтобы получить и сигнал, и его инверсию.
  • Можно, используя один шлюз и пластину на 0-3, сделать NOT.
  • NOT можно также сделать, использовав один мост и пластину на 4-7.

OR

X
^
·
X

Элемент OR (ИЛИ) создаётся расположением двух шлюзов параллельно и подключением каждого к своему входу: XX. Когда хотя бы один шлюз получает сигнал, он открывается и позволяет воде пройти и нажать на нажимную пластину. Пластину надо настроить на реагирование на 4-7 воду.

  • Используя мосты вместо шлюзов, можно получить NAND
  • Выход можно инвертировать, настроив пластины на 0-3.
  • Можно использовать больше двух шлюзов, чтобы обрабатывать дизъюнкцию более двух сигналов.
  • Можно поставить две пластины и настроить одну на 4-7, другую на 0-3, чтобы получить и сигнал, и его инверсию.

XOR

X
^
·
X

XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) можно создать, поставив мост и шлюз вместе. Красные мост и шлюз X вместе подключены к одному и тому же входу, а зелёные X вместе подключены к другому; за ними стоит нажимная пластина на 4-7. Можно убедиться, что эта схема работает как XOR: если сигналов на вход не подаётся, то вода упирается в шлюзы; если поданы оба входных сигнала, то вода упирается в мосты; если включен ровно один сигнал, то вода проходит и нажимает на пластину.

  • Если поменять местами шлюз и мост, привязанные к одному сигналу, то можно получить XNOR.
  • Выход можно инвертировать, настроив пластины на 0-3.
  • Можно поставить две пластины и настроить одну на 4-7, другую на 0-3, чтобы получить и сигнал, и его инверсию.
  • Обработка нескольких сигналов, хоть и возможна, требует экспоненциального количества шлюзов и мостов; проще присоединить выход к другому XOR.

Комбинируя шлюзы, мосты и нажимные пластины, можно получать более сложные схемы. Располагая шлюзы (или мосты) подряд связывает их как AND, параллельное расположение связывает как OR. Так можно получать сколь угодно сложные схемы: например, элемент XOR — это не что иное, как комбинация AND и OR: A XOR B = (A AND NOT B) OR (NOT A AND B). Но иногда проще использовать большее количество более простых элементов, не объединяя их в одно целое.

Водосберегающие схемы

На текущий момент не существует полностью жидкостносберегающих схем, и в любой схеме, использующей шлюзы или их эквивалент, нужно бороться с уничтожением жидкости. Возможным путём борьбы с уничтожением жидкости может быть использование люков. Кроме уничтожения жидкостей шлюзами, проблемой является испарение.

CMOS Transmission Gate and Inverter Logic

Perhaps the closest to utilizing water as a stand-in for electricity, transmission gate logic can be accomplished by simply having an infinite water source in place of all +Vs, and infinite drainage for all grounds. Simple floodgates behave as standard transmission gates, while bridges are inverted gates. However, unlike the other forms of fluid logic, but as with real world electrical circuits, a dedicated inverter is required, which must be hooked up to +V and ground.

Данная статья помечена как не оконченная.
Вы можете прочитать эту статью на английском или помочь проекту её переводом.

Advanced Complementary fluid logic Gates

В этом типе логики используется несколько другой принцип, чтобы минимизировать потребление воды. Обычно на каждый вход приходится по две конструкции, так, что одна из них всегда будет открыта, а другая закрыта, поэтому во время работы будет течь очень мало воды, причём она будет течь только при смене состояния. Thus, this variation of fluid logic is conceptually very similar to real CMOS circuits, which use a similar paradigm to limit power consumption.

Базовые схемы

Предположим, нам надо вычислить логическое выражение f. Это может быть просто AND или OR, или что-то более сложное. Это делается по следующей схеме:

A
^
B

Здесь A — это набор шлюзов или мостов, позволяющих воде течь только тогда, когда f истинно, B аналогично позволяет воде течь, когда f ложно, ^ — нажимная пластина, настроенная на нужный уровень. Обратите внимание, что в этой схеме не нужно отводить жидкость.

Примеры

В следующих примерах X — шлюз, — мост. Красные подключены к входу A, зелёные — к входу B.

NOT

^
X

Нажимную пластину нужно настроить на уровень воды 5-7. Когда вход выключается, мост опускается, а шлюз закрывается. Вода может течь на нажимную пластину и заполняет тайл с ней полностью, включая выход.

Когда вход включается, мост поднимается и отрезает входящий поток воды, а шлюз открывается, и вода на нажимной пластине растекается на освободившийся тайл. Уровень воды на пластине становится 3-4, что недостаточно для активации пластины, и она отключается.

Откачка воды необязательна: растекания воды на два открытых тайла достаточно для создания измеримо разного уровня жидкости. Эта идея используется для всех элементов в этом типе логики.

AND

X
X
^

OR

^ X
X

В элементе AND пластина должна реагировать на 6-7 или 7-7. Так как OR, по сути, является NOR'ом с инвертированным выходом, пластину в схеме нужно настроить на низкий уровень воды, рекомендуется 0-5.

XOR

Эта схема немного отличается от предыдущих. Выражение для включения такое: (A and not B) or (not A and B). Выражение для выключения: (A and B) or (not A and not B).

Схема, таким образом, выглядит так:

X X
^
X X

Если на обоих входах одно и то же значение (оба включены или выключены), то два закрытых шлюза или поднятых моста будут блокировать поток воды. Второй ряд шлюзов за нажимной плитой гарантирует, что у воды будет место для растекания, чтобы уменьшить уровень жидкости на пластине. Любая комбинация одного включающего и одного выключающего сигнала даёт воде путь до нажимной пластины. Пластина должна реагировать на 7-7, чтобы избежать ложных срабатываний.

Плюсы и минусы

Основное преимущество такой логики в том, что она использует намного меньше воды, чем схемы на бесконечном течении. Одной реки достаточно для обеспечения даже очень сложных систем. Также из таких схем не надо отводить воду.

Недостатками такой схемы являются большая ресурсоёмкость и необходимость в более тщательном планировании, так как шлюзы часто загораживают проход. Такие системы сильно зависят от точного уровня жидкости и требуют, чтобы приходящая вода была на уровне 7/7. Могут понадобиться дополнительные сооружения (резервуары или системы помп) для поддержания уровня жидкости или увеличения её давления для ускорения работы схемы. Это особенно актуально, если вы решили использовать магму/лаву в качестве жидкости.

Улучшение скорости работы

Основные факторы, влияющие на скорость работы этих схем — задержки шлюзов и мостов и задержка выключения нажимных плит. Их невозможно устранить, хотя использование дверей и люков, где это возможно, может их уменьшить.

Другой фактор — скорость течения воды. Её можно улучшить. Можно подавать воду под давлением, если заставить воду течь из резервуара на несколько z-уровней выше. В схемах на бесконечном течении можно заменить пластину на ступеньку вверх, ведущую в комнату 2x1 на уровне выше. Один тайл там можно сделать ступенькой вниз, другой — нажимной плитой. Это заставит воду вытекать оттуда быстрее. Для уменьшения задержки при выключении можно настроить пластину на 7-7. Это чуть увеличит потребление воды, но оно всё ещё останется относительно малым.

Детектор края сигнала (Edge Detector)

Иногда полезно иметь схему, которая бы зависела не от уровня сигнала, а от его смены — например, включение рычага может активировать одно событие, а его выключение — другое.

Z+0
X
X
Z=-1
^ #
^ #

Обе нажимные пластины должны активироваться на 2-6. Привяжите нижнюю пластину к машинам, которые надо активировать при переходе от выключенного состояния входа к включенному, и верхнюю — к машинам, которые надо активировать при переходе от включенного состояния входа к выключенному, затем привяжите необходимое устройство ввода (рычаг или пластину) к обоим шлюзам и обоим мостам.

Каждый раз, когда вход переключается, соответствующая пластина будет активирована и останется активной, пока вода не прекратит течь, после чего отключится примерно через 100 тиков.

Эту же схему можно реализовать на водосберегающей логике (если обе нажимные пластины привязаны к одному и тому же объекту (?)). Вход привязывается к шлюзу и мосту, нажимные пластины работают на 0-5 и 6-7 соответственно.

X ^ ^

Ячейки памяти

На жидкостной логике можно реализовать относительно маленькие ячейки памяти, использующие совсем немного механизмов. Они обычно довольно примитивные, так что более продвинутые операции с памятью требуют дополнительных устройств, но если нужно просто хранить бит информации, то их трудно превзойти в компактности.

RS-триггер (S/R Latch)

^

Автор: Hussel [1]

RS-триггер (set/reset latch) активируется, когда получает set сигнал — открытие двери , запускающее внутрь воду, активирующую нажимную пластину (она должна быть настроена на 5-7) — и остаётся активным, даже когда сигнал set исчезает. Он деактивируется только при получении сигнала reset — открытии двери , позволяющем воде вытечь с пластины и деактивировать её. После этого триггер остаётся деактивированным, пока снова не получит сигнал set.

Как и в реальной жизни, в этой схеме не следует подавать одновременно сигналы set и reset.

D-триггер (D-Latch)

^

У D-триггера (D-Latch) также есть два входа: enable и data . При включении входа enable в ячейку будет записано значение data: если data включен, то вода затечёт в ячейку и нажмёт на пластину, если же data выключен, то вода вытечет с пластины в освободившуюся ячейку, деактивировав пластину.

Пластину следует настроить на уровень жидкости 5-7.

Следует отметить, что ячейка включается уровнем сигнала входов (включается, если включены и data, и enable), но выключается краем сигнала (выключается, если data был выключен в момент, когда включился enable). Это слабое место этой ячейки, но она очень компактна, проста и дешёва (на неё нужно всего 4 механизма, включая входы и выходы), что компенсирует сложность использования в сложных схемах.

T-триггер (Toggle Flipflop)

^

Эта ячейка меняет своё состояние на противоположное каждый раз, когда сигнал control переключается с выключенного на включенное состояние. Сигнал control привязывается к двери ; кроме того, и дверь, и мост связаны с нажимной пластиной, настроенной на 5-7.

Принцип её работы не очевиден, так что рассмотрим его, начиная с ячейки в выключенном состоянии:

На пластине 4 или меньше воды, мост опущен. Когда control включается, дверь открывается и вода натекает на пластину. Пластина посылает включающий сигнал на дверь и мост. Сигнал к двери игнорируется (дверь уже открыта), мост, через 100 тактов, поднимается. Ни поднятие моста, ни закрытие двери (когда выключается сигнал control) ничего не делают с пластиной, она остаётся включенной.

Вода на пластине находится на уровне 5 или больше, мост поднят. Когда control включается, вода вытекает с пластины на тайл с открывшейся дверью, и пластина деактивируется. Через примерно 100 тактов пластина посылает сигнал выключения двери и мосту. Дверь немедленно закрывается, мост опускается через 100 тактов. Ячейка вернулась в исходное выключенное состояние и будет в нём пребывать, пока не будет подан сигнал control.