Memory (computing): различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
м (Категоризация)
Нет описания правки
 
(не показано 6 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{Переделать|требуется перевод}}
{{Computing}}
{{Computing}}


Память используется для сложения чисел и состояний в [[Computing|дварфийской компьютерной системе]]. Обычно используется бинарная память, но это не обязательно. Здесь показаны различные способы создания клетки памяти, в зависимости от того, что вы используете, будь то [[mechanical logic|механическую логику]], [[fluid logic|жидкостную логику]], [[creature logic|логику существ]], или [[minecart logic|вагонеточную логику]]. С бинарной памятью, каждая клетка будет иметь два состояния — 0 и 1, или же ''ложь'' и ''истина''.
'''Память''' используется для сложения чисел и состояний в [[Computing|дварфийской компьютерной системе]]. Обычно используется бинарная память, но это не обязательно. Здесь показаны различные способы создания клетки памяти, в зависимости от того, что вы используете, будь то [[mechanical logic|механическую логику]], [[fluid logic|жидкостную логику]], [[creature logic|логику существ]], или [[minecart logic|вагонеточную логику]]. С бинарной памятью, каждая клетка будет иметь два состояния — 0 и 1, или же ''ложь'' и ''истина''.


===Flip-flops versus latches===
===Триггеры против защёлок===
The most basic characteristic of memory in Dwarf Fortress is that it acts as a signal splitter: given a series of on-off signal cycles, it outputs a series of alternating on or off signals. Memory that does this, and only this, acts like a flip-flop: every time you trigger the memory, it changes state. Such memory is perfect for devices such as [[Adder (Computing)|counters]]. However, it's common to desire the ability to write state directly to your memory, rather than toggling it-- that is, to write either '''true''' or '''false''' to memory directly, without knowing the current state of the memory. This can be described with a chart where the memory value feeds back into itself:
Наиболее базовая характеристика памяти в Dwarf Fortress заключается в том, что что она действует как разделитель сигналов: даётся серия on-off сигнальных циклов, и выходит серией переменных on или off сигналов. Память, действующая по такой, и только такой, схеме, работает как триггер: каждый раз вы воздействуете на ячейку памяти, она меняет состояние. Такая память идеально подходит для таких устройств, как [[Adder (Computing)|счетчики]]. Тем не менее, обычно хочется иметь возможность непосредственно изменять состояние памяти вместо того, чтобы переключать его, т. е. писать либо '''истину''' или '''ложь''' в память самому, без знания текущего состояния памяти. Это можно описать таблицей, в которой значение памяти возвращается обратно в себя:
{| class="wikitable" border=1
{| class="wikitable" border=1
|-
|-
! input
! Вход
! latch state
! Состояние защёлок
! output
! Выход
! new latch state
! Новое состояние защёлок
|-
|-
| 0
| 0
| 0
| 0
| none
| ничего
| 0
| 0
|-
|-
Строка 30: Строка 29:
| 1
| 1
| 1
| 1
| none
| ничего
| 1
| 1
|}<br />
|}
===Performance===
===Производительность===
Memory systems in a dwarf fortress, thankfully, are very good at maintaining their value (in the absence of any [[troll]]s), but they are still plagued by problems with latency and long refractory periods. Latency refers to the length of time before which a change in value will register, and the refractory period refers to the period after writing to memory during which one cannot reliably write to it a second time. Because of the delays involved with [[pressure plate]]s, latency and refractory period for a given memory cell often depend on which state the memory is being changed to. For instance, the mechanical hybrid cell below has nearly no latency when being written as true, but around 100 ticks of latency when being written as false.
К счастью, системы памяти в игры очень хорошо сохраняют своё значения (в отсутствие каких-либо [[troll|троллей]]), но они по-прежнему страдают от проблем с задержками и длительными рефрактерными периодами. Задержка относится к периоду времени, в течение которого будет зарегистрировано изменение значения, а рефрактерный период относится к периоду после записи в память, в течение которого невозможно надежно записать в нее второй раз. Из-за задержек, связанных с [[pressure plate|нажимными плитами]], задержка и рефрактерный период для ячейки памяти часто зависят от того, в какое состояние осуществляется переход памяти. Например, механическая гибридная ячейка из примера ниже почти не имеет задержки, когда в неё записана 1, но когда в ней записан 0, задержка составляет около 100 тактов.


Some designs can trade simplicity or material needs for costs in performance.
В некоторых схемах простоту или потребность в материалах можно получить увеличением затрат на производительность.


==Fluid Logic==
== Жидкостная логика ==
Simple fluid logic latches rely on an infinite source and infinite drain, storing information in the form of the presence or absence of water in a particular location.
Простые защелки с жидкостной логикой полагаются на бесконечный источник и бесконечный сток, сохраняя информацию в виде присутствия или отсутствия воды в определенном месте.


{{diagram|spaces=yes|
<diagram>
═════
═════
[#0F0]~[#0F0]X[#F0F]^[#F00]X[#0FF]~
[#0F0]~[#0F0]X[#F0F]^[#F00]X[#0FF]~
═════}}
═════</diagram>


In this design, water flows from an infinite source {{Raw Tile|~|#0F0|#000}} over an output [[pressure plate]] {{Raw Tile|^|#F0F|#000}} toward an infinite drain {{Raw Tile|~|#0FF|#000}}. Its flow is controlled by two [[floodgate]]s, {{Raw Tile|X|#0F0|#000}}, and {{Raw Tile|X|#F00|#000}}, linked to two separate inputs. When {{Raw Tile|X|#0F0|#000}} is open and {{Raw Tile|X|#F00|#000}} closed , water will cover {{Raw Tile|^|#F0F|#000}} and remains so, regardless of the state of {{Raw Tile|X|#0F0|#000}}.  
В этой конструкции вода течет из бесконечного источника {{Raw Tile|~|#0F0|#000}} через выходную [[pressure plate|нажимную пластину]] {{Raw Tile|^|#F0F|#000}} в сторону бесконечного стока {{Raw Tile|~|#0FF|#000}}. Его поток контролируется двумя [[floodgate|шлюзами]], {{Raw Tile|X|#0F0|#000}} и {{Raw Tile|X|#F00|#000}}, связанными с двумя отдельными входами. Когда {{Raw Tile|X|#0F0|#000}} открыт, а {{Raw Tile|X|#F00|#000}} закрыт, вода покроет {{Raw Tile|^|#F0F|#000}} и остается так независимо от состояния {{Raw Tile|X|#0F0|#000}}.


If {{Raw Tile|X|#F00|#000}} is opened while {{Raw Tile|X|#0F0|#000}} is closed, water will leave {{Raw Tile|^|#F0F|#000}} and the tile will remain empty of water until {{Raw Tile|X|#0F0|#000}} opens again.
Если {{Raw Tile|X|#F00|#000}} открыт, а {{Raw Tile|X|#0F0|#000}} закрыт, вода уйдет из {{Raw Tile|^|#F0F|#000}} и тайл останется пустым до тех пор, пока {{Raw Tile|X|#0F0|#000}} не откроется снова.


This design has relatively high latency, because of the 100 tick delay associated with floodgates. Replacing the floodgates with doors, which have no reaction delay, greatly accelerates the response of the latch, but the overall performance is still limited by the reset period of pressure plates. Given careful enough design and sufficient water pressure, the latency of a write to true can approach 10, with the latency of a write to false around 110.
Эта конструкция имеет относительно низкую скорость работы из-за задержки в 100 тиков, связанной с шлюзами. Замена шлюзов на двери, не имеющие задержки, значительно ускоряет реакцию триггера-защёлки, но общая производительность все равно ограничена периодом сброса нажимных пластин. При достаточно тщательном проектировании и достаточном давлении воды задержка при записи в значение истины может приближаться к 10, а задержка записи в значение ложь — около 110.


==Creature Logic==
==Логика существ==
{{diagram|spaces=yes|\
<diagram>
   ╔═╗   
   ╔═╗   
═══╝[#0F0]┼╚══
═══╝[#0F0]┼╚══
[#F00]p[#FF0]¢[#FF0]^[#FF0]¢[#00F]¢[#F0F][#00F]^[#00F]¢[#F00]p
[#F00]p[#FF0]¢[#FF0]^[#FF0]¢[#00F]¢[#F0F][#00F]^[#00F]¢[#F00]p
══╗[#0FF]┼╔═══
══╗[#0FF]┼╔═══
   ╚═╝  }}
   ╚═╝  </diagram>


In this circuit, a creature placed between in the middle seeks its [[path|pathing]] goal {{Raw Tile|p|#F00|#000}} but is constrained by the [[hatch cover|hatch]]es {{Raw Tile|¢|#FF0|#000}} and {{Raw Tile|¢|#00F|#000}}, each linked to the pressure plate {{Raw Tile|^|#FFF|#000}} of the same color. When the door {{Raw Tile|+|#0F0|#000}} is opened, the creature can move to the left (false) {{Raw Tile|^|#FF0|#000}}, and when the door {{Raw Tile|+|#0FF|#000}} is opened, the creature can move to the right (true) {{Raw Tile|^|#F0F|#00F}}, thus outputting to anything linked to that pressure plate. This is an example of memory for which it is possible to write a particular state, rather than just toggling, which allows for simpler design for some applications. Note also that rather than writing on a single on or off signal, it depends on an on-off cycle.
В этой схеме существо, помещенное посередине, ищет [[path|путь]] {{Raw Tile|p|#F00|#000}}, но ограничено [[hatch cover|люками]] {{Raw Tile|¢|#FF0|#000}} и {{Raw Tile|¢|#00F|#000}}, каждый из которых связан с нажимной пластиной {{Raw Tile|^|#FFF|#000}} того же цвета. Когда дверь {{Raw Tile|+|#0F0|#000}} открыта, существо может переместиться влево (ложь) {{Raw Tile|^|#FF0|#000}}, а когда дверь {{Raw Tile|^|#FF0|#000}} {{Raw Tile|+|#0FF|#000}} открыта, существо может двигаться вправо (истина) {{Raw Tile|^|#F0F|#00F}}, таким образом выводя сигнал на всё, что связано с этой нажимной пластиной. Это пример памяти, для которой можно записывать определенное состояние, а не просто переключать его, что позволяет упростить проектирование некоторых систем. Также обратите внимание, что вместо записи по одному сигналу включения или выключения, схема зависит от цикла включения-выключения.


This design has good latency for creature logic systems, resulting in on signals around 40 ticks after writes and off signals around 150 ticks after writes. It has a 110 tick refractory period, representing the time necessary for the hatch covers to close.
Эта конструкция имеет довольно хорошую задержку для схемы логики существ, в результате чего сигналы включения появляются примерно через 40 тактов после записи, а сигналы выключения — примерно через 150 тактов после записи. Рефрактерный период составляет 110 тиков, что соответствует времени, необходимому для закрытия люков.


==Mechanical Logic==
==Механическая логика==
A [[gear assembly]] can function all on its own as a memory cell, being either active or disengaged. However, some complicated applications suggest the use of hybrid mechanical-fluid memory.
[[gear assembly|Редуктор]] может функционировать сам по себе как ячейка памяти, будучи либо активным, либо отключенным. Однако некоторые сложные применения предполагают использование гибридной механико-жидкостной памяти.


{{diagram|spaces=yes|\
<diagram>
z+2
z+2
╔═[#0F0]☼╔═╗
╔═[#0F0]☼╔═╗
║ [#0F0]%[#0A0]% ║
║ [#0F0]%[#0A0]% ║
╚═╝╚═╝}}
╚═╝╚═╝</diagram>
{{diagram|spaces=yes|\
<diagram>
z+1
z+1
╔═[#FF0]☼╔═╗
╔═[#FF0]☼╔═╗
║ [#AA0]%[#FF0]%[#F0F]^║
║ [#AA0]%[#FF0]%[#F0F]^║
╚═╝╚═╝}}
╚═╝╚═╝</diagram>
{{diagram|spaces=yes|\
<diagram>
z+0
z+0
╔═╗
╔═╗
║[#00F]~║
║[#00F]~║
╚═╝}}
╚═╝</diagram>


In this design, two separately powered [[pump stack]]s, {{Raw Tile|%|#0F0|#000}}{{Raw Tile|%|#0A0|#000}} and {{Raw Tile|%|#AA0|#000}}{{Raw Tile|%|#FF0|#000}}, are placed over each other-- the lower one, pumping to the right, and the higher one pumping to the left. When the water {{Raw Tile|~|#00F|#000}} is lying in the rightmost (true) cell, it activates a pressure plate {{Raw Tile|^|#F0F|#000}}.  To write true to the memory, one triggers the lower gear assembly {{Raw Tile|☼|#FF0|#000}}, activating the lower pump, and to write false, one activates the higher gear assembly {{Raw Tile|☼|#0F0|#000}} and pump stack. Like the creature logic memory above, this cell can be written as specifically true or false, and depends on an on-off cycle as input.
В этом проекте два [[pump stack|насосных массива]] с отдельным питанием: {{Raw Tile|%|#0F0|#000}}{{Raw Tile|%|#0A0|#000}} и {{Raw Tile|% |#AA0|#000}}{{Raw Tile|%|#FF0|#000}} располагаются друг над другом: нижний перемещает вправо, а верхний перемещает влево. Когда вода {{Raw Tile|~|#00F|#000}} лежит в самой правой ячейке (истина), она активирует нажимную пластину {{Raw Tile|^|#F0F|#000}}. Чтобы записать в память значение истины, активируется нижний редуктор {{Raw Tile|☼|#FF0|#000}}, активируя нижний насос, а для записи значения "ложь" активируется верхний редуктор {{Raw Tile|☼|#0F0|#000}} и массив насосов. Как и описанная выше память на логике существ, эта ячейка может быть записана как истинная или ложная, и зависит от цикла включения-выключения в качестве входных данных.


This design has very good latency (from almost nothing for a write as true to 100 ticks for a write as false) and no real refractory period-- it can be written to immediately following a previous write, although it does depend on the completion of the previous write signal (receiving the off component of the signal) before writing again.
Эта конструкция имеет очень хорошую задержку (от почти нулевой для записи как истина до 100 тиков для записи как ложь) и не имеет реального рефрактерного периода — запись может быть выполнена сразу после предыдущей записи, хотя это зависит от завершения предыдущего сигнал записи (получение сигнала off) перед повторной записью.


===Memory versus Power-to-signal===
===Память и преобразование энергии в сигнал===
It can be tricky to differentiate memory from [[Mechanical_logic#Power_to_signal_converter|power to signal]] conversion. Through feedback, power-to-signal devices can often be changed into memory cells, and powered memory devices can be adapted into power-to-signal. Previous to the introduction of minecarts, the most common power-to-signal device bore strong resemblance to the memory cell described above. There is, however, a large difference between memory and power-to-signal. While memory designs receive on-off signal cycles and output discrete '''on''' or '''off''' signals in return, power-to-signal converters translate one type of binary information (power on/off) into another (signal on/off). That is, a signalling device that receives then loses power should return a full on-off signal cycle.
Отличить память от преобразования [[Mechanical_logic#Конвертер_энергии_в_сигнал|энергии в сигнал]] может быть сложно. Благодаря обратной связи устройства, работающие по принципу "энергия-сигнал", часто могут быть преобразованы в ячейки памяти, а устройства памяти с питанием могут быть адаптированы для преобразования "энергия-сигнал". До появления вагонеток наиболее распространенное устройство передачи энергии в сигнал очень напоминало ячейку памяти, описанную выше. Однако существует большая разница между памятью и преобразователем энергии в сигнал. В то время как конструкции памяти получают циклические сигналы включения-выключения и в ответ выдают дискретные сигналы "включения" или "выключения", преобразователи преобразуют один тип двоичной информации (включение/выключение энергии) в другой (включение/выключение сигнала). То есть сигнальное устройство, которое получает, а затем теряет питание, должно возвращать полный цикл сигнала включения-выключения.


==Minecart Logic==
==Логика вагонеток==
There are numerous ways for minecarts to hold information. Some memory designs use movement or the absence of movement; others use just the position of a minecart. Advanced designs could use the weight or direction of movement of a minecart. The following powered minecart design by Bloodbeard is the smallest memory circuit currently known to dwarvenkind:
Существует множество способов хранения информации в вагонетках. Некоторые конструкции памяти используют движение или его отсутствие; другие используют просто положение вагонетки. В продвинутых конструкциях можно использовать вес или направление движения вагонетки. Следующая конструкция вагонетки с электроприводом, разработанная пользователем Bloodbeard, представляет собой самую маленькую схему памяти, известную в настоящее время дварфийскому роду:


<diagram fg=7:0>
<diagram fg=7:0>
       Key:
       Легенда:
  O    O Wall
  O    O Стена
  [#0:0][@6:0][%254][#2:1][@][%15]    [#0:0][@6:0][%254][#@] Copper minecart
  [#0:0][@6:0][%254][#2:1][@][%15]    [#0:0][@6:0][%254][#@] Медная вагонетка
  [#0:0][@7:0][%254][#@]    [#0:0][@7:0][%254][#@] Iron minecart
  [#0:0][@7:0][%254][#@]    [#0:0][@7:0][%254][#@] Железная вагонетка
  [#7:1][@][%207][#2:0][%15][#]    [#2:1][%15][#2:0][%15][#] Gears
  [#7:1][@][%207][#2:0][%15][#]    [#2:1][%15][#2:0][%15][#] Редукторы
  O    [#7:1][%207][#] Rollers
  O    [#7:1][%207][#] Роллеры
       [#5:1]^[#] Pressure plate
       [#5:1]^[#] Нажимная плита
  O    [#7:1][%186][#] Minecart tracks
  O    [#7:1][%186][#] Вагонеточные пути
  [#7:1][%207][#2:1][@][%15]    [#7:1][%210] [%208][#] Track ends
  [#7:1][%207][#2:1][@][%15]    [#7:1][%210] [%208][#] Конец пути
  [#5:1]^
  [#5:1]^
  [#7:1][%207][#2:0][%15][#]
  [#7:1][%207][#2:0][%15][#]
Строка 115: Строка 114:
</diagram>
</diagram>


The diagram shows the minecart layer at the top, the roller/furniture layer in the middle, and finally the track layer at the bottom.
На диаграмме вверху показан слой вагонетки, посередине слой роллеров/предметов обстановки и, наконец, слой рельсов внизу.
When the northern gear assembly is activated, powering the northern roller, a heavy minecart (copper, in this example) is pushed southwards. This pushes a lighter minecart (iron here) south, and triggers a pressure plate that is built to only signal on the weight of a copper minecart, and not on the weight of the lighter iron minecart.
Когда активируется узел северного редуктора, приводящий в движение северный роллер, тяжелая вагонетка (в данном примере [[copper|медная]]) толкается на юг. Это толкает более легкую вагонетку (здесь [[iron |железную]]) на юг и запускает нажимную пластину, которая настроена так, чтобы сигнализировать только о весе медной вагонетки, а не о весе более легкой железной вагонетки.
With the activation of the southern gear assembly, the situation reverses. The iron minecart pushes on to the pressure plate, and an '''off''' signal is sent.
При включении южного редуктора ситуация обратная. Железная вагонетка прижимается к нажимной пластине, и подается сигнал "выключено".


==Memory addressing==
==Адресация памяти==
In complicated designs, one may wish to use a memory cell abstractly-- to represent any number of different values. To use multiple such abstract cells, it's necessary to specify exactly which memory cell one wishes to read from or write to at any given moment.
В сложных проектах может возникнуть желание использовать ячейку памяти абстрактно — для представления какого-то количества различных значений. Чтобы использовать несколько таких абстрактных ячеек, необходимо точно указать, из какой ячейки памяти вы хотите читать или писать в любой данный момент времени.


This is simplest in mechanical logic. A grid of gear assemblies can represent rows and columns, and by disengaging control gears for all but the cell that lies at that particular row/column intersection, one can easily refer to a specific cell. Strict fluid logic can do something similar, by controlling the input of water to memory cells, although this involves long delays. With the creature logic design, one can use additional doors to restrict writes to any cells not referenced.
Это проще всего в механической логике. Сетка редукторов может представлять строки и столбцы памяти, и, отключив механизмы управления для всех ячеек, кроме ячейки, которая находится на пересечении этой конкретной строки/столбца, можно легко обратиться к конкретной ячейке. Строгая жидкостная логика может дать нечто подобное, через контроль поступления воды в ячейки памяти, хотя это требует длительных задержек. В логике существ можно использовать дополнительные двери, чтобы ограничить запись в любые ячейки, на которые нет ссылок.


==Alternate design==
==Альтернативный дизайн==
Because most memory is used for a specific application, there is no single best design. It is not uncommon to see functionality built into memory circuits-- a simple circuit that increments contains its own memory. Alternate designs are important when memory needs to be written to in various ways (toggle versus specific value) or when latency and refractory period are unimportant compared to resource requirements such as space.
Поскольку большая часть памяти используется для конкретного приложения, не существует единственного лучшего решения. Нередко можно увидеть функциональные возможности, встроенные в схемы памяти — простой счетчик, который имеет свою собственную память. Альтернативные конструкции важны, когда запись в память необходимо производить различными способами (переключение или установка в определенное значение) или когда задержка и рефрактерный период не важны по сравнению с требованиями к ресурсам или пространству.


 
[[Категория:Вычисления]]
{{Category|Компьютеры}}
[[en:Memory_(computing)]]

Текущая версия от 19:32, 13 сентября 2023

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

Триггеры против защёлок

Наиболее базовая характеристика памяти в Dwarf Fortress заключается в том, что что она действует как разделитель сигналов: даётся серия on-off сигнальных циклов, и выходит серией переменных on или off сигналов. Память, действующая по такой, и только такой, схеме, работает как триггер: каждый раз вы воздействуете на ячейку памяти, она меняет состояние. Такая память идеально подходит для таких устройств, как счетчики. Тем не менее, обычно хочется иметь возможность непосредственно изменять состояние памяти вместо того, чтобы переключать его, т. е. писать либо истину или ложь в память самому, без знания текущего состояния памяти. Это можно описать таблицей, в которой значение памяти возвращается обратно в себя:

Вход Состояние защёлок Выход Новое состояние защёлок
0 0 ничего 0
0 1 off 0
1 0 on 1
1 1 ничего 1

Производительность

К счастью, системы памяти в игры очень хорошо сохраняют своё значения (в отсутствие каких-либо троллей), но они по-прежнему страдают от проблем с задержками и длительными рефрактерными периодами. Задержка относится к периоду времени, в течение которого будет зарегистрировано изменение значения, а рефрактерный период относится к периоду после записи в память, в течение которого невозможно надежно записать в нее второй раз. Из-за задержек, связанных с нажимными плитами, задержка и рефрактерный период для ячейки памяти часто зависят от того, в какое состояние осуществляется переход памяти. Например, механическая гибридная ячейка из примера ниже почти не имеет задержки, когда в неё записана 1, но когда в ней записан 0, задержка составляет около 100 тактов.

В некоторых схемах простоту или потребность в материалах можно получить увеличением затрат на производительность.

Жидкостная логика

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

~X^X~

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

Если X открыт, а X закрыт, вода уйдет из ^ и тайл останется пустым до тех пор, пока X не откроется снова.

Эта конструкция имеет относительно низкую скорость работы из-за задержки в 100 тиков, связанной с шлюзами. Замена шлюзов на двери, не имеющие задержки, значительно ускоряет реакцию триггера-защёлки, но общая производительность все равно ограничена периодом сброса нажимных пластин. При достаточно тщательном проектировании и достаточном давлении воды задержка при записи в значение истины может приближаться к 10, а задержка записи в значение ложь — около 110.

Логика существ

     
p¢^¢¢^¢p
     

В этой схеме существо, помещенное посередине, ищет путь p, но ограничено люками ¢ и ¢, каждый из которых связан с нажимной пластиной ^ того же цвета. Когда дверь + открыта, существо может переместиться влево (ложь) ^, а когда дверь ^ + открыта, существо может двигаться вправо (истина) ^, таким образом выводя сигнал на всё, что связано с этой нажимной пластиной. Это пример памяти, для которой можно записывать определенное состояние, а не просто переключать его, что позволяет упростить проектирование некоторых систем. Также обратите внимание, что вместо записи по одному сигналу включения или выключения, схема зависит от цикла включения-выключения.

Эта конструкция имеет довольно хорошую задержку для схемы логики существ, в результате чего сигналы включения появляются примерно через 40 тактов после записи, а сигналы выключения — примерно через 150 тактов после записи. Рефрактерный период составляет 110 тиков, что соответствует времени, необходимому для закрытия люков.

Механическая логика

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

z+2   
 %% 
z+1   
 %%^
z+0
~

В этом проекте два насосных массива с отдельным питанием: %% и % % располагаются друг над другом: нижний перемещает вправо, а верхний перемещает влево. Когда вода ~ лежит в самой правой ячейке (истина), она активирует нажимную пластину ^. Чтобы записать в память значение истины, активируется нижний редуктор , активируя нижний насос, а для записи значения "ложь" активируется верхний редуктор и массив насосов. Как и описанная выше память на логике существ, эта ячейка может быть записана как истинная или ложная, и зависит от цикла включения-выключения в качестве входных данных.

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

Память и преобразование энергии в сигнал

Отличить память от преобразования энергии в сигнал может быть сложно. Благодаря обратной связи устройства, работающие по принципу "энергия-сигнал", часто могут быть преобразованы в ячейки памяти, а устройства памяти с питанием могут быть адаптированы для преобразования "энергия-сигнал". До появления вагонеток наиболее распространенное устройство передачи энергии в сигнал очень напоминало ячейку памяти, описанную выше. Однако существует большая разница между памятью и преобразователем энергии в сигнал. В то время как конструкции памяти получают циклические сигналы включения-выключения и в ответ выдают дискретные сигналы "включения" или "выключения", преобразователи преобразуют один тип двоичной информации (включение/выключение энергии) в другой (включение/выключение сигнала). То есть сигнальное устройство, которое получает, а затем теряет питание, должно возвращать полный цикл сигнала включения-выключения.

Логика вагонеток

Существует множество способов хранения информации в вагонетках. Некоторые конструкции памяти используют движение или его отсутствие; другие используют просто положение вагонетки. В продвинутых конструкциях можно использовать вес или направление движения вагонетки. Следующая конструкция вагонетки с электроприводом, разработанная пользователем Bloodbeard, представляет собой самую маленькую схему памяти, известную в настоящее время дварфийскому роду:

       Легенда:            
 O     O Стена             
      Медная вагонетка  
       Железная вагонетка
      Редукторы        
 O      Роллеры           
       ^ Нажимная плита    
 O      Вагонеточные пути 
       Конец пути      
 ^                         
                         
 O                         
                           
 O                         
                         
                          
                         
 O                         
                           

На диаграмме вверху показан слой вагонетки, посередине слой роллеров/предметов обстановки и, наконец, слой рельсов внизу. Когда активируется узел северного редуктора, приводящий в движение северный роллер, тяжелая вагонетка (в данном примере медная) толкается на юг. Это толкает более легкую вагонетку (здесь железную) на юг и запускает нажимную пластину, которая настроена так, чтобы сигнализировать только о весе медной вагонетки, а не о весе более легкой железной вагонетки. При включении южного редуктора ситуация обратная. Железная вагонетка прижимается к нажимной пластине, и подается сигнал "выключено".

Адресация памяти

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

Это проще всего в механической логике. Сетка редукторов может представлять строки и столбцы памяти, и, отключив механизмы управления для всех ячеек, кроме ячейки, которая находится на пересечении этой конкретной строки/столбца, можно легко обратиться к конкретной ячейке. Строгая жидкостная логика может дать нечто подобное, через контроль поступления воды в ячейки памяти, хотя это требует длительных задержек. В логике существ можно использовать дополнительные двери, чтобы ограничить запись в любые ячейки, на которые нет ссылок.

Альтернативный дизайн

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