Генератор Verilog универсального прямого преобразователя для произвольных модулей

Выберите размерность входных данных (от 4 до 512 бит):
Введите набор модулей через пробел:
Размер блока разбиения:
Максимальное число этапов редукции:
Тип преобразователя:
Форсировать использование таблицы на последнем этапе преобразования:


Описание:
1) Подробное описание работы универсального прямого преобразователя
2) Результаты моделирования можно найти здесь: Результаты синтеза универсальных прямых преобразователей для простых модулей в пределах 8 бит.
3) поиск значения вычета основано на следующем подходе. Входное число X[bit:0] представляется в виде X[0]*20 + X[1]*21 +...+ X[bit]*2bit. Константы K[i] = ((2i)%module) предрасчитываются. Итоговая сумма SUM = K[0]*X[0] + K[1]*X[1] + ... + K[bit]*X[bit] не превосходит значение (bit*(module-1)). На следующем этапе анализируется в какой из промежутков вида (k*module, k*(module+1)) попадает значение суммы SUM. И из неё вычитается корректирующий коэффициент k*module. Количество анализируемых промежутков всегда строго меньше (bit+1).
4) В конвеерном варианте два вышеозначенных этапа разнесены на два разных этапа конвеера.
UPD 04.04.2016: Добавлены два параметра для комбинационного типа: "Размер блока разбиения" и "Максимальное число этапов редукции". В начальном варианте оба этих параметра были равны 1. Параметр "Размер блока разбиения" - контролирует количество бит по сколько мы разбиваем входное значение. Параметр "Максимальное число этапов редукции" - контролирует сколько раз делать редукцию прежде чем выбирать значение из диапазона. Важен при больших размерностях входных данных. Так же увеличено максимальное значение входных данных для устройства с 64 бит до 512 бит.
UPD 06.08.2018: Добавлен более эффективный метод генерации прямого преобразователя.


Main page