176просмотров
46.3%от подписчиков
6 марта 2026 г.
📷 ФотоScore: 194
Всем привет, выложил пост на HN о разработке direct to silicon DLinear с 3.3ns задержки на 7nm техпроцессе. В итоге получилось clean LVS/DRC дизайн на 86k ячеек. Главной слабостью в такой компоновке, является вопрос синхронизации потоков на чипе, на Sky130 сигнал не успевает пройти расстояние от входной шины до сумматора за один такт(10ns), из за чего возникает setup slack в -7.88ns, что крайне критично при такой скорости вычислений. Для начала разберем исходную цепочку: Ввод -> Вычитание -> Умножитель -> 16-уровневое дерево сумматоров. В дальнейшем я разделил архитектуру на три этапа обработки: 1. Фиксация разложенного вектора 2. Выделение множителей(MAC), из за чего сигнал попадает в регистры сразу после умножения весов. 3. Суммирование Также я изменил структуру дерева суммараторов, а именно вместо последовательного сложения множителей, которое создает линейное увеличение задержки, я создаю простое двоичное дерево. В результате задержка упала до O(log2N), то есть для логического уровня с 64 входными значениями нужно только 6 логических уровней, вместо 64. Так же теперь OpenLane может динамически перемешать регистры(Buffer Re-pipelining) внутри дерева, чтобы сбалансировать нагрузку на каждый уровень. В процессе я нашел еще один вариант сокращения задержки, как известно в DLinear постоянно нужно вычислять значение скользящего среднего, но есть проблема, а именно в классическом процессоре для выполнения операции average = sum/64 требуется блок деления, но как известно, деление это крайне дорогая операция, что приводит к огромной задержке. Я поменял размер окна до 2^6, что позволило на кремнии заменить операцию деления, но простой сдвиг Битов(Wire shift), а это буквально не занимает 0 latency computing, так как по сути это просто перепайка проводов на 6 позиций вправо, а значит затраты: 0 ватт, 0 транзисторов 0ns задержки. Возвращаясь к вопросу синхронизации, даже после всех исправлений описанных выше, оставалась проблема, решение которой относиться больше к физике, чем к коду: сигнал - это заряд, которому нужно время, чтобы зарядить емкость затворов. В DLinear сигнал valid_in(или называйте его clock) должен одновременно подать команду 64-м умножителям. Один входной транзистор не может мгновенно подать ток на 64 входа, сигнал деградирует, из за чего сигнал приходит с задержкой(High Fan-out). Я настроил параметр SYNTH_MAX_FANOUT(изначально значение равно 10), теперь OpenLane получив сигнал превышения нагрузки, создает буферное дерево(Buffer Tree Synthesis), так же вставляются промежуточные указатели, которые каскадно размножают входной сигнал. Да, это увеличивает площадь чипа, но при этом гарантирует, что все 64 MAC блока получат сигнал в одно и тоже время. Вторая проблема, по некоторым причинам оказалась самой парадоксальной... Грубо говоря, сигнал доходит до цели слишком быстро. В pipeline данные должны зафиксироваться в триггере (Flip-flop) и ждать следующего такта. Но если длина маршрута между двумя регистрами слишком короткая, то данные могут попасть в регистр еще до того, как он успеет завершить процесс предыдущего такта, а это полностью рушить логику работы чипа. Вручную решение оказалось достаточно простым: в OpenLane существует инструмент OpenRoad, который анализирует такие маршруты, на каждом из них он вставляет пустой баффер(delay cell), которые не несут никакой логики, но могут задержать ток на пару сотен пикосекунд. В итоге у меня удалось получить hold stack >0, а это критично для стабильности в чипе. В таком случае логи OpenLane это выглядит просто как вставка сотен sky130_fd_sc_hd_buf_2 ячеек(наверное самое сложное здесь, это решать эту же задачу, но к примеру создавая свой MLIR диалект для компиляции графа вычислений в x/y формат на чипе) P.S На первом фото показана топология транзисторов на чипе из OpenLane, на втором показан wave analysis из Surfer, а на третьей показана логика цикла обработки данных, на примере обычных временных рядов. Вся hardware логика написана на Chisel(потому что писа
176
просмотров
4000
символов
Нет
эмодзи
Да
медиа

Другие посты @K_P_D_B

Все посты канала →
Всем привет, выложил пост на HN о разработке direct to silic — @K_P_D_B | PostSniper