![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
...или "не поймите меня правильно".
Раньше я частенько забавлялся подобными логически безупречными фразами, которые при ближайшем рассмотрении вызывают небольшой когнитивный диссонанс (требуются ли пояснения, почему? ;)).
Но вот сегодня я осознал всю глубину своего невежества.
И ведь дело-то в чём?! В простейшем электронном устройстве - элементарном RS-триггере!

Не знакомым с логикой и электроникой будет трудно оценить (или переоценить... или недооценить). Но я всё равно напишу, потому как познавательно. И потому как вспоминаю, что всё-таки программист, и было бы совсем не худо дискуссионные вопросы и мысли в блоге излагать, а не только на специализированных форумах.
В общем, спросили меня про вот эту формулу в википедийной статье про триггер:
К стыду своему, знак в виде лежащей на боку галочки (венъюнкция) я увидел впервые.
В общем, навскидку понятно, что тут в формальную математическую запись упихали состояние памяти. Ну там ссылка есть, где написано, что за зверь такой - секвенциальная логика.
Здесь уместно небольшое "философское" отступление.
Математика - это специальный язык (для формализации), одно из свойств которого - упрощение записи, свёртка обычного текста, описывающего явление или процесс.
Ну вот есть у нас файл большой и здоровый, и мы сжимаем его архиватором, чтобы уменьшить размер, сэкономить трафик и всё такое. И здесь у нас есть описание поведения триггера на обычном человеческом языке, которое проходит ряд последовательных трансформаций (переводов на формальные математические языки), в результате чего запись становится всё более короткой и всё менее понятной ;)
Начинаем, как водится, с неформального словесного описания: выходной сигнал триггера Q устанавливается в 1 импульсом по входу S (Set) и сбрасывается импульсом по входу R (Reset), сохраняя состояние при отсутствии обоих входных сигналов.
Попытка формализовать описание начинается с перечисления всех возможных случаев. Получается таблица состояний:
Разумеется, таблица обычно компактнее словесного описания, но, главное, она не даст возможности забыть и упустить из виду какой-либо вариант! Чем и ценна.
Ну, рассмотренный случай проще некуда, а для реальных логических схем таблица разрастётся до невозможности, поэтому напрямую используется редко.
Проведём следующий сеанс упаковки математическим формализмом (алгебра логики).
Но обычная (комбинационная) логика не допускает таких понятий, как "не определено"!
Что делать? Договориться, чему должен быть равен результат при единице на обоих входах.
Проще всего его обнулить. Тогда получим систему:
1) Q = 0, R=1
2) Q = Q | S, R=0
То есть вход сброса получает приоритет, и плевать на другой сигнал вообще, как и на прежнее значение выхода.
Собственно, так я всегда и делал в своих системах имитационного моделирования. Просто потому, что один раз принял такое, довольно логичное, решение - и сегодня напрочь забыл о том, что чисто с математической стороны (как и со стороны электроники) неопределённость разрешается по-другому...
Ну а дальше по цепочке - произведём ещё одно сжатие записи, применив операцию венъюнкции, которую, вероятно, изучают математики, но далеко не все инженеры:
Таким образом, всё выглядит точь-в-точь как в приведённой аналогии с размером файла: более высокая степень сжатия требует усложнённого способа упаковки и, соответственно, увеличения накладных расходов на работу архиватора! ;)
Всё бы хорошо, но вернёмся к невежеству.
Честно признаюсь, мне эта запись в принципе не нравится. Потому что хоть она и компактна, я её нифига не понимаю. Да, я прочитал Википедию и справочник. И этого не хватило. И да, мне лениво искать и читать учебник. Потому я вижу, что где-то здесь ошибка. Но серьёзные люди считают, что всё в порядке. И я оставляю своё непонимание до лучших времён, которые вряд ли когда настанут.
«Муки совести переносимы» – вот одно из маленьких неприятных открытий, которые делаешь с возрастом. (Стругацкие, "Волны гасят ветер")...
Раньше я частенько забавлялся подобными логически безупречными фразами, которые при ближайшем рассмотрении вызывают небольшой когнитивный диссонанс (требуются ли пояснения, почему? ;)).
Но вот сегодня я осознал всю глубину своего невежества.
И ведь дело-то в чём?! В простейшем электронном устройстве - элементарном RS-триггере!

Не знакомым с логикой и электроникой будет трудно оценить (или переоценить... или недооценить). Но я всё равно напишу, потому как познавательно. И потому как вспоминаю, что всё-таки программист, и было бы совсем не худо дискуссионные вопросы и мысли в блоге излагать, а не только на специализированных форумах.
В общем, спросили меня про вот эту формулу в википедийной статье про триггер:
К стыду своему, знак в виде лежащей на боку галочки (венъюнкция) я увидел впервые.
В общем, навскидку понятно, что тут в формальную математическую запись упихали состояние памяти. Ну там ссылка есть, где написано, что за зверь такой - секвенциальная логика.
Здесь уместно небольшое "философское" отступление.
Математика - это специальный язык (для формализации), одно из свойств которого - упрощение записи, свёртка обычного текста, описывающего явление или процесс.
Ну вот есть у нас файл большой и здоровый, и мы сжимаем его архиватором, чтобы уменьшить размер, сэкономить трафик и всё такое. И здесь у нас есть описание поведения триггера на обычном человеческом языке, которое проходит ряд последовательных трансформаций (переводов на формальные математические языки), в результате чего запись становится всё более короткой и всё менее понятной ;)
Начинаем, как водится, с неформального словесного описания: выходной сигнал триггера Q устанавливается в 1 импульсом по входу S (Set) и сбрасывается импульсом по входу R (Reset), сохраняя состояние при отсутствии обоих входных сигналов.
Попытка формализовать описание начинается с перечисления всех возможных случаев. Получается таблица состояний:
S | R | Q |
0 | 0 | Qn-1 (сохраняет состояние) |
0 | 1 | 0 (сброс) |
1 | 0 | 1 (установка) |
1 | 1 | ? (неопределённое состояние) |
Разумеется, таблица обычно компактнее словесного описания, но, главное, она не даст возможности забыть и упустить из виду какой-либо вариант! Чем и ценна.
Ну, рассмотренный случай проще некуда, а для реальных логических схем таблица разрастётся до невозможности, поэтому напрямую используется редко.
Проведём следующий сеанс упаковки математическим формализмом (алгебра логики).
Но обычная (комбинационная) логика не допускает таких понятий, как "не определено"!
Что делать? Договориться, чему должен быть равен результат при единице на обоих входах.
Проще всего его обнулить. Тогда получим систему:
1) Q = 0, R=1
2) Q = Q | S, R=0
То есть вход сброса получает приоритет, и плевать на другой сигнал вообще, как и на прежнее значение выхода.
Собственно, так я всегда и делал в своих системах имитационного моделирования. Просто потому, что один раз принял такое, довольно логичное, решение - и сегодня напрочь забыл о том, что чисто с математической стороны (как и со стороны электроники) неопределённость разрешается по-другому...
Ну а дальше по цепочке - произведём ещё одно сжатие записи, применив операцию венъюнкции, которую, вероятно, изучают математики, но далеко не все инженеры:
Таким образом, всё выглядит точь-в-точь как в приведённой аналогии с размером файла: более высокая степень сжатия требует усложнённого способа упаковки и, соответственно, увеличения накладных расходов на работу архиватора! ;)
Всё бы хорошо, но вернёмся к невежеству.
Честно признаюсь, мне эта запись в принципе не нравится. Потому что хоть она и компактна, я её нифига не понимаю. Да, я прочитал Википедию и справочник. И этого не хватило. И да, мне лениво искать и читать учебник. Потому я вижу, что где-то здесь ошибка. Но серьёзные люди считают, что всё в порядке. И я оставляю своё непонимание до лучших времён, которые вряд ли когда настанут.
«Муки совести переносимы» – вот одно из маленьких неприятных открытий, которые делаешь с возрастом. (Стругацкие, "Волны гасят ветер")...