Модель архитектуры контроллера

Описание демо-примера

Расположение

SimInTech\Demo\Автоматика и математика\Логические\Модель архитектуры контроллера\Модель архитектуры контроллера.prt

Описание

Данный проект демонстрирует возможности проектирования вычислительных машин с помощью логических элементов.

Описание модели

Блок "Субмодель" с подписью "Scoreb3" реализует счетчик для прохода по строкам программы (так как система 3 битная ⇒ максимальное число строк 8 (23)).

За реализацию доступа к строкам программы отвечает блок "Субмодель" с подписью "Program". На входные порты блока "b1", "b2" и "b3" подаются номера строк программы (подробнее в пункте "Описание программы"), записанные в виде двоичного числа, где каждый бит передается отдельно в свой порт соответственно. Выходные порты блока "command", "arg1", "arg2" и "arg3" позволяют получить номер команды и 3 аргумента к ним соответственно (все выходные данные представлены виде вектора длиной в 3 элемента, символизирующего двоичное число).

Блок "Субмодель" с подписью "RAM" отвечает за массив D-триггеров. Логика работы ничем не отличается от D-триггера (все порты соответствуют друг другу), за исключением возможности выбрать определенный триггер из массива. Выбор триггера происходит благодаря указанию его двоичного адреса в порты: "b1", "b2" и "b3". Всего блок предоставляет возможность работы с 8 триггерами (23, где 3 - число портов для указания адреса).

Блок "Субмодель" с подписью "Goto" (блок голубого цвета) реализует функционал остановки исполнения команд. Логика работы субмодели сводится к получению номера настоящей строки исполнения (побитовая двоичная запись в порты: "b1", "b2" и "b3") и сравнению ее с заданной строкой восстановления исполнения команд: для того, чтобы приостановить исполнение команд, необходимо передать номер строки восстановления - побитно (двоичная запись) в порты: "b1_D", "b2_D" и "b3_D", и сигнал записи (порт "S"). Выход "out" обычно имеет значение высокого уровня, за исключением момента остановки исполнения команд (порт "S" принял высокий уровень). Значение порта "out" вновь примет высокий уровень после того, как значения портов "b1", "b2" и "b3" будут соответственно равны с раннее заданными значениями в порты: "b1_D", "b2_D" и "b3_D".

Блоки "Субмодель" с подписями: "SET", "NOT", "AND", "OR", "XOR", "GOTO", "IF" и "GET" отвечают за реализацию исполнения команд.

Блоки имеют общую систему имен портов:
  • Входные порты:
    • "go" – сигнал исполнения данной команды;
    • "data<1-3>" – значения передаваемые из "RAM" (об его формировании - ниже);
    • "arg<1-3>" – значения передаваемые из "Program" (чистые, без изменений).
  • Выходные порты:
    • "RAM_b<1...3>" – номер ячейки записи выходного значения в "RAM";
    • "data" – выходное значение для записи в "RAM";
    • "C" – сигнал синхронизации с записью в "RAM".
Блоки реализуют следующие команды:
  • SET – устанавливает передаваемое значение ("arg2") по переданному адресу ("arg1") ячейки "RAM". Передаваемое значение преобразовывается из троичной записи в булево путем сравнения: arg2 > 0002.
  • NOT – выполняет логическую операцию NOT (НЕ) с заданным значением ("data1") и записывает его по переданному адресу ("arg2") ячейки "RAM".
  • AND, OR и XOR – выполняют логические операции, соответствующие их названиям. Аргументами являются входные значения в "data1" и "data2", результат записывается по переданному адресу ("arg3") ячейки "RAM".
  • GOTO – реализует функционал работы с блоком "Субмодель" с подписью "Goto". На вход принимает номер строки восстановления исполнения команд ( "arg1"), а на выход выдает побитно раскрытое значение "arg1", соответственно представленное в портах: "GOTO_b1", "GOTO_b2" и "GOTO_b3" (у блока с подписью "Goto" это порты: "b1_D", "b2_D" и "b3_D"). Выход "S" отвечает за синхронизацию с блоком с подписью "Goto" (одноименный вход).
  • IF – является переменным GOTO, то есть в зависимости от уровня входного сигнала "data1" происходит взаимодействие с блоком с подписью "Goto", где в случае высокого уровня сигнала на порты: "b1_D", "b2_D" и "b3_D" побитно передаются входные данные порта "arg1" (в противном случае – "arg3").
  • GET - позволяет дублировать входной сигнал портов в "RAM".

Блок "Субмодель" с подписью "Buffer" позволяет считать значения с "RAM" по адресам передаваемых в аргументах команды.

Описание программы

Программа записана в файле "code.txt", который расположен в папке "data" в одной директории с проектом.

При написании программы необходимо учитывать следующие правила. Всего возможно написать 8 строк. Каждая строка представлена виде четырех цифр, записанных в двоичной системе счисления и принадлежащих промежутку: [0; 8), где первая цифра - номер команды, а оставшиеся - ее аргументы.

Команды:
  • 000 (SET):
    • Аргумент 1: Значение для записи.
    • Аргумент 2: Номер ячейки RAM.
    • Аргумент 3: ---
  • 001 (NOT):
    • Аргумент 1: Номер ячейки RAM для получения первичного значения.
    • Аргумент 2: Номер ячейки RAM для записи результата операции.
    • Аргумент 3: ---
  • 010 (AND):
    • Аргумент 1: Номер ячейки RAM для получения первого аргумента.
    • Аргумент 2: Номер ячейки RAM для получения второго аргумента.
    • Аргумент 3: Номер ячейки RAM для записи результата операции.
  • 011 (OR):
    • Аргумент 1: Номер ячейки RAM для получения первого аргумента.
    • Аргумент 2: Номер ячейки RAM для получения второго аргумента.
    • Аргумент 3: Номер ячейки RAM для записи результата операции.
  • 100 (XOR):
    • Аргумент 1: Номер ячейки RAM для получения первого аргумента.
    • Аргумент 2: Номер ячейки RAM для получения второго аргумента.
    • Аргумент 3: Номер ячейки RAM для записи результата операции.
  • 101 (GOTO):
    • Аргумент 1: Номер строчки программы. С которой начнется исполнение дальнейших команд.
    • Аргумент 2: ---
    • Аргумент 3: ---
  • 110 (IF):
    • Аргумент 1: Ячейка RAM для выбора места перехода.
    • Аргумент 2: Номер строчки программы. С которой начнется исполнение дальнейших команд в случае высокого сигнала в ячейке RAM переданной в 1 аргументе.
    • Аргумент 3: Номер строчки программы (по умолчанию).
  • 111 (GET):
    • Аргумент 1: Номер порта для получения значения;
    • Аргумент 2: Номер ячейки RAM для записи полученного значения;
    • Аргумент 3: ---

Пример программы

111 000 000 000 GET (PORT_000) → (RAM_000) – считывает значение с порта 000 и записывает по адресу 000 в RAM.

111 001 001 000 GET (PORT_001) → (RAM_001) – считывает значение с порта 001 и записывает по адресу 001 в RAM.

010 000 001 010 AND (RAM_000) + (RAM_001) – Выполняет логическую операцию "and" между значениями ячеек 000 и 001 RAM, а результат записывает в ячейку RAM 010

101 000 000 000 GOTO -> 000 – Следующая исполняемая строчка программы - 000

000 000 000 000 ---

000 000 000 000 ---

000 000 000 000 ---

000 000 000 000 ---

Описание пульта

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

Пульт содержит следующие области:
  • "Линейная шкала" – отображает номер исполняемой строки (1–8).
  • Кнопки "Порты (input)" – кнопки для симуляции входных портов (подробнее в описании блока "GET").
  • Переключатель "Ручной режим" – в случае активного состояния тактирование переводится на ручной режим (итерация расчета привязывается к нажатию кнопки "Сделать шаг").
  • Кнопка "Шаг" – активна в случае ручного тактирования (1 шаг = 0.25 строки исполнения).
  • Область "RAM" – цветовые индикаторы, соответствующие значениям одноименных ячеек в блоке с подписью "RAM".

Используемые блоки