Оглавление


§ Про Логисим

Эта программа весьма удачно придумана для того, чтобы делать на ней различные интересные вещи, симулировать практически любые цифровые устройства и обучаться цифровому инженерному мастерству. Так много красивых слов написал, а теперь пора и своими словами рассказать. Логисим — довольная простая программа для достаточно большого круга задач, которые касаются симулятора цифровых схем. Да, она упрощенная, да, она иногда глючит, у нее нет такого понятия как "скорость распространения сигналов", но зато с помощью логисима можно набросать пару Hello World или весьма сложных процессоров и остаться довольным.
Самое главное, что не только самые базовые электронные логические цепи вроде транзистора или резистора-подтяжки, но целые модули ввода-вывода, умножения, даже деления, а также клавиатура и терминал. Всё есть, только осталось творить процессоры и электронные устройства.

§ Секция Проводка

clipboard.png
Теперь более подробно опишу то, что делает каждый из них.
  • Разветвитель разъединяет или, наоборот, объединяет провода в группы проводов. С его помощью можно собрать провода в пучок или разобрать из пучка по одному проводку или по разным пучкам. Весьма универсальная вещь, которая легко позволяет смешивать любые пучки проводов.
  • Контакт — это входящий сигнал, который может принимать разные значения, 0, 1 или "не присоединен", но чтобы была такая возможность, необходимо пройти в свойства и выбрать "Три состояния: да". И как можно заметить, свойств у контакта довольно много. Его можно назначить как входом (по умолчанию так), так и выходом, а также выбрать направление метки и его шрифт.
clipboard.png
  • Датчик — аналог "щупа", с помощью которого можно визуально проверять провода, не выбирая их каждый раз. Это электронное табло, которое высвечивает состояние какого-то провода или пучка из проводов
  • Тоннель — весьма полезная вещь для того чтобы не "тащить" сквозь всю схему большое количество проводов. Он работает как, так сказать, подземный туннель, скрывая лишние провода на схеме. Чтобы было понятно, какой тоннель используется, надо обязательно входной и выходной тоннель назвать одной меткой. На иллюстрации видно, как это правильно сделать.
clipboard.png
  • Согласующий резистор — в схемах, где используются транзисторы, не принадлежащих КМОП-логике, можно использовать согласующие транзисторы, которые занимаются тем, что "подтягивают" провод, который остался не подключенным ни к чему, к какому-то определенному логическому уровню (0 или 1). Это можно использовать не только для транзисторной, но и для диодной логики, создавая матрицы ПЗУ, например.
  • Тактовый генератор — сердце любого процессора. Аналогия с сердцем тут даже не случайна. Тактовый генератор "бьется" с определенной частотой, выполняя определенное количество колебаний в секунду, например, 25 миллионов тактов в секунду, допустим. В логисиме такая скорость недостижима, тут частота берется поскромнее, например, 1 Гц, 1 кГц или 4.1 кГц от силы. Для простых схем и процессоров этого вполне достаточно.
  • Константа — это некоторое заранее заданное число, причем число может быть задано как 1-битное, так и 32-х битное и любое количество бит от 1 до 32. Просто некоторое заданное число.
  • Питание и Земля — это фактически тоже самое что и константа, но заданное только 1 битом (либо 0 — земля, либо 1 — питание)
  • Транзистор — ясное дело, это транзистор, электронная кнопка, которая включается и выключается в зависимости от того, какой сигнал пришел на базу. Транзисторы здесь бывают двух типов, n-тип, это когда транзистор открывается, есть на базе подано 1, и p-тип, когда все наоборот, открывается если на базе подан 0. О транзисторах вообще поговорим в другой главе подробнее.
  • Передаточный вентиль — весьма странная вещь, применение которой я до сих пор не придумал. Суть его в том, что это тоже самое, что и транзистор, но открывается и закрывается он двумя проводами на базе. Пример открытия и закрытия вентиля приведен ниже. Если же подать на обе базы либо по нулям, либо по единицам, то будет ошибка.
clipboard.png или clipboard.png
  • Расширитель битов — полезная вещь при разработке процессоров, когда нужно например, из 8 битов сделать 16 бит, с различными вариациями расширения старших бит. Например, можно настроить компонент так, чтобы при расширении до 16 бит из 8 старшие биты становились либо все 0, либо 1, либо значение берется извне, либо в зависимости от старшего бита из 8-битного числа (знаковое расширение).

§ Секция Элементы

clipboard.png
Здесь располагаются как базовые логические элементы, так и более продвинутые.
  • Элемент "Не — отрицает вход, на выходе 0, а на выходе 1, и наоборот, на входе 1, на выходе 0
  • Буфер — аналог диода. Пропускает сигнал только в одну сторону. Внизу на рисунке изображено, как это происходит. Если подать сигнал на вход, то он его скопирует на выходе. Если подать сигнал на выход, то на входе ничего не будет скопировано.
clipboard.png
  • Элемент И — на вход присылаются от 2х до 32х битов, на выходе 1 бит, который равен единице тогда и только тогда, когда все биты на входах равны единице.
  • Элемент ИЛИ — тоже самое, только единица на выходе будет в том случае, если хотя бы один из входов тоже равен единице
  • Элемент И-НЕ — это два элемента, объединенных вместе, "И" и на выходе "НЕ", что дает результат 0 тогда и только тогда, когда на входах все единицы. В противном случае, на выходе будет 1.
  • Элемент ИЛИ-НЕ — совмещенные "ИЛИ" и "НЕ", на выходе будет 1 только в случае, если на входах только нули, иначе на выходе будет 0, если есть хоть одна единица на входах.
  • Элемент Исключающее ИЛИ — один из самых наиважнейших компонентов любой вычислительной системы. Однобитная реализация сложения. На выходе будет 1 в том случае, если на входах нечетное количество единиц. Например, если на входе два нуля или две единицы, то это считается четным количеством, а значит, на выходе будет 0. Если на входе четное количество единиц, например на входе А=0, B=1 или A=1 и B=0, то выдается на выход 1. Об этом компоненте будет разговор идти в следующей главе, посвященной сумматору.
  • Элемент Исключающее ИЛИ — тоже, что и исключающее или, только ответ инвертируется, становится противоположным. С логической точки зрения, выдается на выходе 1 только тогда, когда количество бит, наоборот, чётное. Но практической ценности этот элемент не имеет.
  • Нечетность или Четность — работают аналогично тому, как если бы подключили XOR (исключающее или). На рисунке ниже показан пример, использующий в качестве входного значения 5-битовый переключатель, разветвитель, и сам элемент нечетности. На выходе элемента "нечетность" будет 1, если количество единиц на входе нечетное (1,3,5 и т.д.). В случае "четности", будет 1 на выходе если количество бит на входе является, соответственно, четным (0,2,4 и т.д.).
clipboard.png
  • Управляемый буфер — этот элемент позволяет "отключать" сигнал, отсоединять его от провода. Его можно заменить транзистором, потому что это и есть транзистор (n-типа), но элемент "буфер" гораздо меньше визуально занимает на схеме места, позволяя делать схемы более компактными. Удобен для реализации работы с шинами, когда несколько устройств надо подключать к общей шине, не используя мультиплексор. В ПЛИС такие вещи делать нельзя, не реализована возможность логикой управлять буферами, потому в ПЛИС вместо управляемого буфера используется именно мультиплексор.
clipboard.png или clipboard.png
  • Управляемый инвертор работает точно также, как и управляемый буфер, но на выходе у него находится элемент NOT (НЕ), однако, в случае если провод отключен, на выходе находится 3-е состояние (провод "висит" без подачи на него тока).

§ Секция Плексоры

clipboard.png
Различные варианты мультиплексоров и демультиплексоров.
  • Мультиплексор — базовый компонент всех ПЛИС, поскольку фактически все они состоят из этого элемента. Мультиплексор — это условный выбор. В зависимости от условия будет выбран один из входящих проводов (или пучка проводов) и передан на выход. Простейший мультиплексор состоит из двух элементов входа, одного элемента выбора и одного вывода. Если селектор равен 0, то выбирается то значение, которое пришло со входа номер 0, а если селектор равен 1, то выбирается значение со входа номер 1. Мультиплексоры могут иметь выбор 1,2,3 и т.д. битов. Если 1 бит, то выбираются либо первый вход, либо второй вход. Если 2 бита, то выбираются уже 4 входа, если 3 бита — то 8. Количество входов равно 2^(разрядность селектора).
  • Демультиплексор работает в обратную сторону, наоборот, он принимает на вход только 1 бит (или пучок проводов) и в зависимости от того, какое значение находится на селекторе, выводит это значение в выходы. Все остальные выходы, кроме выбранного, становятся равными 0.
  • Декодер является вариантом демультиплексора, с тем отличием, что на вход всегда подается 1. Это значит, что на одном из выходов всегда будет 1. Номер выхода задается селектором.
  • Шифратор приоритетов может использоваться не так часто, но иногда он необходим. Этот компонент вычисляет первый значимый бит и говорит его номер. Например, если у нас есть 4 входа и на входе 3 будет 0, а на втором будет 1, то на выходе шифратора приоритетов будет число 2 — номер самого старшего значимого бита. Очень полезно бывает при вычислениях сдвигов, особенно при работе с числами с плавающей точкой (или запятой).
clipboard.png
  • Селектор битов выступает в качестве еще одного метода задания мультиплексора. Если обычно мультиплексор задается в виде нескольких входов, то в данном случае на входе подается пучок, состоящий из 1, 2, 4, 8, 16, 32 битов с селектором на 1,2,3,4 или 5 бит. Данный селектор может работать не только с выводом в 1 бит, но и выводом группы по 2,4,8 или даже 16 бит, образуя простой вариант выбора группы битов из входящего пучка проводов в выходящий пучок или провод.
clipboard.png или clipboard.png

§ Секция Арифметика

clipboard.png
  • Сумматор — для любой вычислительной техники это самый главный компонент, с помощью которого можно построить все остальные, включая вычитатель, множитель и даже делитель. Конечно, об этом речь пойдет в следующих главах. На вход принимается 3 провода — слагаемое А, слагаемое Б, перенос (это слагаемое С). Разрядность можно указывать как от одного бита, так и до 32 бита.
  • Вычитатель — это тот же сумматор, но со знаком минус. Просто вычитает из А число Б и выдает ответ. При наличии заема старшего бита (это когда А меньше чем Б), выдает "перенос", равным 1.
  • Множитель — по идее, процедура умножения является серией сложений и битовых AND. Работает точно так же, как и все остальное, считает столбиком.
  • Делитель — деление двух чисел, на вход подается делимое, делитель, получая целочисленный результат и остаток от деления. Делит только целочисленные беззнаковые.
  • Отрицатель — на самом деле, это просто вычитатель, где вычитаемое (первый операнд) равен 0, что дает 0-A=-A
  • Компаратор — сравнение числа (как знакового, так и беззнакового), выдает 3 ответа — если число меньше, то ставит на ответ "меньше" значение 1, если "равно", то единица уходит туда, если же больше, то единица выдается на выход "больше".
  • Сдвигатель — довольно хорошая реализация всех возможных вариантов сдвига. Подойдет для совершенно любых целей, связанных со сдвигом входящего пучка проводов на необходимое количество бит.
  • Сумматор битов — просто считает количество битов (можно задать, каких) из входящего пучка проводов и выдает результат на выход.
  • Искатель битов — расширенная версия шифратора приоритетов. Если в шифраторе приоритетов искался самый старший значимый бит (единица), то здесь можно настроить какой именно бит (0 или 1) искать и с какой именно стороны — со стороны младших битов или старших.

§ Секция Память

clipboard.png
Если бы не было бы памяти, то и компьютеров бы не существовало. Необходимый элемент при разработке любого цифрового устройства. Эта тема достойна даже целой серии статей, но в данном случае опишу кратко назначение каждого компонента.
  • D-триггер — однобитный запоминатель входящего сигнала, причем он может запоминать различными методами (восходящий/нисходящий фронт, высокий/низкий уровень). При подаче на вход CLK в зависимости от того, какой был вход D, будет запомнено значение по одному из методов. Также этот триггер можно асинхронно сбрасывать или устанавливать, а также разрешить или не разрешать запоминание по тактовому сигналу.
  • T-триггер — при подаче CLK триггер меняет свое значение на противоположное значение (происходит счет), но только в случае, если счетчик разрешен, то есть на вход T подана логическая единица (1)
  • JK-триггер — разновидность SR-триггера. При подаче J=1 и K=0 и сигнала CLK, на выходе появляется Q=1, при J=0, K=1 на выходе Q появляется 0, а если J=1, K=1, то на выходе значение инвертируется, становится противоположным. Совмещение T-триггера и SR-триггера.
  • SR-триггер — суть такого триггера в том, что происходит запоминание аналогично JK-триггеру, но исключая случай J=1,K=1. В этой ситуации будет ошибка неопределенности.
  • Регистр — массив D-триггеров, объединенных вместе
  • Счетчик — массив T-триггеров, увеличивает на +1 или -1 в зависимости от выбранного режима работы компонента
  • Сдвиговый регистр — регистры, объединенные в цепь один за другим, слева подается значение, справа выдается последнее значение из цепи. Сдвиг может происходить в две стороны. Предназначен для того чтобы формировать числа по одному биту.
  • Генератор случайных чисел — просто регистр, который выдает каждый раз случайное число при подаче на него такта.
  • ОЗУ — оперативная память, имеет вход адреса и вход-выход для данных. Можно настроить чтобы был вход и для данных.
  • ПЗУ — постоянная память, имеет вход адреса и выход данных

§ Секция Ввод-Вывод

clipboard.png
Здесь реализованы компоненты, которые позволяют общаться с "внешним миром" через интерфейс окна логисима.
  • Кнопка — обычная кнопка, при нажатии на выходе появляется значение 1. Эта кнопка не является переключателем, что означает, что активируется единица на выходе только если нажать на нее мышкой, и если мышь отпустить, то кнопка тоже отожмётся.
  • Джойстик — интересное устройство ввода, с помощью мыши можно контролировать его положение по осям (X,Y). На выходе два пучка проводов по 4 бита каждый. Самое левое положение джойстика по X будет равно 1, самое верхнее по Y будет тоже равно 1. Правое и нижнее положение по осям дадут значение 15 (или 1111 в двоичной системе).
  • Клавиатура — симулятор буфера клавиатуры. С помощью этого компонента можно вводить ASCII символы и забирать на тактовом сигнале по одному символу из буфера. На вход подается тактовый сигнал, на выход 7 битное значение ASCII, а также бит, который определяет, пуст ли буфер клавиатуры.
  • Светодиод — просто светодиод, можно настраивать его цвет. Активируется, если на входе 1 (либо 0, это можно настроить).
  • 7-сегментный индикатор — симулятор 7-сегмента, всего 8 входов — на каждый сегмент по одному биту, всего битов 7, и еще один на точку. Также, цвет сегментов можно настраивать (активных, неактивных) и даже задать цвет фона самого сегмента.
clipboard.png
  • Шестнадцатеричный индикатор — аналог семисегмента, но на вход подается только 4 бита вместо 7, и рисуется одна из цифр 16-разрядного числа от 0 до F. Удобно для вывода различного рода двоичной информации.
  • Светодиодная матрица — это просто светодиоды, объединенные в матрицу N x M. На каждый столбец матрицы выдается пучок проводов, по количеству битов равный количеству светодиодов в строке.
  • Терминал — еще один способ простого вывода информации на экран, при помощи терминала можно отсылать символ за символом, и он будет работать так же как и обычный терминал в любой операционной системе, выводить символы слева направо, сверху вниз, и даже переводить строку на специальных кодах.
clipboard.png
Простейшая реализация ввода с клавиатуры на терминал. Слева подключен тактовый генератор и если запустить такты, то вполне можно получить элементарное устройство ввода-вывода.