У меня СЭМЗ-ов нет. Надо смотреть тему про быстродействие, там может и выкладывали результаты. Но у меня по быстродействию и мои КВАНТы немного отличаются.
Вид для печати
У меня СЭМЗ-ов нет. Надо смотреть тему про быстродействие, там может и выкладывали результаты. Но у меня по быстродействию и мои КВАНТы немного отличаются.
Они могут отличаться только из-за этой линии задержки, если схема у них одинаковая.
- - - Добавлено - - -
Нашел один тест на СЭМЗ от Keeper'а.
Если сравнивать медленную версию Квант'a и СЭМЗ, то на СЭМЗ почти везде добавляется 4 такта к операциям, которые длиннее 20 тактов. (20 тактов - это регистр-регистр). Что и следовало ожидать из-за двойной задержки.
Все сходится. На быстрых квантах 28, на медленных 32, а на СЭМЗ 36.
СЭМЗ в топку! Или переделывать под квант цепочку AR.
- - - Добавлено - - -
А в процентном соотношении у населения больше Квантов или СЭМЗов? Судя по тестам на форуме, Квантов больше.
- - - Добавлено - - -
Растактовка чтения и записи ОЗУ ЦП:
https://pic.maxiol.com/images2/15974...2434844.01.png
Чтение из ОЗУ ЦП:
Описание:
Чтение из ОЗУ ЦП начинается по переднему фронту SYNC, а вовсе не по DIN, как в случае с ПП. После установки SYNC идет ожидание первого свободного слота памяти ЦП (все слоты памяти ЦП четные). В нашем примере первый свободный слот начинается в такте 8. Также необходимо, чтобы до начала свободного слота был установлен DIN. В связи с этим, более точные графики можно будет составить зная точную растактовку ВМ2.
Чтение из ОЗУ всегда словное:
Такт 8 - на шину A0..A7 выводится младшая часть адреса.
Такт 9 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса).
Такт 9.5 - на шину A0..A7 выводится старшая часть адреса.
Такт 10 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса). После чего ОЗУ выставляет на шину данных D0..D15 значение из памяти.
Такт 11.5 - снимается сигнал RAS.
Такт 12 - Шина A0..A7 освобождается, снимается сигнал CAS, устанавливается сигнал RPLY, по которому процессор считывает данные с шины AD, и снимает сигнал DIN. Посе чего сигнал RPLY снимается, и шина AD освобождается.
Замечания:
1. Чтение из ОЗУ инициируется фронтом сигнала SYNC, а не сигналом DIN. Однако, к моменту предоставления свободного слота памяти сигнал DIN тоже должен быть установлен. В противном случае, на шине AD будет высокоимпедансное состояние.
2. При чтении напрямую из ОЗУ, на адресную шину выставляется адрес сдвинутый вправо. При этом старший бит адреса A15 = 0.
3. При чтении через регистр планов 1 и 2, на адресную шину выставляется содержимое регистра адреса планов PLANE_ADR.
Запись в ОЗУ ЦП:
Описание:
Запись в ОЗУ ЦП начинается по DOUT. После установки DOUT идет ожидание первого свободного слота памяти ЦП (все слоты памяти ЦП четные). В нашем примере первый свободный слот начинается в такте 8.
Такт 8 - на шину A0..A7 выводится младшая часть адреса.
Такт 8.5 - на шину D0..D15 выводятся данные.
Такт 9 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса).
Такт 9.5 - на шину A0..A7 выводится старшая часть адреса, устанавливается сигнал WE.
Такт 10 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса). После чего ОЗУ выставляет на шину данных D0..D15 значение из памяти.
Такт 11.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Такт 12 - Шины A0..A7 и D0..D15 освобождаются, снимается сигналы CAS и WE, устанавливается сигнал RPLY. В ответ на сигнал RPLY, процессор снимает сигнал DOUT.
Отличие записи байта от записи слова:
Если запись идет по четному адресу, то блокируется генерация CAS1.
Если запись идет по нечетному адресу, то блокируется генерация CAS0.
Если запись идет через регистровый механизм, то запись по адресу 176642, запишет младший байт в ОЗУ, а запись по адресу 176643 запишет старший байт в ОЗУ.
Замечания:
1. При записи напрямую в ОЗУ, на адресную шину выставляется адрес сдвинутый вправо. При этом старший бит адреса A15 = 0.
2. При записи через регистр планов 1 и 2, на адресную шину выставляется содержимое регистра адреса планов PLANE_ADR.
Свои тесты пока не писал. А вот что нашел со штатной ПЗУ.
https://pic.maxiol.com/thumbs2/15974...word177716.png
https://pic.maxiol.com/thumbs2/15974...byte000446.png
https://pic.maxiol.com/thumbs2/15974...byte177010.png
https://pic.maxiol.com/thumbs2/15974...byte177014.png
https://pic.maxiol.com/thumbs2/15974...byte177716.png
https://pic.maxiol.com/thumbs2/15974...word177010.png
Добавил сюда описание записи слова в ОЗУ ЦП.
Замечу, что запись слова, и запись байта отличается. Чем - опишу позже.
- - - Добавлено - - -
Кроме того, отдельного рассмотрения требует запись и чтение в режиме ST.
Судя по всему, это потенциальный источник глюков, т.к. цикл доступа к памяти может оборваться на середине, из-за того, что RPLY выставляется сразу после DIN/DOUT.
- - - Добавлено - - -
Итак, о записи байта в ОЗУ ЦП.
Естественное отличие от записи слова:
Если запись идет по четному адресу, то блокируется генерация CAS1.
Если запись идет по нечетному адресу, то блокируется генерация CAS0.
Неестественное отличие от записи слова:
Запись начинается по сигналу DOUT, а не по SYNC. Что правильно и хорошо.
Ну и, наконец, если запись идет через регистровый механизм, то запись по адресу 176642, запишет младший байт в ОЗУ, а запись по адресу 176643 запишет старший байт в ОЗУ.
- - - Добавлено - - -
Чтение и запись слова начинаются по SYNC.
Запись байта начинается по DOUT.
Никаких предсказаний нет, просто такой вот 'кривой' контроллер)
- - - Добавлено - - -
Хотя, можно условно назвать это предсказанием. Я об этом не задумывался изначально. Но даже если так, оно все равно какое-то кривое.
Ynicky, в стандартном ПЗУ по данным адресам никакой записи байтов нет. К тому же почему-то сигнал WTBT выставляется перед неактивным SYNC. Может таким образом процессор сигнализирует, что будет операция записи?
- - - Добавлено - - -
Что-то я ничего не понял в этой фразе? Titus, а можете расшифровать поподробнее.
А всё таки блок предсказаний есть. Действительно ТО надо не только смотреть, но и читать. На листе 16 прямо написано: "Вывод 19. WTBT. Выход информационного комбинированного сигнала "запись-байт". Во время выдачи адреса в цикле процедуры обмена по системной магистрали низкий уровень сигнала на этом выводе свидетельствует о том, что осуществляется процедура записи. Во время выдачи данных низкий уровень сигнала на этом выводе свидетельствует о том, что выдается не слово, а байт.". Лист 50: "В процедуре записи в фазе выдачи адреса сигнал WTBT выдается низким уровнем".
Вообще-то - это давно известно, на ВМ3 точно так же.
И подозреваю, что это будет справедливо (сигнал о том, что будет ЗАПИСЬ, во время выдачи адреса и SYNC) для QBUS в принципе.
Память упорно подсказывает, что такое упреждающее уведомление о предстоящей записи сделано с прицелом на типы памяти (вроде как на ферритах), у которых особая любовь к чтению (насколько я помню, в ферритовой памяти чтение разрушает данные и их надо восстановить) - то есть идёт уведомление, что даже если было только что чтение (цикл чтение-изменение-запись), то данные восстанавливать не надо - ибо будет запись в ту же ячейку. Но. Это мои предположения :)
А обычно на него и реагируют только при записи (DOUT) байта.
Хотя, конечно, мысль интересная - после приёма адреса быстрее шинные драйвера переключать, если будет НЕ ЗАПИСЬ.
Интересный тогда еще вопрос. Почему по диаграммам @Ynicky сигнал DOUT выдается через 5 тактов после SYNC (или 4 такта после окончания WTBT). Тогда как при записи DIN выдается через такт после SYNC.
- - - Добавлено - - -
В общем, внесу коррекцию в описание.
Процедура записи чтения, как есть по SYNC, а процедура записи будет по DOUT. Что байтовая, что словная.
Видимо, это сделано именно потому, что в случае записи интервал между SYNC и DOUT слишком большой, и нельзя начинать писать настолько заранее, т.к. в этот промежуток может влезть целый слот памяти. А в случае с чтением можно начинать сразу по SYNC, т.к. DIN воспоследует уже через один такт. Это на такт ускоряет процесс чтения.
- - - Добавлено - - -
Обновил 1515ХМ2-003.
- Оптимизированна схема для более легкого понимания
- Исправлены неточности
p.s.: Особое внимание требуют RS-триггеры, которые при оптимизации могут превратиться в мину замедленного действия, связанную с тем, что прямой и инверсный выход RS-триггера неравнозначны. Если на прямом выходе 0, это еще не значит, что на инверсном будет 1. И наоборот. Это связано с тем, что вход R имеет приоритет на прямом выходе, а вход S на инверсном. Или говоря проще - если на R и S установлены единицы, то и прямой выход, и инверсный будут в 0.
Поэтому при оптимизации нельзя просто так перебрасывать сигнал с инверсного выход на прямой, или же убирать один из выходов, если в схеме используются два.
В данном реверсе я допустил подобную ошибку в схеме установки RPLY, но исправил ее. И проверил все остальные RS-триггеры в схеме.
Посмотрел схему ХМ2-001, и заметил, что при чтении данных, сами данные на шину AD выставляются одновременно с сигналом RPLY. Не опасно ли для ВМ2 это делать одновременно? Или же ВМ2 не сразу защелкивает данные с шины по сигналу RPLY, а чуть с задержкой, чтобы данные успели устаканиться?
nRPLY должен поступать после активации nDIN/nDOUT, если nRPLY поступит даже мгновенно после этих стробов, то минимум проходит целый такт пока процессор защелкивает nRPLY внутри (rply0) и вырабатывает внутренний строб записи данных (bus_wq) с шины nAD во внутренний латч. Поэтому данные легко могут быть выставленны не то что одновременно с RPLY, но и до такта задержаться (а то и до двух - как повезет с соотношением RPLY с фазой F1). Стандарт МПИ, кстати, допускает выставление RPLY до данных - 200нс, как раз примерно один внутренний такт ВМ2 при внешней частоте 10МГц.
http://www.1801bm1.com/files/images/dia_vm2_rply.png
Описал все 4 БМК в первом приближении.
Написал простую тестовую программу проверки начальной инициализации ЦП.
Промоделировал. ACLO и DCLO на ЦП устанавливается как надо и процессор стартует с адреса о160000.
Но сигнал /RPLY не завершается. Может что-то не так с REPLY LOGIC в ХМ2-003?
https://pic.maxiol.com/thumbs2/15976...word160000.png
Нашел у себя ошибку.
https://pic.maxiol.com/thumbs2/15976...ord1600002.png
Видеовыход как будешь моделировать и получать картинку?
- - - Добавлено - - -
Я, кстати, все еще проверяю и оптимизирую реверсы, и порой нахожу неточности. Вернее, неточностей почти нет. Только изредка в RS-триггерах, т.к., как я уже писал выше, это мина замедленного действия после оптимизации, если их точно не проверить. Вот сейчас и проверяю.
Вторая (первая по времени в цикле Q-bus/МПИ) функция сигнала К БАЙТ Н (WTBT) - то, что низкий уровень на этой линии в адресной части цикла сообщает, что это будет цикл записи, ИМХО, это рудимент тех времен, когда память была чем-то, отличающимся от микроэлектронных схем. Например, ферритовой. Там, возможно, знание о том, чем будет этот цикл - записью или чтением - позволяло выиграть некоторое время и часть действий выполнить еще не получив адрес, или в процессе получения адреса.
Да не особенно оно ускорит - ведь RPLY выдают, обычно, сразу по приходу DIN, а данные можно выставить и заметно позже этого DIN'а...
JFYI, в проекте ReVerSE-U16 есть реализация HDMI:
https://github.com/mvvproject/ReVerS.../u16_hdmi_test
В одном проектов внутри видел зачатки передачи audio в hdml.
Есть кое-какие собственные наработки по VGA контроллеру.
А преобразователь из VGA в HDMI взял из ссылки выше от @.yu.zxpk.
Но там 60 Гц кадровая развертка.
https://zx-pk.ru/threads/30578-bk001kh-na-fpga.html
https://zx-pk.ru/threads/31292-16-ts...10/page11.html
Также есть телевизоры с VGA и HDMI входами. На вход VGA подаю с реальной УКНЦ.
https://zx-pk.ru/threads/25871-adapt...?highlight=vga
Работает от 50 Гц. Будет ли работать от HDMI на 50 Гц - не знаю. Но у меня основная плата с FPGA - Марсоход3 с HDMI выходом. На других моих FPGA платах нет разъемов VGA и HDMI. Так что для них придется городить нашлепки с разъемами.
А есть ли в природе проекты, где HDMI генерится микроконтроллером, а не FPGA? Пусть даже очень быстрым микроконтроллером.
- - - Добавлено - - -
Ускоряет, т.к. DOUT выдается с задержкой относительно SYNC. А если ориентироваться по WTBT, то можно заметно ускорить процесс записи. Да и чтения тоже.
По поводу чтения согласен. Т.к. этот процесс идёт в фазе выдачи адреса, то адрес известен. Соответственно адрес используется и контроллер ОЗУ по сигналу арбитра формирует адрес для RAS/CAS и запоминает прочитанные данные в буферном регистре. А потом этот буферный регистр выставляется на шину по сигналу DIN. Здесь немного ускорить можно, тем более в магистрали ЦП память твёрдо стоит на двух ногах. А вот с записью сложнее. Сначала от того же процессора надо получить записываемые данные по DOUT, а уж потом выставлять для ОЗУ адрес по RAS/CAS.
Записи? И что ты запишешь раньше DOUT'а? Кто, кроме DOUT'а даст гарантию, что на МПИ уже данные, а не адрес или "звон" после переключения? Для справки, с учетом разбега сигналов по корзине, из 200 нс между SYNC'ом и DOUT'ом, адрес гарантировано держится 25 нс после SYNC'а, а данные гарантировано появляются за 25 нс до DOUT'а. Остальные 150 нс - неопределенность, вполне вероятен звон и разное время добегания тех или иных битов по корзинке, где-то может быть еще бит адреса, а куда-то уже добежал бит данных
Где? DIN выдается через 200 нс после SYNC, RPLY надо выдавать в ответ на DIN, а данные можно выставить еще позже - до 125 нс Чем тут поможет знание в момент SYNC'а, что через 200 нс прилетит DIN ?
Да, это все относится к классической МПИ в корзинке - если делать свой процессор на FPGA "по мотивам" какого-то оригинального, то можно и МПИ похоронить, как это сделал коллега Vslav в своих последних синтезах, и все сделать по-своему, но к МПИ это не будет иметь никакого отношения.
В общем, коллеги, читайте документ 3.858.382 ТО "Центральный процессор М2", он рулез!
Не надо забывать, что чтобы что-то записать или прочитать, нам надо получить ближайший свободный слот памяти. Установился SYNC, и мы уже можем забронировать ближайший слот, который, может быть наступит в следующем такте. Тогда как если мы для бронирования слота будем ждать DIN или DOUT, этот слот убежит, и придется ждать следующий.
- - - Добавлено - - -
Запись не происходит сразу по DOUT. Сначала контроллер памяти занимает свободный слот памяти, затем выдает на шину адреса строки и столбца, и уже затем записывает или читает данные.