Category: компьютеры

"Не дождётесь!" (с)

В прошлые выходные у меня сгорел компьютер.
Я имею в виду, буквально сгорел - с пиротехникой, громкими хлопками и дымом. В комнате до сих пор воняет гарью.

Не очень старый и вроде бы неплохой (на момент покупки) блок питания Corsair CX750 утянул с собой в могилу материнку (ASrock 990FX Extreme3), проц (FX 8350) и память (4 планки HyperX DDR3 по 4 гига).
Видюха и винты, как ни странно, выжили - чему я очень рад.

В итоге всего этого ужаса и нескольких дней мучительного ожидания и тестов на совместимость*, я разжился Ryzen 2500X на материнке Gigabyte B450M DS3H ажно с 32 гигами DDR4, рубящими байты на умопомрачительных (хоть и не рекордных) 2666 мегагерцах.

Тихий кулер (называется "be quiet! Pure Rock Slim"), новый блок питания (Chieftec Navitas GPM-750S).

Сейчас думаю, что делать с системой - W7 ругается на слишком новый проц, мол, "не будем вам секьюрити!" - а W10 сцыкотно.

Заодно и та проблема отпала.
---

* Если вдруг надумаете собирать систему с памятью DDR4 - не только AMD, у Intel ровно те же проблемы - обязательно штудируйте список совместимости для вашей материнской платы. Производители выкладывают на странице продукта документы под названием QVL-чего-то-там, в них -- перечни гарантированно совместимого и работоспособного оборудования. Я обжёгся на этом два раза, пришлось подбирать память по этому списку, сравнивая partnumberы со складом магазина. Совместимые нашлись и даже недорого, но их расхватывают со страшной скоростью (типа, если утром их на складе более 50 штук, то вечером может уже и не быть совсем!).

Если покупаете память, которой нет в списке совместимости, то это лотерея. Может заработать сразу, может не заработать вообще, может работать только в двух слотах из четырёх имеющихся и т.п.

Хоть DDR4 и стандарт, но технология уже превращается в магию -- поэтому "всё стандартное, всё правильно, но вместе ваще не работает!!!" это дело обычное.

Как найти причину периодических тормозов компа?

Всё работает нормально, но время от времени, с периодом в несколько минут какая-то хрень жёстко грузит систему так, что даже звук хрипит.
Потом отпускает и всё нормально до следующего раза.
В списке задач не видно ничего подозрительного.
Антивирус ничего не нашёл, утилита для удаления malware ничего не нашла, сервисы понаотключал уже.
Короче, как поймать злодейский фактор?
Какой-нибудь профайлер не для софта, а для системы в целом существует - чтобы поглядеть, что именно так грузит хотя бы?
Никаких грузящих программ на фоне вроде не запущено, диски новые, система (W7) обновлена по последнему слову техники.

worklog: побайтовый доступ к 32-битной памяти

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

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

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

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

worklog: заказал платы регистров

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

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

worklog: двоичный компаратор - работает!

Это просто великолепно, несмотря даже на то, что в плате оснастки дефект (то ли металлизации в переходнике нет, то ли одно из двух -- нет контакта в одном сигнале; решил пробросом навесного проводка прям внутрь платы компаратора). Всё равно этот блок буду переделывать, чтобы добавить проверку платы CSR, заодно и закажу в более надёжном месте*.

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

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

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

----

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

worklog: сдвиготрон заработал

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

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

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

worklog: арифметико-логический ломтик

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

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