О, Микро-7
О, Микро-7
Собираю в коллекцию советские калькуляторы и компьютеры.
Мой сайт: http://www.leningrad.su/museum/
Матрица приоритетного шифратора прерываний в ВМ1Г тоже очень заметно переработана, работу этого блока придется изучать заново по полной. И как бы там не начало работать прерывание от таймера - линия запроса от него уже явно обрабатывается в матрице. Насколько я понимаю, таймер в ВМ1Г заявлен официально, так что вполне может быть.
Получена микропрограмма 1801ВМ1Г. Модель ВМ1Г прошла тесты 791401 и 791404 (без проверки исключений по недопустимым командам).
Команда MUL работает, микропрограммно и о-о-о-чень долго - примерно ~270 тактов. При частоте 5МГц - почти 60 мкс, печалька и привет прерываниям. Сам алгорим умножения точно пока не разобрал - он там классический на сдвигах, но какой-то инваринт. Счетчика циклов нет, поэтому есть вероятность что время исполнения умножения зависит от умножаемых данных (например, умножаем пока не досдвигаем аргумент до нуля). Эмуляторщикам ахтунг
Модель, версия 1.2k
Схема 1801ВМ1А
Схема 1801ВМ1Г
Итого 1801ВМ1Г содержит 16646 транзисторов.
Прерывание от таймера точно поддерживается, пока не тестировал, приоритет - ниже чем у IRQ1/HALT, и выше чем IRQ2/IRQ3/VIRQ.
Последний раз редактировалось Vslav; 16.05.2015 в 21:55.
Самое главное .
Особенно - вектор и обстоятельства прерывания.
* * *
Припоминаю, что ( предположительно ! ) кристаллы ВМ1Г могли поставлять вместо ВМ1А без уведомления потребителя - году так в 1991 выпустили извещение на Э.
И еще там нажимали на частотную градацию - т.к. ВМ1Г вовсе не 100% шли на 6.0-6.5 мгц при 25 градусах ( цеховые ворота, быт и военка ).
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
Vslav, я тут между попытками освоения multisima скармливал verilator'у модель, чтобы посмотреть, что он выдаст, и верилатор предлагал в vm1_plm.v в функции cmp вместо casex использовать casez, якобы это более эффективно. Как я понимаю, такая замена на уровне логического описания, а так же программирования абсолютно идентична? Ну т.е. если соответственно и в аргументах 'x' заменить на '?'.
Ещё в Qsync\vm1_qbus.v в строке 1567
16 разрядов сравнивается с 8ю разрядами. Верилатор говорит по этому поводу warning. В принципе такая конструкция полностью работоспособна и выдаёт ожидаемый результат, но наверное изначально планировалось сравнивать только старший байт? Вот так:Код:assign flag[2] = (~plr[18] | (alu[15:0] == 8'o000)) & (alu[7:0] == 8'o000); // Z
Или сперва слово сравнивать с 0 и для надёжности ещё и его мл.байт с нулём? Вот так:Код:assign flag[2] = (~plr[18] | (alu[15:8] == 8'o000)) & (alu[7:0] == 8'o000); // Z
И ещё, есть множество alwaysов с одинаковым условием, состоящих всего из одного назначения каждый. Если их объединить в один блок always, это будет просто эквивалентная запись или есть какие-то принципиальные предпосылки так не делать?Код:assign flag[2] = (~plr[18] | (alu[15:0] == 16'o000)) & (alu[7:0] == 8'o000); // Z
---------- Post added at 13:35 ---------- Previous post was at 13:12 ----------
Бегло сравнил модели Qsync и Wsync, на первый взгляд разница только в том, что в Wsync исчезли ноги, отвечающие за ПДП: DMR, SACK, DMGI, DMGO и соответствующая логика, всё остальное - не принципиально. Они действительно настолько не нужны?
В нашем случае абсолютно без разницы. casex более широкий случай, рассматривает 'x' и 'z' как не влияющие на результат сравнения, а casez - только 'z'. У меня там вообще были проблемы чтобы получить максимально совместимый синтезируемый (а не только для модели) код для сравнения переменных с 'x', поэтому лучше ничего не трогать.
В приложении - кусочек кода на Си, который я использую для анализа микрокода. Он совершенно "наколенный", но там есть функция вычисления матрицы plm (пока только для ВМ1А), надеюсь, поможет с реализацией.
Да, это опечатка. В данном случае к ошибке не приводит - 8 разрядов автоматически расширяются до 16 и получается эквивалент alu[15:0] == 16'o000000. Лучше исправить на alu[15:8] == 8'o000, хотя для получаемого после оптимизации результата разницы никакой не будет.
Если все назначения неблокирующие - со значком '<=', то разницы никакой не будет, можно объединить. В принципе, я старался чтобы все присваивания были или непрерывными (через assign) или неблокирующие (через <=). Блокирующие (через =) не планировались и могли проскочить только случайно, как опечатка. В блоке always они часто будут работать точно как неблокирующие (зависит от уравнений в блоке).
Угу, Wsync - это последняя актуальная модель, в итоге будет использовать шину Wishbone, там вопрос арбитража доступа к шине решается внешним компонентом, поэтому все эти подробности из этой модели потихоньку удаляются. Wsync - это потактовая копия, предназначенная для синтеза в реальные проекты на FPGA.
В Qsync будет вносится минимум - микропрограмма для ВМ1Г, переход на общую систему конфигурации проекта, и исправление опечаток. Хотя Qsync тоже синтезируемая, но ее реальное использование в FPGA не предполагается, основное ее назначение - моделирование на промежуточном этапе разработки. Скажем так - это "приличная" модель, очень близкая к оригиналу и позволяющая комфортно моделировать.
Async - это еще более точная модель, максимально близкая, но из-за асинхронных особенностей есть некоторые проблемы с моделированием, а надежный синтез практически невозможен. Модифицироваться никак не будет (только грубые опечатки), оставлена в пакете как демка для поборников "расовой чистоты"
PS. Впишу-ка я этот текст в readme, а то народ в почту возмущается что Async кучу варнингов при синтезе дает
PPS. А приложение-то я и позабыл, исправляюсь![]()
Последний раз редактировалось Vslav; 18.05.2015 в 17:47.
Нашел в закромах БК11 с экситоновским КР1801ВМ1Г - но вот есть сомнения в его 3 точках. Не будет ли возможным как-нибуть разузнать вектор от встроенного в процессор таймера ?
*
Кстати, сам экз. процессора - Г. конкретное, с Большой буквы. Т.к. его проверяли на запуск БК0010 - но вот отработкой тестов из ТМОС явно не озадачивались. Не сменил его в машинке исключительно из интереса к таймеру и его вектору.
![]()
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
А разве три точки это ВМ1Г? Вот подробное исследование со сканами ТУ и изменениями, получается что ВМ1Г это две точки или четыре, но никак не три. Тем не менее, дописал модель в части прерываний (модуль таймера не имел выходного прерывания и его сброса по подтверждению) и запустил небольшой тестик - прерывается по 270 вектору, сохраняет PC/PSW в текущем стеке.
Последний раз редактировалось MM; 26.05.2015 в 19:07.
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)