С чего все началось

Я прочитал статью о позиционном кодировании (one-hot), которое работает быстрее для конечных автоматов.

Я сделал генераторы всех базовых арифметических и логических команд для любой разрядности, но оказалось, что я получу преимущество только если буду использовать логические элементы с транзисторами, спроектированные на другой уровень FO(Fan Out, не FO-4).

Но получил самый быстрый способ реализовать любую 2-4-битную функцию. (последовательный сумматор, работающий так же быстро, как сумматор с опережением переноса). Так что я создал селектор :)

Декодеры адресов DRAM/SSD и что о них можно прочитать

Ну, это разочаровывает. Вся информация о дешифраторах адресов памяти выглядит так:

  1. Ссылка 1

    (Демультиплексор NOR с N транзисторами на строку на N бит адреса, FanOut - M/2, где M - количество линий)

  2. Ссылка 2

    (Демультиплексор NAND с N транзисторами на строку на N бит адреса, FanOut - M/2, где M - количество линий)

  3. Ссылка 3

    (Что называется Еще хуже, "мы сделали предекодинг и уменьшили нагрузку до 64 затворов на линию")

Типичный демультиплексор (декодер адреса) (вариант для 2-х бит, не 4 и не 8 :) )
Типичный демультиплексор (декодер адреса) (вариант для 2-х бит, не 4 и не 8 :) )

И все в таком духе.

По сути, более 4–10 затворов на одной линии — плохая практика. Затворы ячеек DRAM, "Висящие в воздухе" и затворы транзисторов, подключенных к питанию\земле очень сильно различаются по уровню емкостной нагрузки на линию (в общем, при переходе от FO-4 к FO-64 задержку нужно увеличить в 16 раз, или уже 16 задержек FO-4 и это только на 256 линий (не 65536)). Так же следует учесть что некоторые транзисторы могут просто не поддерживать высокие емкостные нагрузки (из-за дополнительно выделяемого тепла при переходных процессах).

Поэтому я ограничился двумя транзисторами на строку для любой разрядности адреса.

Как?

Все просто: бинарное дерево с разветвлением 4 или 16, где каждый селектор включает только один селектор после себя и транслирует оставшийся адрес к нему.

Но прежде всего нам нужно преобразовать наш бинарный адрес в One-hot(унарную позиционную) кодировку.

После этого мы просто пишем дерево селекторов.

Почему это сработало?

Вместо энкодеров строк NOR и NAND мы получаем постоянный коэффициент ветвления (4 или 16) и низкую емкостную нагрузку.

Также мы получаем низкую логическую глубину в селекторе.

И в результате мы получаем возмутительно высокую скорость (сравнимую со скоростью сумматора со сквозным переносом с той же разрядностью). И низкое энергопотребление (около 40 переключений транзисторов для 16 бит)

Кроме того, мы получаем только 1–2 транзистора на строку для любой разрядности адреса (!).

Как я могу сравнить это с тем что есть?

Задержка в 13 FO-4 для 16-тибитного селектора(65536 линий), или меньше чем в ucdavis 16 FO-4 (256 линий).

Это около 20 ps на 7 nm для 16 bit (65k lanes) или около 40 ps для селектора строк и столбцов (32-битное адресное пространство). Или более 5 ГГц. Плюс переходные процессы в линиях и так далее.

В любом случае, это намного быстрее, чем селекторы NOR/NAND, и потребляет меньше энергии (переключение около 40 транзисторов; чтобы получить 1 Вт, нужно переключать около 5 миллионов транзисторов на частоте 1 ГГц на 32 nm).

Добавил сравнение с самым быстрым селектором 8-bit из ucdavis. В случае с равной скоростью получаю на 20% меньшую площадь, что само по себе различимый результат.

Забавный пример — на хранение результата сложения может уйти больше энергии, чем на сложение. Вот почему каждый институт из топ-50 имеет свою собственную исследовательскую программу топологической сортировки и маппинга операций для FPGA). (С «выдающимися результатами, которые лучше, чем у любого ОБОРУДОВАНИЯ СЕГОДНЯ», конечно). И почти полное отсутствие арифметических блоков «AddMulJmpe» на частоте 1–2 ГГц. (За исключением MantiCore(ethz) и некоторых команд ARM, но, согласно публикациям, это скорее Волшебство (также известное как дерево шин 8 Тбит/с), чем парадигма Compute More Store Less)

Где я могу посмотреть результаты?

Как и в случае с методом глобальной оптимизации, который лучше, чем в Matlab, результаты синтеза можно посмотреть здесь.

Результаты включает в себя синтез на 130 nm, обзор характеристик для различных параметров синтеза, а так же общие сводки с результатами.

Использованные материалы

1) MantiCore - ethz

2) Изображение - https://www.elprocus.com/different-types-of-demultiplexers/

3) Синтез - OpenLane

Комментарии (3)