Как я делал свой мини калькулятор без программирования и что из этого вышло

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Цифровая схема сумматора
Цифровая схема сумматора

​Настали времена, когда у меня появилась возможность осваивать электронику. Я начал с книги "Искусство схемотехники", но прочитав страниц 100, я понял, что усваиваю не всё и потихоньку пропадает интерес. Нужно было что-то делать, нужно было выработать какой-то способ, чтобы я всё равно обучался электронике.

Пока были сложности с построениями аналоговых схем, а хотелось что-то создать или запрограммировать, то я выбрал разработку для NES (у нас в народе была Денди). Так как я в linux разрабатываю софт, то не нашел нормального редактора картинок для NES. Даже в туториале, в котором имелась ссылка на программу, была неактивна. Мне нравится, что на хабре выходят переводы статей, но сами авторы допускают ошибки в коде и это отражается также и в переводе. Я долго не мог понять почему не рисуется спрайт, пока не изучил официальную документацию. Для рисования спрайтов мне захотелось написать свою программу, так как другие были ну очень непонятные. Кому интересно, буду рад, если будете пользоваться этой программой.

https://github.com/xverizex/RetroSpriteEditor

Это немного меня отодвинуло назад в плане изучения электроники, но очень понравилось писать на ассемблере, что в принципе я всегда и хотел.

Иногда я смотрю, что есть нового на flathub, и обнаружил симулятор цифровой электроники, Logisim. Ещё не изучив полностью компоненты, я быстро сориентировался с logic gates. Это такие элементы как OR, AND, XOR. Почти все из этих понятий мне были знакомы уже давно. Тогда я решил написать свой сумматор. Может я не правильно пишу, так что можно просто калькулятор, который умеет только прибавлять. Я потратил два дня по два часа и у меня ничего не вышло. У меня не получалось создать правильный калькулятор. По мере накопления такого опыта, я решил подумать как можно вообще выстроить процесс поиска правильного решения. И вот что я придумал.

Для начала, я нашел на flathub ещё одну версию этой программы, называется "Logisim-evolution". В ней есть приятное удобство, что можно двигать холст и схема может быть больше, чем сам холст.

Итак, вот как выглядит в начале схема.

начало
начало

Первым делом, нужно подключить пины в той последовательности, чтобы двоичный код соответствовал шестнадцатеричному.

В схеме я буду использовать только XOR и AND.

Давайте подключим XOR к первым битам чисел.

подключение первого элемента
подключение первого элемента

Отсюда видно, что если два бита поданы к XOR, то он выводит логический ноль. Если указать только один бит, то он выведет один бит как и положено. Чтобы сложение 1 + 1 сработало, здесь мы подключаем наш AND как раз к этим дорожкам, к двум. И только в том случае, если они оба в единице, то вывести во второй бит результирующего числа.

подключение AND и число 2
подключение AND и число 2

Так мы должны сделать для каждого бита параллельно другому биту. То есть число один, это бит %0001 мы уже сделали. Для второго будет также и для четвертого и для восьмого. Но прежде чем нам добавлять для второго такую же логику, нам нужно поставить после AND ещё один XOR и будет наглядней просто посмотреть на рисунок, а дальше объяснить.

число 2
число 2
число 3
число 3

На деле оказывается не так то и сложно правда? А мне, чтобы до этого дойти, пришлось несколько дней потратить, но дело того стоило.

Дальше мне очень сложно объяснять большую схему, но могу сказать, что дальнейшее размещение элементов производится в таком же порядке. То есть делаем XOR для двух бит и AND, если они оба в единице. Там также нужно будет делать два логических элемента с тремя выводами, потому, что сложение 0101 и к примеру 0010 может не правильный результат давать.

Как я искал решение, чтобы продолжить схему и доделать её?

К сожалению у меня не осталось картинок, но попробую объяснить. На рисунке выше видно, что сверху число три, а снизу число ноль. Так как сложение работало неправильно в некоторых случаях, например 6 + 2, шесть вверху, два внизу, то я делал скриншот, переворачивал и делал ещё один скриншот с 2 + 6. размещал их на двух мониторах и смотрел какие у них различия. На схеме сразу было видно, какие дорожки остаются неизменными, а какие меняются. Вот те, которые остаются неизменные и нужно подключать к AND. Таким образом у меня получилось создать вот такую схему.

результат
результат

Здесь даже переполнение работает, и если вывести большие числа, то вот какой будет ответ.

Результат переполнения
Результат переполнения

Мне очень нравиться электроника и я хочу научиться творить что-то интеллектуальное и материальное. После того как мне удалось создать полубайтный калькулятор, то хочется двигаться дальше и создать для 8-ми битной арифметики.

Спасибо за ваше внимание!

Источник: https://habr.com/ru/articles/779532/


Интересные статьи

Интересные статьи

Все мы не любим писать много однообразного кода и хотим писать больше интересного кода) Давайте рассмотрим очень удобный инструмент для работы с API - RTK Query.
Поиск неочевидных ошибок в коде зачастую попросту выводит из себя, и это нормально. Чтобы позаботиться об эмоциональном здоровье не только своём, но и коллег, мы нашли решение для сохранения нервных к...
Привет, Хабр! В предыдущем опыте мы выяснили, что дерево почти не влияет на звук... не то что электрогитары, но даже самого дерева, если сигнал пьезозвукоснимателя обрабатывается моделью усилителя P...
Привет, Хабр! Год подходит к концу, и мы в JetBrains выпускаем традиционный «паровоз» релизов для наших десктопных инструментов. Про некоторые из них (WebStorm, DataGrip) мы уже писали...
Около года назад я переквалифицировался из .NET-разработчика в SRE. В этой статье делюсь историей о том, как группа опытных разработчиков отложила в сторону C# и пошла изучать Linux, ...