vak: (Default)
[personal profile] vak
Год назад я закончил разработку процессора микро-БЭСМ. Проект не получил никакого резонанса в социуме, тем не менее надо будет когда-нибудь довести его до реализации в железе. К примеру на плате DE10-Lite с чипом Altera MAX 10. Получится нечто вроде Arduino, но с системой команд типа БЭСМ-6.



Путь долгий, впрочем. Главное препятствие - теговая архитектура памяти, которая плохо ложится на современную шину адрес/данные. Стоит задача переделать архитектуру и перенести нужные биты из тега (на каждое слово) в регистры приписки (на каждую страницу). Совместимость со старым софтом обеспечивать не нужно, ведь его всё равно нету.

План следующий.
1. Создать ассемблер , который бы работал под Линуксом и понимал системы команд 64-битного режима и 48-битного (бэсм6).
2. Переписать имеющийся комплексный тест на новый ассемблер.
3. Разбить огромный комплексный тест на отдельные составляющие, для упрощения тестирования и модификации.
4. Поправить архитектуру: перенести бит режима бэсм6 и биты защиты в таблицу страниц (регистры приписки).
5. Поправить соответствующие тесты.
6. Изменить процессор (RTL) нужным образом.
7. Изменить микрокод. Поправить тесты микрокода.
8. Изменить внешнюю шину (RTL) так, чтобы она стала совместимой с реализацией на FPGA.
9. Добавить интерфейс к внешней памяти RAM. На плате DE10-Lite её как раз 8 мегабайт.
10. Переделать контроллер прерываний.
11. Добавить периферийные устройства: внешние кнопочки, светодиоды и UART.
12. Запустить на реальной плате.

Как заработает, дальше набор внешних устройств можно расширять: SD-карточка, графический дисплей, SPI, PWM и т.д. Параллельно неплохо бы еще сделать софтверный симулятор на основе SIMH: сильно помогает в отладке софта.

Date: 2018-01-23 05:38 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Мило, конечно, но не проще ли программно?

Date: 2018-01-23 05:56 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Вот разница между софтверщиками и хардверщиками.

По мне так теория и практика едины.

Date: 2018-01-23 15:25 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
:) Для меня разница чисто теоретическая.

Все равно никто ферритовые кольца наматывать не будет, ФФЯ или там ФТЯ изготовлять.

Date: 2018-01-23 10:29 (UTC)
x86128: (Default)
From: [personal profile] x86128
План следующий.
1. Создать ассемблер , который бы работал под Линуксом и понимал системы команд 64-битного режима и 48-битного (бэсм6).
2. Переписать имеющийся комплексный тест на новый ассемблер.

А где можно посмотреть "правильный" синтаксис этого ассемблера. Я пока разбирался с БЕМШ насчитал аж 3 диалекта (если можно так сказать). И как будет изменяться синтаксис этого ассемблера, если будет ассемблироваться программа для БЭСМ-6? Каков формат HEX файла, который должен выдавать ассемблер?

Может стоит за основу взять самый популярный вариант современно синтаксиса ассемблера и добавить только мнемоники от БЭСМ? Мнемоники в английском варианте я видел, а вот откуда они пошли от какой машины?

Нельзя ли для реализации тегированной памяти для хранения тегов использовать, например, внутреннюю память FPGA? А если её мало, то использовать не 8Мбайт, а только 1Мбайт адресуемой внешней памяти?

Если будем менять микрокод, то понадобиться еще и кроссассемблер микрокода? Есть ли пример (маленький) микрокода в виде теста? Какой объем памяти микропрограмм?

Date: 2018-01-30 02:56 (UTC)
x86128: (Default)
From: [personal profile] x86128
Попробовал собрать, то что есть на Xilinx Vivado 2017.4
Ругалось на timeunit в каждом файле, я закоментил, собралось.
Такая статистика:
Name	Slice LUTs	Slice Registers	F7 Muxes	F8 Muxes	Block RAM Tile	DSPs	
cpu	6583	        922	        888	        316	        13.5	        0

Для xc7a15tcpg236-3

Date: 2018-01-30 03:57 (UTC)
x86128: (Default)
From: [personal profile] x86128
Далее при попытке implementation run сломался на проверке drc. Якобы в модуле cpu регистры prg и cb имеют multiple drive.
С телефона набираю полностью картинку не могу поставить

Date: 2018-01-30 04:23 (UTC)
x86128: (Default)
From: [personal profile] x86128
Картинки сделал.


Edited Date: 2018-01-30 04:28 (UTC)

Date: 2018-01-30 04:49 (UTC)
x86128: (Default)
From: [personal profile] x86128
Да вот полный список:

Date: 2018-02-05 03:41 (UTC)
x86128: (Default)
From: [personal profile] x86128
Теперь собирается нормально.
Дальше разбираюсь с предупреждениями о combination loops в тракте АЛУ. Ну и получается также длинный путь в тракте АЛУ около ~300 нс.

Статистика по использованию LUT сильно меняется в зависимости от ограничений на сигналы IO (пока не знаю как их правильно задавать). Делал Autoassign IO ports получалось аж 9300 LUTs.
В общем надо какую-то конкретную отладочную плату/платформу рассматривать и читать по ней туториал.

Вы на DE10-lite будете запускать?

Date: 2018-02-05 04:22 (UTC)
x86128: (Default)
From: [personal profile] x86128

Date: 2018-01-30 04:50 (UTC)
x86128: (Default)
From: [personal profile] x86128
Почему это вылезло только на этапе Implementation и не вылезло на этапе симуляции RTL при прогоне тестов? Это особенность Verilog?