?

Log in

No account? Create an account
 

kincajou — компьютеры — ЖЖ

About Уничтожить всех уродов

Прыгунчик 28 авг, 2019 @ 14:47
Я так понимаю, произошло невозможное?
Ждём комментариев главных диванных экспертов по компьютерной графике, теории реактивного движения и баллистике.

worklog: регистры приехали 15 авг, 2019 @ 10:54
ЙААААЗЬ!!Свернуть )

worklog: побайтовый доступ к 32-битной памяти 3 авг, 2019 @ 04:27
А как, собсно, это работает? У чипов SDRAM, насколько мне известно, нет возможности записывать только часть битов*. У некоторых широких SRAM, наоборот, есть (например, 16-битная шина и два отдельных строба, типа BH и BL). Как же это сделать? Считать полностью слово, заменить байт, записать обратно? Bus turn-around - это же ммммммееееддленнно

* Или я всё понял неправильно и "data masking" (сигналы типа DQML/DQMH в терминологии Micron) это оно и есть?

[подумав] Да, похоже на то, что я недоглядел - сигналы DQM в самом деле нужны для этого (но не только). При записи они управляют блокировкой, собсно, записи - если строб установлен в 1, запись в указанном канале НЕ осуществляется. Нушож, это хорошо.

Значит, внешняя шина будет из 32 бит данных, 32 бит адреса, стробов rd/wr и индикатора размера данных (байт/полуслово/слово). И где-то там, уже снаружи процессора, будет хитрый контроллер SDRAM... который уже придётся делать на ПЛИС, наверное. Но, мобыть, и нет.

worklog: невыровненный доступ и конечный автомат 31 июл, 2019 @ 06:54
Т.к. я хочу соорудить процессор, способный работать ещё и со сжатыми командами, тоСвернуть )

worklog: заказал платы регистров 11 июл, 2019 @ 08:05
Пять плат всего, но сборку заказал только двух, ибо недешёвое удовольствие - сама сборка как бы бесплатная, но детальки-то производство всё равно закупает и в итоге 128 недорогих микросхем (32 регистра по 4 микросхемы в каждом) превращается почти в сотню баксов на каждую из собранных плат.

И вроде как жаба душит, но собирать эти платы вручную я точно не хочу :)

worklog: двоичный компаратор - работает! 3 июл, 2019 @ 08:38
Это просто великолепно, несмотря даже на то, что в плате оснастки дефект (то ли металлизации в переходнике нет, то ли одно из двух -- нет контакта в одном сигнале; решил пробросом навесного проводка прям внутрь платы компаратора). Всё равно этот блок буду переделывать, чтобы добавить проверку платы CSR, заодно и закажу в более надёжном месте*.

Операции EQ, NEQ, LT, GE, ULE, UGE (равно, не равно, меньше, больше или равно, беззнаковое меньше, беззнаковое больше или равно; всё это нужно для условных переходов) фунциклируют как надо; флаги TRUE/FALSE выдаются; константы для инструкций SLT/SLTU формируется.

Вообще сравнение можно было бы сделать и на арифметике, но я решил, что так будет проще - два разных отдельных блока могут работать одновременно, например, чтобы вычислять условные переходы: компаратор сравнивает регистры, а арифметика в этот момент вычисляет предполагаемый адрес. Если сравнение не сработало, вычисленное значение просто отбрасывается, а если сработало - загружается в Program Counter. Поэтому отдельный флажок COND_TRUE очень даже нужен и полезен.

Отступать некуда - надо собирать АЛУ, а потом ещё блок регистров общего назначения; затем дешифратор команд (с поддержкой сжатых инструкций, так уж и быть); program counter с костылями для branch prediction; блоки выборки памяти инструкций и данных; блок форвардинга и ожидания; прочую мелочь...

----

* у китайцев, с электротестом. Этот экземпляр я заказал в Дефолт-Сити и пожадничал на электротест - вот мне и урок: экономия пары сотен рублей (или сколько он там стоит, я не помню) оборачивается бессонной ночью и бессильными злобными матюками в никуда.

worklog: сдвиготрон заработал 1 июл, 2019 @ 21:33
60 микросхем буферов, из которых собран монстрический пятистадийный 32-разрядный мультиплексор. Каждый чип - 20 контактов.
4 логических чипа, на которых сделана логика переключения, по 14 пинов на каждый.
Итого 1256 контактов... и ОДИН непропай - оттуда и вылезал этот неуловимый Джо.

Джо пойман и пропаян. Сдвиготрон фигачит направо-налево, логические и арифметические сдвиги. Задержка выход-выход всего около 25 нс, если я правильно промерял. Это должно быть пять раз по Tpropagation, а документация обещает 4 нс типичное значение; плюс ещё задержка на меди. По порядку величины очень даже сошлось.

Прям-таки гора с плеч. Итого, первый кусок будущего мегадивайса -- собран!

worklog: арифметико-логический ломтик 1 июл, 2019 @ 06:38
ALU slice, то бишь.
При помощи свежесобранного анализатора погонял по операциям: работает! Суммирование/вычитание, AND/OR/XOR -- всё как надо.

Теперь надо собраться с силами и собрать ещё три "ломтика", поставить их на объединяющую плату со схемой переноса и подумать над тем, как правильно проверить 32-битную арифметику. Если 8-битную можно просто прогнать по всем возможным значениям, то тут такой прямолинейный подход точно не годится, ибо Вселенная распадётся и погаснет раньше, чем закончится перебор.

worklog: двоичный компаратор - платы приехали 26 июн, 2019 @ 20:20
И ещё обновлённые платки для логического анализатора - начать надо с него.
Плюс ещё оснастка для тестирования, чтобы не на "соплях" всё подключать, а нормальными шлейфами удобной длины.
И у меня даже все детальки уже есть.
Завтра начну собирать.

А как нормально запущу анализатор, там и до сдвигателя доберусь - я ведь до сих пор не знаю, почему у него глючит старший разряд.

После компаратора - сборка АЛУ. Один слайс уже готов и проверен, осталось сделать ещё три. Обновлённая плата со схемой быстрого переноса тоже есть и ждёт своей очереди.

После сборки и проверки можно будет считать, что блок EXECUTE готов на 75% (остаётся ещё модуль CSR, с ним придётся повозиться).

worklog: блок управления форвардингом 7 июн, 2019 @ 16:21
Блок работает внутри стадии Decode (Fetch - Decode - Execute - Memory - Writeback).

эскизСвернуть )

Нужен для проброса данных "против течения" конвейера - когда блоку вычислений понадобятся результаты работы следующих стадий, ещё не успевшие осесть в регистрах, то их надо выдёргивать прямо с промежуточных участков. Для этого должны выполниться определённые условия:
1) если надо читать из регистра с тем же индексом, в который писала предыдущая или пред-предыдущая операция (находящиеся, соотв., на стадиях Execute или Memory),..
2) и это не регистр ZERO (потому что в него выбрасываются данные, которые надо забыть; читается всегда ноль)

Если предыдущая операция была загрузкой из памяти и при этом ещё выполнились два предыдущих условия, тогда конвейер надо придержать (STALL) на минимум 1 щелчок. Пред-предыдущая загрузка из памяти задержку по-умолчанию не требует (если память успела их предоставить за 1 такт, конечно же).

Соотв., при выполнении этих условий включается мультиплексор на входе стадии E, который либо копирует данные с её же выхода (но с предыдущего такта), либо с выхода стадии M (т.е. с пред-предыдущего такта). При этом у стадии E приоритет над M, потому что если обе этих стадии нацеливают запись в один и тот же регистр, то запись из E всё равно сотрёт данные от M. Запись в регистры общего назначения не имеет побочных эффектов, поэтому перезаписанные данные не важны - важно только текущее значение.

В финальной схеме, управляющей обоими каналами RS1 и RS2, сигнал LOAD_STALL формируется как (DE_RS1 OR DE_RS2) AND E_IS_LOAD: вне зависимости от того, в какой канал надо положить данные, задержка нужна одна и та же.
Other entries
» worklog: двоичный компаратор
оптимизировал схемуСвернуть )
» Могу скромно заявить, что ST прислушалось к моим советам ;)
Пару лет назад у них был конкурс на закрытом форуме (туда пригласили несколько десятков человек с открытого форума) на "лучшее предложение по развитию линейки STM32". Призов, правда, никаких не обещали, но.. я тогда предложил таки влезть в нишу более мощных процессоров, подняться выше Cortex-M и сделать многоядерный чип, на котором можно было бы запускать индустриальный линукс.

И вот надо же....
Поприветствуем!
STM32MP1:
    Dual Cortex®-A7 cores running at 650 MHz
        32-Kbyte L1 Instruction cache
        32-Kbyte L1 Data cache
        256-Kbyte Level 2 cache

    Cortex®-M4 core running at 209 MHz
        a single-precision floating point unit (FPU)
        a full set of digital signal processor (DSP) instructions
        memory protection unit for enhanced application security

Память DDR3, все дела.
Я уже знаю, на чём сделаю свою следующую микроконтроллерную платку ;)
надо будет таки обзавестись средствами надёжной пайки BGA

И самое главное - обещанный 10-летний срок поддержки выпуска.
» Об экстраполяциях.
Вот нам говорят - в прошлом компьютеры были ламповыми. Мол, первый программируемый компьютер универсального назначения, ENIAC, был создан в 40ых годах прошлого века, состоял из примерно 18 тысяч ламп (не считая прочих деталей) и потреблял почти 180 киловатт. Потом кто-то утверждает, что компьютеров на лампах было много и какие-то были больше этого, какие-то меньше.

Но где они все сейчас? а? почему я не могу вбить в гугл "полный комплект схем лампового компьютера UNIVAC" и получить полный комплект схем лампового компьютера UNIVAC, а? Где оно всё? А? почему в магазинах не продаётся, почему их нигде нет*, почему они не применяются, раз они были такие хорошие и прогрессивные??

Так может, их и не было вовсе?



* в каких-то музеях есть, но это не счиатется, потому что поздняя подделка
» worklog: это успех
параллельно всем делам и без особой помпы я последовательно развиваю свой безнадёжный проект (пожалуй, пора задуматься о смене названия с "Союз" на "Сизиф", лол). Очередная итерация сладкой парочки синтез + смеситель, на этот раз я решил экспериментально убедиться в необходимости раздельного экранирования цифровой части синтеза и цифровой части смесителя коробочками из жести (именно этим было вызвано моё смутное беспокойство об "оловянных усах"). Ну и заодно проверить на практике идею про балансный безотражательный ФНЧ на выходе смеса.
Переразвёл платы.
Они обе подразумеваются для использования в паре - смес без синтеза работать не будет вообще, а синтез хоть и можно использовать для чего-то ещё, но само это устройство, в общем, совсем не универсальное (особенно если учесть, что я задизайнил его спецом под подключение к Awesome Board).
Разместил заказ на платы.
И тут внезапно письмо!
Congratulations!Свернуть )

Вах-вах. Я знаменит. Интересно, по какому критерию они выбирали...

И ещё наконец-то приехали платы моего адаптера LCD на замену китайчатины с SSD1963 - паять пока не буду, других дел дофига.
было-сталоСвернуть )
» worklog: STM32 LTDC, первые шаги.
Поделюсь скромными результатами экспериментов по запуску LCD контроллера, встроенного в STM32F746 и аналогичные ему чипы.
Итак,Свернуть )
» worklog: I2C в STM32F030 - почти победил.
Итак, всё дело было сразу в двух ошибкахСвернуть )

Судя по различиям, серия 030 появилась позже, чем 103 - работа с периферией сделана более продуманно, кмк. При всём уважении к почтенному 103, многие вещи в нём сделаны через жопу. Оно, конечно, работает, но осадочек постоянно какой-то есть.
» worklog: бодаюсь с I2C в STM32F030
вроде всё просто, но не работает. Запись в микроконтроллер я вроде освоил - жду событие "Adress match", смотрю на бит "DIR" и если он равен нулю - значит, кто-то хочет что-то нам прислать. Читаю байт и дальше уже более-менее тривиально - выдаю NACK, если не хочу больше данных или ACK, если хочу.. затем ведущее устройство генерирует состояние STOP и транзакция завершается.

А вот в обратную сторону - фиг. Приходит адрес, бит DIR равен единице - значит, кто-то хочет нас о чём-то спросить. Кладу байтик в регистр передатчика и ... всё. Процесс застывает, обе линии (SCL/SDA) застреваеют в нижнем состоянии. Причём, как я понимаю, тактирование для чтения должно выдавать ведующее устройство (иначе как бы можно было читать всякие там EEPROMы?), но почему-то это не происходит - я вижу только один байт (адрес) и после него тишина. Получение адреса автоматически ACKается, так что вряд ли в этом дело, но в чём?
Top of Page Разработано LiveJournal.com