Кстати, если кто не знает, то я стараюсь писать подробные commit messages, можно все увидеть по "git log --full-history", там больше интимных подробностей.
Вид для печати
Кстати, если кто не знает, то я стараюсь писать подробные commit messages, можно все увидеть по "git log --full-history", там больше интимных подробностей.
Запустил синхронную модель:
- переделан секвенсор на современный лад, вместо кучки Am2909, Am2911 и Am29811 один модуль am4_seq
- переделано ALU, также один модуль, выкинут демонстрационный мусор типа схемы ускоренного переноса и упрощены флаги переноса и арифметического переполнения, теперь они поддерживаются только в операциях, которые реально использует микрокод
- переделан блок ввода-вывода Q-bus на синхронный, переделан таймер транзакции
- теперь рабочая частота равна pin_clk, а не делится на 18 для оригинального симуляции тактового генератора на линии задержки
Все заводские тесты проходит, перехожу на Wishbone и готовлюсь к запуску на реальном железе, репка на github обновлена.
Пока синтезатор показывает частоту проекта 65МГц, маловато, будем бороться.
M4 заработал на реальной FPGA - на DE0, пока на 50МГц, есть кое-какие идеи по улучшению Fmax, буду завтра пробовать.
Предварительно прогнал тесты вычисления Пи, без EIS M4 процентов на 10 обходит 1801ВМ1, с EIS (MUL/DIV) почти догоняет 1801ВМ2. Вообще М4 процессор древний, нет предвыборки следующей команды и на шина не очень удачно сделана, так что результаты очень даже ничего.
тема по процессору и весьма познавательная \ интересная
https://zx-pk.ru/threads/27751-prots...ki-modeli.html
пусть тут ссылка будет - не помешает ведь в данной теме?
Да, я про ту тему помню, обновил там ссылки тоже.
В-общем, не нашел я способов оптимизировать М4, там вообще нет конвейера, просто тупо все в один цикл сделано изначально. Пытался разнести выборку микрокоманды и исполнение на АЛУ, но там есть хитрый флажок PSW_XC, он влияет на адрес следующей микрокоманды в секвенсоре. И этот флажок не находится в регистре, а сложно-комбинационно вычисляется как выдвигаемый бит при сдвигах, то есть - тупо результат всей огромной и длинной функции АЛУ. И от него зависит следующий адрес инструкции, пока бит не вычислен - выбирать следующую микроинструкцию нельзя. Вероятно можно было бы частоту немного поднять, если бы эту длинную цепочку заметили в свое время, а может быть и нет - это снижает количество микрокоманд в циклах умножения/деления. А так - надо переписывать микрокод, чтобы оно этот флаг защелкивало и проверяло уже в следующей микроинструкции. Но может упасть скорость деления и умножения, потому что удлиняться циклы. Переписывать микрокод не буду, это уже очень глубокая модификация, не хочется влазить в разработку. Сейчас модель работает согласно оригиналу, отличная демонстрация проекта на секционном комплекте, пусть уже живет на 50 МГц (66МГц на более быстром C3-6).
у DEC пультовый режим микропрограммный - только в микропроцессорах, а в машинах "на рассыпухе" - в виде программы в ПЗУ(в области адресов ввода-вывода). Кому интересно - можно посмотреть как у DEC это реализовано. Кстати, нужно для одного проекта "вытащить" от туда эту программку - кто бы взялся сделать ?
(листинги с комментариями есть и DEC и от 100/25).
Т11 - единственный микропроцессор DEC, в котором нет микропрограммного OTD, и если в каком-то изделии на этом процессоре он нужен, то его надо реализовывать как программу в ПЗУ, занимающую какую-то область в адресах памяти, а в Зеленоградских придумали "теневую" область. Зеленоградский OTD повторяет по синтаксису DEC_овский микропрограмный, а он значительно более "дружественный" для ползователя по сравнению с тем, что в "больших" машинах и, соответственно, требует бОльшего количества ячеек памяти для реализации. И, если маленькая програмка в "больших" машинах занимала немного ячеек в области ввода-вывода" и с этим можно было мириться, то копия микропрограммного получалась слишком объемной и пришлось ее аппаратно "прятать".
М4 запустился на Lichee Tang. Круто, кетайцы обновили среду разработки "Tang Dynasty" до 5-ой версии. Меня и 4.6 устраивала, все интуитивно понятно, компилирует и прошивает вообще без проблем. Осталось проверить только больной на голову Xilinx с его вечно падающей ПISE. Надо доставать ноутбук и собирать проект на нем.
В среднем, на всех платах проверял на 50МГц, но при большом желании и тьюнинге можно выжать и 60. Циклон 5 неожиданно оказался эффективен на М4 - до 80МГц.