Важная информация

User Tag List

Страница 50 из 271 ПерваяПервая ... 464748495051525354 ... ПоследняяПоследняя
Показано с 491 по 500 из 2703

Тема: Цифровая археология: 1801 и все-все-все

  1. #491
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Из-за особенностей протокола Q-Bus нечётные байты передаются по шине в старшем байте, поэтому перед использованием нечётного байта содержимое шины должно пройти через SWAB-регистр. Также и при записи байта по нечётному адресу его нельзя просто выставить на шину - надо сначала сделать SWAB.
    В аппаратуре перестановка делается очень просто и транзисторный бюджет на это дело небольшой. Поэтому инструкция SWAB выполняется на своей отдельной схеме - перестановка происходит при загрузке в регистр-аргумент X АЛУ.
    А с шиной Q-bus имеется специальный регистр (я условно назвал его Q), который может принимать данные с шины X (и АЛУ, которое тоже работает на шину Х) и шины Q-bus и выдавать от себя данные на шину X или Q-bus. При этом при работе с Q-bus он может переставлять байты как на входе, так и на выходе, с опциональным независимым обнулением каждого байта. Причем остальная часть процессора даже не знает по какому адресу байт, по четному или нечетному, этот регистр смотрит на защелку младшего бита адреса и сам все разруливает.

    В итоге после разбора и редукции схемы, работа регистра Q описывается очень просто. Ввод данных с шины Q-bus (для упрощения я убрал запись с внутренней шины X):

    Код:
    always @(posedge pin_clk_n)
    begin
        if (au_qstbd)
             qreg[7:0] <= (au_ta0 ? wb_cpu_dat_i[15:8] : wb_cpu_dat_i[7:0]);
    
        if (au_qstbd)
             qreg[15:8] <= wb_cpu_dat_i[15:8];
    end
    То есть - младший байт Q-регистра (в коде это переменная qreg[7:0]) может защелкивать или старший или младший байт шины данных Q-bus. А старший байт Q-регистра (переменная qreg[15:8]) всегда защелкивает старший байт. Но он дальше не всегда используется в последующих операциях - маскируется в АЛУ флагом байтовой операции.

    Вывод данных на Q-bus:
    Код:
    assign   qrd      = au_ta0 ? {qreg[7:0], 'o000} :  (plrt[6] ? {8'o000, qreg[7:0]} : qreg);
    То есть, на шину данных Q-bus будет выводится или полные 16 бит данных, или младшие 8 бит, дополненные сверху или снизу нулями, взависимости от адреса (au_ta0 - защелка младшего бита адреса транзакции, plrt[6] - флаг байтовой операции, поступает из декодера)

    Все эти операции происходят прозрачно и независимо от остальной аппаратуры, вроде явно не требуют дополнительных тактов.
    Последний раз редактировалось Vslav; 20.03.2015 в 15:50.

  2. #492
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,787
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    68 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Все эти операции происходят прозрачно и независимо от остальной аппаратуры, вроде явно не требуют дополнительных тактов.
    Значит, с этим мне повезло, т.к. тайминги доступа к чётным/нечётным байтам отдельно никогда не тестировались.

    ...

    А что насчёт таймингов префиксного декремента и постфиксного инкремента регистров при косвенной адресации - тесты показали, что-то вроде того, что инкремент содержимого идёт параллельно с его использованием и на тайминги чаще не влияет, а декремент всегда производится сначала и поэтому автодекремент добавляет операции такты.

    Но на самом деле измеренные тайминги ( при задержке RPLY в 6 тактов ) были не так однозначны:

    Код:
    MOV  (R1), R0		30
    MOV  (R1)+,R0		30
    MOV -(R1), R0		30
    
    MOV  (R1), (R0)		45
    MOV  (R1)+,(R0)		46
    MOV -(R1), (R0)		47
    MOV  (R1), (R0)+		49
    
    ADD  (R1), (R0)		55
    ADD  (R1)+,(R0)		55
    ADD -(R1), (R0)		56
    ADD  (R1)+,(R0)+		55
    ADD -(R1), (R0)+		56
    ADD -(R1),-(R0)		56
    
    ADD  @(R1)+,@(R0)+	82
    ADD  @-(R1),@(R0)+	82
    ADD  @-(R1),@-(R0)	83
    
    BIT  @(R1)+,@(R0)+	70
    BIT  @-(R1),@(R0)+	71
    BIT  @-(R1),@-(R0)	72
    Общая идея вполне понятна, но простой логической связи не просматривается - в команде MOV даже инкремент иногда добавляет такт, а декремент нет.
    Выделенное синим - вообще за гранью понимания.

    ---------- Post added at 16:41 ---------- Previous post was at 16:36 ----------

    Ещё прикол:

    Код:
    MOV  (R1), R0		30
    MOV  (R1)+,R0		30
    MOV -(R1), R0		30
    
    ADD  (R1), R0		30
    ADD  (R1)+,R0		30
    ADD -(R1), R0		30
    
    BIT  (R1), R0		30
    BIT  (R1)+,R0		30
    BIT -(R1), R0		31
    Последний раз редактировалось Patron; 20.03.2015 в 16:38.

  3. #493
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У процессора блок обмена с Qbus может работать параллельно и независимо от АЛУ, более того, есть отдельный буфер адреса и может быть запрошена новая операция немедленно после его освобождения. То есть, выдали адрес из АЛУ в буфер, выполнили захват шины, выдали адрес, ниспадающий фронт SYNC, и в этот момент внутренний буфер адреса освобождается - он больше не нужен для текущей транзакции, и микрокод может туда закинуть новую операцию по новому адресу, хотя и текущая транзакция еще не закончена.

    Вот та строчка что в табличке синим отмечена, там по факту будет две транзакции - сначала будут прочитаны данные источника, потом будет диспетчеризован (отдан исполнительному блоку Q-bus) адрес получателя, а дальше надо смотреть и трассировать микрокод, возможны варианты - или будет вычислен инкремент и сохранен регистр (кстати это возможно одновременно с диспетчирезацией адреса), или будут диспетчеризованы записываемые данные для получателя. В зависимости от очередности этих операций будет разный момент старта операции собственно записи. Буду заниматься проектом - посмотрю как оно там.


    Цитата Сообщение от Patron Посмотреть сообщение
    использованием и на тайминги чаще не влияет, а декремент всегда производится сначала и поэтому автодекремент добавляет операции такты.
    Да, при вычислении адреса микрооперация занимает 3 такта. Адрес может быть диспетчеризован с шины X во втором или третьем такте (смотреть строб au_qstbx). Во втором такте это всегда исходный аргмент, то есть до модификации, в третьем - уже результат из АЛУ. Можно было бы и пре-декремент в одну операцию вписать, почему не сделали и как оно практически работает - тоже надо смотреть.

  4. #494
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Немножно потрассировал микрокод. Декремент и инкремент вычисляются практически одинаково за одну микроинстукцию, отличается только фаза выдачи адреса в регистр - всегда с шины X, до модификации как входной аргумент АЛУ, или позже, после модификации как результат АЛУ, тоже выданный на шину X.

    Для инструкций типа mov (R1), R0 выполняются следующие микрооперации:
    - чтение кода инструкции (иногда опережающий, еще до выполнения
    предыдущей инструкции), проверка прерываний
    - первичное декодирование операции
    - запуск чтения данных источника (*R1)
    - ожидание данных и сохранение во временном регистре R11
    - опережающий запуск чтения следующей инструкции
    - переписывание результата из R11 в R0

    Для инструкций типа mov (R1)+,(R0) следующие микрооперации:
    - чтение кода инструкции (опережающий или нет, зависит от предыдущей команды), проверка прерываний
    - первичное декодирование операции
    - запуск чтения данных источника (*R1), одновременный инкремент R1
    - ожидание данных и сохранение во временном регистре R11
    - запуск записи данных из R11 по (R0)
    - ожидание завершения записи
    Тут нет опережающего запуска чтения следующей команды, запись в приоритете.

    Полный лог в пост не влез, поместил в приложененный файл. Легенда:
    - plr() - это начало исполнения микроинструкции
    - clk: - номер такта частоты CLC (ниспадающий фронт)
    - В начале листинг тестового кода, первая колонка - такт начала микрооперации запуска чтения кода инструкции
    - вторая колонка - такт начала микороперации сохранения результата

    Краткие выводы - в 1801ВМ1 есть зачатки параллельного конвеера (я там еще скрыл некоторые промежуточные подробности работы матрицы PLM, там свой конвеер, потому что матрица медленная, ей нужно два такта только для выработки кода микрооперации plr от входных параметров), скорость выполнения инструкции может зависеть от предыстории - был опережающий запуск чтения кода инструкции или нет, ну и от скорости шины тоже зависит.
    Вложения Вложения
    • Тип файла: txt mc.txt (15.7 Кб, Просмотров: 232)

  5. #495
    Guru Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,347
    Спасибо Благодарностей отдано 
    221
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    200 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    в 1801ВМ1 есть зачатки параллельного конвеера
    Интересно, это наследство BE1 или добавлено для совместимости с PDP-11?
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  6. #496
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CodeMaster Посмотреть сообщение
    Интересно, это наследство BE1 или добавлено для совместимости с PDP-11?
    Сложно сказать, кристалл ВЕ1 никто не реверсил Может быть, у ВЕ1 было быстрое внутреннее ПЗУ и конвеер был не особо нужен. Судя по фото кристалл ВЕ1 существенно отличается от ВМ1, могли конвеер и добавить.

  7. #496
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #497
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Микрокод в ВМ1 затейливый, без инструментария не разобраться досконально. Буду писать программки для анализа. Всего 128 микроадресов, для начала хотя бы табличку возможных переходов построить, и многоядерные процессоры x86 пригодятся - параллельно анализировать 2G вариантов.

  9. #498
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Из повседневного:
    Написал Бобу Супнику, попросил схемы и фотошаблоны J11. И даже ответ получил - увы, в ходе слияний, поглощений, нескольких передач авторских прав фотошаблоны и бумажные схемы у него не выжили. Возможно что-то осталось у Ментека, надо у них просить.
    Так что придется J11 ковырять "по-старинке", в дралоскопе. И где-то надо сделать (или научиться) операции сошлифовки отдельных слоев - в микросхемах J11 два слоя металла и полисиликона. И еще, советские 1831 очень редкие и дорогие, для реверса недоступны, поэтому будет (если будет) именно J11, он распространенный и цены на него относительно гуманные.

  10. #499
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    757
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Несколько слов как устроен микрокод в 1801ВМ1.
    Имеется одна большая Программируемая Логическая Матрица - ПЛМ. В ВМ1 она условно программируемая - ее фукнции определяются жесткой схемой, заданной при изготовлении процессора. У матрицы есть всего 31 логический вход - 16 из них это код текущей инструкции, еще 7 входов это текущий адрес микрокоманды, 5 входов это специальные флаги и еще 3 входа отвечают за обработку прерываний или флагов декодирования операции - зависит от фазы. Матрица имеет 34 логических выхода, 7 из них определяют адрес следующей микрокоманды. Еще один выход принимает единичное значение если выполняется недопустимая операция. Остальные выходы управляют различными блоками процессора - АЛУ, регисты, блок обмена с шиной и тд.

    Матрица содержит только комбинационную логику, то есть никаких триггеров и прочих элементов памяти внутри нет, если на вход поданы аргументы, то на выходе появляется 34 результата. При некотором упрощении матрицу можно рассматривать как небольшое ПЗУ.

    Дла анализа микрокода было любопытно посмотреть как меняется адрес микрокоманды, там всего 128 адресов (7 бит входного аргумента), для этого написал программку которая перебирает все возможные комбинации на входе и смотрит на какие следующие адреса микрооперации возможен переход. Если срабатывает признак недопустимой операции, то происходит безусловный переход на микроадрес 0x7E и генерируется немаскируемое исключение. Было подсчитано количество совершающихся переходов к каждому адресу. Также были исключены адреса на которых нет перехода или все переходы сопровождались признаком недействительной операции. Получилась совершенно небольшая табличка, ведь было возможно целых 16384 комбинации, но почти все отсеялось - осталась только узкая тропинка реального execution flow.

    В первой колонке исходный адрес микрооперации (откуда переходим), в следующих колонках адреса назначения (куда переходим) и количество вариантов - всего в сумме до 2^24 (осталось 31-7 - 24 разряда исходного операнда матрицы). Если все переходы в подкатегории сопровождаются признаком недействительной операции, то стоит знак звездочки '*', то есть фактический переход осуществляется на адрес 0x7E. Аппаратный сброс процессора вызывает старт микропрограммы с адреса 0x7F. Есть подозрение что адрес инвертирован - логично было бы начать с 0x00, но уже довольно трудоемко модифицировать модель и утилиты, а для анализа особой разницы инверсия не привнесет.

    Код:
    01  15:01000000 
    04  6E:01000000 
    05  15:00800000  57:00800000 
    14  50:00800000  6E:00800000 
    15  6E:00800000  7E:00800000 
    25  3A:01000000 
    26  28:00060000  2E:00200000  38:002A0000  6E:00160000  7E:009A0000 
    27  28:000B4000  2E:00200000  38:0024C000  6E:00294000  7E:0086C000 
    28  38:01000000*
    2A  37:00C00000  38:00400000*
    2E  6E:00200000  7E:00E00000 
    2F  2E:00400000  48:00400000  4C:00400000  4E:00400000 
    31  7B:01000000 
    32  37:01000000 
    33  32:00800000  37:00800000 
    36  28:000A6000  38:0048A000  6E:0015A000  7E:00976000 
    37  48:0003C000  4D:00008000  4E:00004000  66:00200000  68:0030A000  6D:00002000  6E:00A96000  6F:00016000 
    38  25:00200000  31:00400000  39:00400000  7B:00600000 
    39  31:00800000  7B:00800000 
    3A  2A:00400000  32:00400000  33:00400000  37:00200000  38:00200000*
    3D  31:00800000  7B:00800000 
    3E  46:00116C00  47:00107C40  4E:00200620  66:004F8500  67:002FC400  6E:003EBFA0  6F:00000900 
    3F  6E:01000000 
    41  38:01000000*
    42  60:01000000 
    43  42:01000000 
    45  3C:01000000*
    46  14:01000000 
    47  46:01000000 
    48  05:00004000  15:00002000  38:00018000* 45:00018000  47:00020000  49:00420000  4E:00100000  4F:00614000  55:00002000  58:00100000  6E:002A8000  78:00018000  7E:00044000 
    49  15:00004000  38:00008000* 46:003D0000  47:00080000  48:00008000  49:00004000  4E:00340000  4F:0002C000  55:00008000  57:00004000  58:000F8000  6E:006A0000  78:00020000  7E:00068000 
    4B  38:01000000*
    4C  4B:00480000  4F:00580000  6A:00180000  6E:00480000 
    4D  4F:00040000  6E:00FC0000 
    4E  36:01000000 
    4F  26:01000000 
    50  41:00400000  48:00400000  49:00400000  51:00400000 
    51  42:00400000  43:00400000  52:00800000 
    52  53:01000000 
    53  54:01000000 
    54  45:00600000  47:00800000  55:00200000 
    55  05:00200000  45:00200000  47:00400000  4E:00200000  4F:00200000  6E:00400000 
    57  38:01000000*
    58  48:00800000  59:00800000 
    59  47:00400000  4D:002B0000  4F:00950000 
    5C  47:00800000  57:00800000 
    5D  5F:01000000 
    5E  5D:01000000 
    5F  6E:01000000 
    60  75:01000000 
    61  74:01000000 
    62  63:01000000 
    63  6C:01000000 
    65  3E:01000000 
    66  6E:01000000 
    67  3C:01000000*
    68  61:01000000 
    6A  37:00C00000  3F:00400000 
    6B  68:01000000 
    6C  6B:01000000 
    6D  3C:01000000*
    6E  7E:01000000 
    6F  46:00C00000  66:00400000 
    70  6E:01000000 
    74  43:01000000 
    75  6E:00800000  70:00800000 
    78  38:01000000*
    7B  3A:00E00000  4F:00200000 
    7C  43:00DF7F00  47:00208100 
    7E  04:0001E000  25:00003800  27:00006800  2F:00000400  38:001BC620  3A:00010300  47:00000040  48:00000C40  4E:00001900  50:00000100  58:00004000  5E:00400000  62:00400000  6C:00400000  7E:00204960 
    7F  7E:01000000
    Итого получился 71 осмысленный адрес (некоторую часть еще можно выкинуть), всего 154 осмысленных перехода, это уже можно как-то анализировать и нарисовать алгоритмы исполнения различных инструкций PDP-11. Анализ микрокода также понадобится для выяснения интимных подробностей о 1801ВМ1Г.

  11. #500
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,199
    Спасибо Благодарностей отдано 
    1,582
    Спасибо Благодарностей получено 
    2,107
    Поблагодарили
    828 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Крутень) ВМ2 в такой же коробочке с бантиком хачу)

Страница 50 из 271 ПерваяПервая ... 464748495051525354 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •