Оптимизации АЛУ
Apr. 8th, 2019 12:37 pmПосле переписывания дорогих команд сборки, разборки и сдвига в многотактный вид и исправления нормализации вправо инвертированных мантисс (прибавлять младший бит инверсии можно по ходу нормализации, и в окончательном суммировании РМРу участвовать больше не нужно) всё стало гораздо компактнее:
Коммит будет сегодня вечером.
There are 31 levels of combinational cells
2-input LUTs: 309
3-input LUTs: 231
4-input LUTs: 228
5-input LUTs: 375
6-input LUTs: 726
Total LUT area: 1869
State : 204
(FF) : 204
CARRY4 : 132
DSP : 6
Коммит будет сегодня вечером.
no subject
Date: 2019-04-09 06:54 pm (UTC)no subject
Date: 2019-04-09 07:08 pm (UTC)no subject
Date: 2019-04-09 07:28 pm (UTC)no subject
Date: 2019-04-09 07:59 pm (UTC)На маленькой платке 7680 лутов с флипфлопами. Вроде мы укладываемся.
no subject
Date: 2019-04-09 08:28 pm (UTC)Вот наличие и цена Max10 (25 штук) в корпусе QFT144 на mouser.com в зависимости от количества логических элементов:
10M08 - $13.97
10M16 - $27.29
10M25 - $31.61
10M40 - $43.39
10M50 - $48.46
no subject
Date: 2019-04-09 07:50 pm (UTC)There are 10 levels of combinational cells
Total LUT area: 52
no subject
Date: 2019-04-09 08:01 pm (UTC)no subject
Date: 2019-04-09 08:06 pm (UTC)no subject
Date: 2019-04-10 04:58 am (UTC)no subject
Date: 2019-04-10 06:33 am (UTC)Но это в режиме, когда оптимизируется площадь. При оптимизации по критическому пути, то выходит 24 уровня, как ни крути.
В делении 10 уровней для сумматора мантисс, да те же 10 уровней в компараторе абсолютных значений мантисс, и еще чуть-чуть в мультиплексорах набегает.
no subject
Date: 2019-04-10 07:01 am (UTC)Скажем, четыре разряда на такт.
no subject
Date: 2019-04-10 08:12 am (UTC)no subject
Date: 2019-04-10 01:48 pm (UTC)no subject
Date: 2019-04-10 04:21 pm (UTC)no subject
Date: 2019-04-10 06:43 pm (UTC)Либо общая теория без привязки к FPGA или ASIC есть на примете.
no subject
Date: 2019-04-10 08:40 pm (UTC)Ещё вот это могу посоветовать, но она для более серьёзных случаев: https://www.amazon.com/Digital-Arithmetic-Kaufmann-Computer-Architecture/dp/1558607986/
no subject
Date: 2019-04-10 08:36 pm (UTC)Кстати, Altera не умеет синтезировать $countones().
no subject
Date: 2019-04-10 09:46 pm (UTC)wire [47:0] a_mux = (state == STATE_IDLE) ? a : acc;
Мой вариант - 2307 LUTs, 23 levels; твой - 2302 LUTs, 24 levels. Если твой вариант так исправить, становится 23 уровня, но 2319 LUTs. Разница - в нумерации состояний и их последовательности в операторе case; видимо, это артефакты синтеза для эмуляции, потому что он ради эквивалентности с софтверной симуляцией не переводит регистр состояния в 1-hot вид.
Synplicity для Spartan7 с максимумом оптимизации за разумное время (72 секунды) делает
Register bits not including I/Os: 312 of 14600 (2%)
Block Multipliers: 9 of 80 (11%)
Total LUTs: 2897 (19%)
И обещает частоту 121.6 MHz.
$countones в нашем случае пишется как
и с ней синтезируется в те же зайцы.
no subject
Date: 2019-04-10 10:25 pm (UTC)no subject
Date: 2019-04-10 11:41 pm (UTC)120 мегагерц это неплохо. Я надеялся получить в районе сотни.
Я поправлю a_mux как у тебя, и добавлю функцию countones().
no subject
Date: 2019-04-11 12:15 am (UTC)Не так глаз режет.
no subject
Date: 2019-04-11 01:47 am (UTC)Согласно Synplify, количество уровней CARRY4 практически не играет роли, потому что задержка по переносу чуть не на порядок меньше, чем задержка в лутах, особенно если они большие, и между лутами.
Текущий вариант (со ещё чуть-чуть оптимизированной арифметикой)
default (2781 LUTs):
SLOW_SHIFT (2310 LUTs):
Так что логика для 8 вариантов быстрого сдвига оказывается на критическом пути, который Synplify пытался раздербанить, потратил 470 лутов, но так успеха и не достиг.
no subject
Date: 2019-04-11 02:44 am (UTC)Мне кажется, ускорение сдвигов того стоит.
no subject
Date: 2019-04-11 04:25 am (UTC)Когда релизнем, вот будет детишкам развлечение анализировать производительность и оптимизировать! Можно даже какую-нибудь сумму денег в качестве призов не пожалеть за максимальную производительность на Whetstone, Dhrystone и пр. Жаль, что мы до 50-летия БЭСМ-6 это не придумали.
no subject
Date: 2019-04-11 05:52 pm (UTC)Теперь к 60-летию. :)
no subject
Date: 2019-04-11 06:50 pm (UTC)достигается при количестве тактов на (быстрые) сдвиги около 1%, что на невычислительной задаче вполне реально.
no subject
Date: 2019-04-11 06:56 pm (UTC)Глянем тест АУ, благо имеется файл трассировки. Всего выполнено 1178071 машинных команд, из них 78169 сдвигов. Это 6.6%, немало. Сдвиг вообще довольно популярная операция была, насколько мне подсказывает память и интуиция.
no subject
Date: 2019-04-11 07:00 pm (UTC)no subject
Date: 2019-04-11 07:49 pm (UTC)В каком-нибудь перемножении матриц на фортране сдвигов, считай, почти не было, но это не наш профиль. :)
С еще некоторыми оптимизациями в АУ, Synplify смог сделать, при запрошенных 140 МГц, 135.5 для быстрых сдвигов, и 139.8 для медленных.
no subject
Date: 2019-04-11 09:06 pm (UTC)https://www.intel.com/content/www/us/en/products/programmable/fpga/max-10.html
У Max10конфигурационная память прямо на основном кристалле, поэтому он несколько удобнее по жизни.
no subject
Date: 2019-04-12 01:42 am (UTC)no subject
Date: 2019-04-12 06:29 am (UTC)Размер логики:
Total combinational functions: 3290
Dedicated logic registers: 211
no subject
Date: 2019-04-12 08:19 am (UTC)