Комментарии 41
Аплодисменты. Спасибо, неважно насколько это актуально. Сам рассказ очень интересен.
Годнота!
Снимаю виртуальную шляпу!
Интересно, а если заменить эмулированную память на что-то времен создания процессора, насколько и куда поменяются результаты. Что-бы прямо по хардкору все было на той элементной базе.
Результат не поменяется - операции с памятью синхронные. Вот 8008 уже имеет READY пин для ожидания когда медленная память сможет выполнить операцию в/в. Но 4004/4040 читают шину данных в следующий такт после передачи адреса. У меня, кстати, есть плата для 4040 с достаточным количеством памяти, но мне было интересно ещё и поработать над железной частью.
Понятно, спасибо!
Всегда когда читал историю процессоров, 4004 казался какой-то малополезной штукой, практически концептом нормального процессора, а оказывается что это не совсем так.
В мемуарах Федерико Фаджина (который проектировал 4004) упоминается, что руководство Intel в те года в целом считало микропроцессоры какой-то малополезной штукой, которая в лучшем случае поможет поднять продажи памяти. И только после того как Фаджин ушёл от них и создал Zilog, зарабатывающий только на процессорах, они спохватились. Возможно Федерико лукавит, ведь борьбу с Intel он проиграл, да и в целом процессоры (хоть и не микро) к тому моменту были уже массовым явлением с понятной областью применения.
Ну, он действительно выглядел очень бледно, даже на фоне тогда уже существующего железа, поэтому вполне возможно что и руководство Intel не заметило тогда перспектив и наверстывать начали когда поняли, что тема очень перспективная. Примеров похожих много было, те-же IBM, неслабо облажались со своей РС, из-за того что на старте считали его чем-то проходным и не особо важным.
Похоже тогда с волновым сопротивлением дорожек не заморачивались, как сейчас это делают.
Частоты не те. 740 килогерц, не мегагерц.
Кроме частот это электромагнитные помехи. Возможно требования были ниже, сейчас обязательная сертификация по излучению. Схема работает стабильно, но по шуму может на порядок нормы превышать, пока плату не переделают полностью, иногда переходят с 2 слоёв на 4 или 8 только для этого. Чтобы помех не было, можно с другой стороны зайти сгладить фронт импульса на выходе микросхемы du/dt, но вряд ли с этим заморачивались. Как я понимаю микросхемы старались максимально быстро, насколько выходной каскад позволяет переключить состояние (косвенный признак конденсатор над каждой микросхемой, чтобы питание не просаживалось при переключении). А слабые и медленные транзисторы на выходе косвенно помогали снизить помехи и наводки от переключений. Тут можно исследовать вопрос по старым микросхемам, просто осциллографом посмотреть сигналы на выходе. В современных микроконтроллерах например есть быстрый и медленный режим для переключения ног, 2 МГц и 50 МГц (частота условно как я понимаю, тут речь о сглаживании фронта импульса, будет он пологий в 100 нс или максимально крутой в 5 нс).
Вот небольшой пример с оциллографа - SYNC / CM_ROM сигналы генерировались i4004, ph1/ph2 - современным stm32 (ну как современным, 10+ лет уже ему).
Интересно, даже у i4004 переключения жесткие. Только CM-ROM затянут по спаду, возможно на выходе резистор с небольшим сопротивлением к +5В есть, что замедляет переключение.
Если там 5-10 нс переключения плата может шуметь больше, чем современные платы с частотами процессоров в гигагерцы из-за особенностей разводки печатной платы.
Шутка что ли такая, супер-медленная PMOS логика, работающая от -15 вольт, с трудом вытягивающая мегагерц, какие нафиг du/dt :)
Это логические элементы медленные. А переключение состояния на выходе быстрое, SYNC за 10 нс примерно состояние меняет. Этого достаточно чтобы на не оптимизированной плате шуметь эпически в эфир и на соседние дорожки иглами напряжения (спектр до гигагерца). Другое дело что медленная логика на них не отреагирует (на краткие помехи наносекундные), как и норм по помехам тоже не было особых.
Вообще говоря, экранированный корпус в те времена - норма жизни.
Отчего же, приходилось.
У нас из-за плохой разводки платы микроконтроллеры на i8035 с частотой 2 МГц (это отбраковка i8048, без внутренней памяти- для народного хозяйства, 8048 нам были запрещены...) просто не стартовали. Выход, правда, нашелся простой- подкинуть емкостишку в несколько pF между шин питания прямо на плате. Хотя и разводку делал завод-изготовитель из Минска, оборонпром...
А наша продукция была "не для стрельбы"- вязальные машины :)
Интересно. Я совсем не шарю в схемотехнике, но чтоб такого избежать, просто стараюсь следовать двум правилам: 1) держать дорожки подальше друг от друга, даже если возможности технологии изготовления ПП позволяют расстояние в 0.2мм и 2) вешать развязывающие кондеры рядом с пинами питания на всех IC.
Есть у меня в планах взять что-нибудь из MCS-48, так что посмотрим не постигнет ли меня фейл)
2) верно
1) Чуть сложнее всё. Дорожки без земли рядом превращаются в передающие и приемные антенны. В том числе сами на себя наводящие сигнал. Тут простыми словами про идеальную разводку на основе распределения электромагнитного поля в пространстве. Но плата в статье сделана по простому и тоже всё работает и производитель профессионал. Хотя и автор ролика говорит что тоже сначала делали по простому и только сертификация по помехам заставила делать нормально всё. Платы работали, но очень шумели в эфир. Между дорожками может и возникали помехи, сигнал наведенный от соседней дорожки, но к приходу следующего такта процессора всё "успокаивалось".
Так можно осциллографом сигнал в длинной линии RS232 RS485 посмотреть, выглядит хаотично и искаженно, с выбросами и провалами из-за отраженного сигнала, емкости линии. Но в момент считывания сигнал принимает нужное значение чуть выше или ниже порога логического уровня и ошибок нет.
Уточнение. На плате ребята "развели" тактирующий кварц на далеко от процессора, к нему дорожки пустили параллельными шинами через всю плату. Из-за наводок проц просто не стартовал. Кстати, если коснуться пальцем этих шин, стартовал. Помню, ребята наладчики в цеху "взорвались", когда я деланно сообщил, что "все класс, все рабо" и незавметно щелкнул пальцем по шинам- контроллер стартовал... потом вместе посмеялись)))
Хабр торт.
Переходы только в тот же банк памяти это жесть, конечно. И сколько времени прошло пока додумались указывать не адрес, а смещение. Даже в 8080 все ещё был адрес. А вообще я не осилил весь текст), но вы слегка затронули мою ностальгию, повспоминал как боролся за уменьшение и тактов и байтов... Это было похоже на решение головоломок
Если кто-то всё ещё не понимает, зачем программисту математика - то вот зачем.
Или как вариант, пример того зачем математику уметь программировать )
Что-бы считать Pi на 4004? :)))
Не, респект автору, все круто, но откровенно говоря рядовому программисту очень редко реально оказывается нужен весь этот "матан", даже когда нужна какая-то очень жесткая оптимизация, то обычно оптимизируют алгоритм, без погружения в особо сложную и крутую математику. Но знать все это не помешает, конечно, особенно если приходится что-то писать в таком духе.
Математика нужна, чтобы просто знать о существовании ряда алгоритмов / формул. Не обязательно даже понимать как они работают. Скажем, попалась тебе задача, и ты уже можешь прикинуть как её решать наиболее оптимально. Для многих прикладных задач существуют лучшие практики их решений, но нужно уметь увидеть то, что конкретная проблема в абстрактной форме ложится на известный алгоритм.
PS: само собой, всё это не нужно чтобы перегонять JSON'ы из одного формата в другой, паралельно реализуя CRUD. Но, к примеру, при разработке распределенных систем "матан" уже встречается не так уж и редко.
Да я и не топлю против математики, она полезна во многих смыслах, но, к сожалению, не так уж часто в обычной практике встречаются задачи, где она нужна, какая-то сложная.
Просто это именно то, чем различаются собственно "программист" и "кодерок". Но их почему-то постоянно путают, вот и создается иллюзия, что "математика не нужна".
Никакого хейта или обесценивания, просто дежурное напоминание, что это действительно разные профессии.
Иногда требуется минимальное знание математики, а его у нет у претендентов на вакансию. Для разработки игры искали сотрудника и претенденты не могли найти расстояние между двумя точками на плоскости. Типа оценить в зоне досягаемости ли цель. То есть просто теорему Пифагора применить.
Читаешь, задержав дыхание! Побольше бы таких статей, а не "как я вошёл в айти".
Отличная работа! Дает представление, чем занимались программисты "Вояджеров".
Ничего не понял дальше вступления. Очень круто. Пишите еще!
Безумству храбрых поем мы песню! Ухх... У меня аж привста.. Восторг, чистый восторг!
Отличная работа и ее описание. Спасибо, снимаю шляпу. А у нас есть потребность по еще бОльшей оптимизации тока потребления наших самых маленьких в мире диктофонов Edic-mini www.telesys.ru Хотим сделать их еще меньше. Может есть желание поучаствовать?
Magnum Opus, не иначе. Ещё не дочитал, но в лютом восторге. Спасибо вам за такую классную статью!
Скажите пожалуйста, а можно ли мыло поднять частоту, скажем, до одного мегагерца? Можно ли было разогнать процессор?
Моё предположение, что ограничения по частоте шли не столько от самого процессора, как от переферии. У меня был резервный план - попробовать разогнать i4040, если бы не получилось решить задачу только программно. Однако отмечу, что эмулятор памяти на stm32f4, написанный на C (O3, gcc), уже с трудом справлялся с 740кГц. Скорее всего, я сумел бы написать более эффективный код эмулятора, который поддерживает более высокую частоту, но до этого дело не дошло.
Ничего себе! Вот это чтиво! Люблю подобные низкоуровневые штуки. В них - настоящая красота программирования. Автору - огромное уважение
Ускоряем программу для 50-летнего процессора на 180000%