Я реализовал блок в FPGA, который поддерживает аппаратное умножение. Этот блок выполняет некоторое разделение, практически не используя логических элементов, потому что он может использовать некоторый внутренний DSP.
Этот блок приходится портировать на другой дизайн, а здесь у меня на 2к меньше логических элементов и нет аппаратного множителя.
Я думал реализовать это деление с помощью таблицы поиска в памяти просто потому, что у меня есть 60 кбит, но мне трудно найти правильный способ сделать это. Вот что мне нужно сделать:
Разделите числа от 62720 до 65279 на 20, используя очень мало логических элементов. Я получаю только 128 различных результатов после округления чисел, поэтому таблица не должна быть такой тяжелой, но проблема для меня состоит в том, чтобы удалить все похожие результаты и по-прежнему использовать таблицу для поиска результата для точного деления.
Первые записи таблицы выглядят так:
62720/20 = 3136
62721/20 = 3136
62722/20 = 3136
62723/20 = 3136
62724/20 = 3136
62725/20 = 3136
62726/20 = 3136
62727/20 = 3136
62728/20 = 3136
62729/20 = 3136
62730/20 = 3137
62731/20 = 3137
62732/20 = 3137
62733/20 = 3137
62734/20 = 3137
62735/20 = 3137
62736/20 = 3137
62737/20 = 3137
62738/20 = 3137
62739/20 = 3137
62740/20 = 3137
62741/20 = 3137
62742/20 = 3137
62743/20 = 3137
62744/20 = 3137
62745/20 = 3137
62746/20 = 3137
62747/20 = 3137
62748/20 = 3137
62749/20 = 3137
62750/20 = 3138
62751/20 = 3138
62752/20 = 3138
62753/20 = 3138
62754/20 = 3138
62755/20 = 3138
...
Для каждого результата у меня есть 20 похожих, кроме первых 3136, которые дают мне только 10 похожих результатов. Была мысль написать пару строчек по этому шаблону, но никак не могу сообразить.
Пожалуйста, поделитесь со мной своими мыслями по этому поводу. Это не обязательно должно быть полное решение, просто некоторые входные данные, потому что я застрял :) Спасибо.