Настали времена, когда у меня появилась возможность осваивать электронику. Я начал с книги "Искусство схемотехники", но прочитав страниц 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 как раз к этим дорожкам, к двум. И только в том случае, если они оба в единице, то вывести во второй бит результирующего числа.
Так мы должны сделать для каждого бита параллельно другому биту. То есть число один, это бит %0001 мы уже сделали. Для второго будет также и для четвертого и для восьмого. Но прежде чем нам добавлять для второго такую же логику, нам нужно поставить после AND ещё один XOR и будет наглядней просто посмотреть на рисунок, а дальше объяснить.
На деле оказывается не так то и сложно правда? А мне, чтобы до этого дойти, пришлось несколько дней потратить, но дело того стоило.
Дальше мне очень сложно объяснять большую схему, но могу сказать, что дальнейшее размещение элементов производится в таком же порядке. То есть делаем XOR для двух бит и AND, если они оба в единице. Там также нужно будет делать два логических элемента с тремя выводами, потому, что сложение 0101 и к примеру 0010 может не правильный результат давать.
Как я искал решение, чтобы продолжить схему и доделать её?
К сожалению у меня не осталось картинок, но попробую объяснить. На рисунке выше видно, что сверху число три, а снизу число ноль. Так как сложение работало неправильно в некоторых случаях, например 6 + 2, шесть вверху, два внизу, то я делал скриншот, переворачивал и делал ещё один скриншот с 2 + 6. размещал их на двух мониторах и смотрел какие у них различия. На схеме сразу было видно, какие дорожки остаются неизменными, а какие меняются. Вот те, которые остаются неизменные и нужно подключать к AND. Таким образом у меня получилось создать вот такую схему.
Здесь даже переполнение работает, и если вывести большие числа, то вот какой будет ответ.
Мне очень нравиться электроника и я хочу научиться творить что-то интеллектуальное и материальное. После того как мне удалось создать полубайтный калькулятор, то хочется двигаться дальше и создать для 8-ми битной арифметики.
Спасибо за ваше внимание!
Комментарии (6)
Kotofay
09.12.2023 17:47Вам понравится. http://www.buthowdoitknow.com/but_how_do_it_know_cpu_model.html
JoshMil
09.12.2023 17:47Я тоже отношусь к категории людей подступающих к некоторым задачам не проторенными путями. Своеобразный маргинал. И это относится не только к работе или it.
Это сложный путь, именнно психологически, так как в его рамках часто поначалу приходится довольствоваться только удовлетворённым любопытством. Но в нем есть и свои плюсы. Особенно здорово что есть желание и навык писать про это. Будет, как мне кажется, большой эффект сродни "желтой уточке". То есть в процессе будешь не столько разбираться лучше в какой то из тем а больше знать о том как она соотносится лично с тобой, и как это можно улучшить.
Я похожим образом открыл для себя принципиальную важность истории математики для того чтобы подступиться к матану на принципиально более продвинутом уровне мотивации. И не только.
xztau
09.12.2023 17:47Вы залезли в логику. Это ближе к FPGA. Это сюда, скорее всего.
По электронике, наверно, лучше втереться в сообщество какое‑нибудь. Прям с истоков и интересно.
Моделировать электронные схемы
voidptr0
Тег: Производство и разработка электроники:
Что произведено и разработано? Я Logsim и сам потыкать умею.
xverizex Автор
Я хотел найти название хоть что-то связанное с электроникой и только это совпадение было. Нет чистой темы электроники. Только разработка.
Не сомневаюсь. Хорошо, что написали об этом.
iliasam
Как нет?
Электроника для начинающих - https://habr.com/ru/hubs/easyelectronics/articles/