- PVSM.RU - https://www.pvsm.ru -
Я прочитал статью о позиционном кодировании (one-hot), которое работает быстрее для конечных автоматов.
Я сделал генераторы всех базовых арифметических и логических команд для любой разрядности, но оказалось, что я получу преимущество только если буду использовать логические элементы с транзисторами, спроектированные на другой уровень FO(Fan Out, не FO-4).
Но получил самый быстрый способ реализовать любую 2-4-битную функцию. (последовательный сумматор, работающий так же быстро, как сумматор с опережением переноса). Так что я создал селектор :)
Ну, это разочаровывает. Вся информация о дешифраторах адресов памяти выглядит так:
Ссылка 1 [1]
(Демультиплексор NOR с N транзисторами на строку на N бит адреса, FanOut - M/2, где M - количество линий)
Ссылка 2 [2]
(Демультиплексор NAND с N транзисторами на строку на N бит адреса, FanOut - M/2, где M - количество линий)
Ссылка 3 [3]
(Что называется Еще хуже, "мы сделали предекодинг и уменьшили нагрузку до 64 затворов на линию")
И все в таком духе.
По сути, более 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).
Забавный пример — на хранение результата сложения может уйти больше энергии, чем на сложение. Вот почему каждый институт из топ-50 имеет свою собственную исследовательскую программу топологической сортировки и маппинга операций для FPGA). (С «выдающимися результатами, которые лучше, чем у любого ОБОРУДОВАНИЯ СЕГОДНЯ», конечно). И почти полное отсутствие арифметических блоков «AddMulJmpe» на частоте 1–2 ГГц. (За исключением MantiCore(ethz) и некоторых команд ARM, но, согласно публикациям, это скорее Волшебство (также известное как дерево шин 8 Тбит/с), чем парадигма Compute More Store Less)
Как и в случае с методом глобальной оптимизации, который лучше, чем в Matlab [4], результаты синтеза можно посмотреть здесь [5].
Результаты включает в себя синтез на 130 nm, обзор характеристик для различных параметров синтеза, а так же общие сводки с результатами.
1) MantiCore - ethz
2) Изображение - https://www.elprocus.com/different-types-of-demultiplexers/ [6]
3) Синтез - OpenLane
Автор:
ValeriyPus
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssd/384617
Ссылки в тексте:
[1] Ссылка 1: https://www.ques10.com/p/36431/what-are-various-decoders-used-in-memory-structure/#:~:text=The%20row%20and%20column%20decoders,raising%20its%20voltage%20to%20VOH
[2] Ссылка 2: https://people.engr.tamu.edu/rgutier/lectures/mbsd/mbsd_l16.pdf
[3] Ссылка 3: https://www.ece.ucdavis.edu/~bbaas/281/notes/Handout.verilog6.pdf
[4] методом глобальной оптимизации, который лучше, чем в Matlab: https://habr.com/ru/articles/720592/
[5] здесь: https://github.com/ValeriyAndreevichPushkarev/Selector_16_bit
[6] https://www.elprocus.com/different-types-of-demultiplexers/: https://www.elprocus.com/different-types-of-demultiplexers/
[7] Источник: https://habr.com/ru/articles/733990/?utm_source=habrahabr&utm_medium=rss&utm_campaign=733990
Нажмите здесь для печати.