vak: (Default)
[personal profile] vak
МЭСМ-6 уже проходит несколько тестов: работают команды uj, vtm, utm, mtj, vzm, v1m, j+m, vjm, vlm, utc, wtc.

Я добавил в фазу decode автоматическое приращение счётчика команд (PC), теперь некоторые команды выполняются за один такт (vtm, utm, mtj. j+m).

Описание микроархитектуры по мере разработки постепенно образуется на странице: https://github.com/besm6/mesm6/wiki/Microarchitecture

Date: 2019-03-15 02:19 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
A+X, A-X, X-A, AMX вышли (в отдельной реализации) в общей сложности около 480 LUT, 185 FF, 104 full adders. Я сначала локально у себя протестирую.

AVX будет делаться в УУ путем условного выбора A-X или X-A в зависимости от знака операнда, и подаче 0 в качестве мантиссы операнда, и порядка сумматора в качестве порядка операнда, тогда нормализовывать вправо будет нечего.

Date: 2019-03-15 05:15 (UTC)
x86128: (Default)
From: [personal profile] x86128
Ух, параллельно пробую это всё нарисовать в Logisim-evolution. Там, конечно, глобальные изменения будут болезненно вноситься, но пока есть запал продолжать.

Date: 2019-03-23 04:04 (UTC)
x86128: (Default)
From: [personal profile] x86128
Модель logisim заработала. Протестировал пока только на тесте команды UJ.

Date: 2019-03-23 05:01 (UTC)
x86128: (Default)
From: [personal profile] x86128
Сам по себе хорошо не умеет. Там вроде как есть встроенный осциллограф но заставить его работать именно с этой схемой у меня не удалось. Буду разбираться в чем причина.

Я пока делал запись с экрана только общей части "платы" с процессором.
YouTube

(no subject)

From: [personal profile] x86128 - Date: 2019-03-23 05:16 (UTC) - Expand

(no subject)

From: [personal profile] x86128 - Date: 2019-03-23 05:36 (UTC) - Expand

(no subject)

From: [personal profile] x86128 - Date: 2019-03-23 09:40 (UTC) - Expand

(no subject)

From: [personal profile] x86128 - Date: 2019-03-24 07:53 (UTC) - Expand

Date: 2019-03-23 05:09 (UTC)
x86128: (Default)
From: [personal profile] x86128
Я планирую в ближайшее время навести эстетику на внутренности CPU и разродиться в обновляемый пост на wiki с картинками компонентов схемы и роликами "интересных" участков схемы на мой взгляд.
Вот правда не знаю толи это вести как отдельный проект у себя на github (как сейчас), толи форкнуть Ваш и потом пулл-реквестом к Вам добавить папку logisim в общее дерево и wiki страничку с картинками и описанием в besm6/mesm6. Всё таки logisim модель сильно зависит от содержимого mesm_defines и microcode.v

(no subject)

From: [personal profile] x86128 - Date: 2019-03-24 18:17 (UTC) - Expand

Date: 2019-03-15 05:16 (UTC)
x86128: (Default)
From: [personal profile] x86128
Если не трудно, можно пример чисел (выражения) когда необходима нормализация вправо.

Date: 2019-03-15 07:03 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Возможно, я неудачно выразился. Сдвиг мантиссы вправо перед выполнением операции - это, строго говоря, не нормализация, а выравнивание порядков.

А настоящая нормализация вправо бывает после выполнения операции только на 1 разряд.
Т. к. представление мантиссы - без скрытого бита, просто в дополнительном коде, то диапазон значений мантиссы - от -1 до 1-2-40. Поэтому, например, при изменении знака числа -1 (представленного как -1*20, 4020 0000 0000 0000) сначала получается псевдопредставление 1*20, которое нормализуется на 1 разряд вправо, и выходит 0.5*21 (4050 0000 0000 0000).

Date: 2019-03-15 07:20 (UTC)
x86128: (Default)
From: [personal profile] x86128
Теперь понятно. Спасибо за развернутый ответ.

Еще такой вопрос по общему алгоритму выполнения операций в АЛУ MESM6 с плавающими числами. Возможно я забегаю вперед.
Будет примерно как в IEEE754? То есть я имею ввиду порядок действий конечного автомата:
1. Защелкивание аргументов
2. Распаковка (порядки / мантиссы на регистры)
3. Отработка спец. случаев (сложение/умножение на 0, деление на 0, возможно еще что-то)
4. Выравнивание порядков
5. Отработка выхода порядков за пределы
6. Выполнение операций с мантиссой
7. Нормализация
8. Округление (регистр Y /РМР )
9. Упаковка
10. Выдача на выходной регистр АСС и РМР (Y)

Date: 2019-03-15 17:53 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Благодаря тому, что распаковка тривиальна (разве что размножить знаковые биты), распаковка и защелкивание объединены. Специальные случаи пока не отрабатываются. Для сложения, строго говоря, и не должны, поскольку результат сложения не-нуля с нулём при имеющемся алгоритме зависит от соотношения порядков нуля и ненулевого операнда.

Умножение я надеюсь делать с помощью аппаратного умножителя, поэтому распознавание нуля много тактов не сэкономит.

В остальном всё практически так и есть (кроме упаковки, которая тривиальна).

Оригинальный алгоритм деления я не буду пытаться воспроизводить, скопирую из эмулятора.

Date: 2019-03-18 19:30 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Для простоты, значит, между операциями будет пустой такт? Ладно. :)

Попробуй для примера переписать ARX в двухтактном виде.
Edited Date: 2019-03-18 19:34 (UTC)

Date: 2019-03-18 20:08 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
ОК, тогда я сделаю state machine, как мне удобно.

Кстати, AAX и AOX обнуляют Y, а AEX делает Y := ACC. :) Тесты это не проверяют?

(no subject)

From: [personal profile] spamsink - Date: 2019-03-18 22:09 (UTC) - Expand

(no subject)

From: [personal profile] spamsink - Date: 2019-03-19 21:26 (UTC) - Expand

(no subject)

From: [personal profile] spamsink - Date: 2019-03-19 23:37 (UTC) - Expand

Date: 2019-03-20 17:56 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Боюсь, до начала следующей недели у меня много времени не будет. В выходные я буду занят.

Date: 2019-03-20 21:10 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Зачем? Большинство из этих команд декрементирует SP по завершении, поэтому хватит и дополнительного бита в той же микрокоманде, где сейчас только GO_FETCH_OR_DECODE (ну и бита в вычислении исполнительного адреса, который подменял бы 00000 адресной части на 77777, если номер регистра - 15.

Специальный интерес представляют только команды, инкрементирующие SP.
Edited Date: 2019-03-20 21:13 (UTC)

(no subject)

From: [personal profile] spamsink - Date: 2019-03-21 06:24 (UTC) - Expand

(no subject)

From: [personal profile] x86128 - Date: 2019-03-23 04:42 (UTC) - Expand

Date: 2019-03-28 00:24 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Мой ранее существовавший интеловский логин сдох и почему-то не поддается восстановлению. Придется для скачивания моделсима завести на другой адрес.

ACX уже почти готова, нужен только микрокод, вызывающий потом ARX; остальные 3 можно для начала просто содрать из эмулятора. Пусть выполняются в 1 такт; оптимизировать синтез будем потом.
Код для сложения/умножения с нормализацией уже есть, осталось только интегрировать.

(no subject)

From: [personal profile] spamsink - Date: 2019-03-28 03:23 (UTC) - Expand

(no subject)

From: [personal profile] spamsink - Date: 2019-03-28 03:12 (UTC) - Expand