Реализуйте HDL оптимизированный модуль постоянным

В этом примере показано, как использовать блок Modulo by Constant HDL Optimized.

Операция с модулем,

$Y\ = \ X\ mod\ D\ = X - \lfloor \frac{X}{D} \rfloor \times D$

важный базовый блок для многих математических алгоритмов. Однако эта формула для$X\ mod\ D$ в вычислительном отношении неэффективна для фиксированной точки и целочисленных входных параметров. Много встраиваемых процессоров испытывают недостаток в инструкциях для целочисленного деления. Те, которые действительно сделали, чтобы они потребовали, чтобы много тактов вычислили ответ. Деление также неэффективно в коммерчески доступном FPGAs, арифметические схемы которого спроектированы для эффективного умножения, сложения и вычитания. Наконец, для операций с модулем фиксированной точки, это затрудняет, чтобы оптимизировать размер слова внутренних типов данных, используемых для вычисления, потому что операция деления неограниченна, даже для маленьких-wordlength входных параметров.

Знаменатель в проблеме по модулю является постоянным временем компиляции, таким образом, блок может вычислить настеленное пол деление при помощи умножения, сопровождаемого броском. Перезапись операции деления как

$\frac{X}{D} = X \times \frac{1}{D}$

показывает это. Константа$1/D$ вычисляется к точности, необходимой, чтобы обеспечить и точность и вычислительный КПД. Состав исполнителей, который следует, отбрасывает любые дробные биты, который является эффективной операцией на обоих микропроцессорах и FPGAs.

Следующий пример показывает, как использовать блок Modulo by Constant HDL Optimized, чтобы выполнить эту операцию и обеспечивает демонстрационную статистику использования ресурсов и эффективности.

Как использовать модуль постоянным HDL оптимизированный блок

Блок Modulo by Constant HDL Optimized вычисляет операцию с модулем с помощью общей стратегии, описанной выше. Блок требует, чтобы вы задали параметр Знаменателя как показано ниже.

Блок показывают ниже, когда Знаменатель установлен в 10. Значок блока отображает и математическое выражение для операции с модулем и задержку блока.

От значения Знаменателя и типа данных X, блок может вычислить все необходимые константы и типы данных. Поскольку это спроектировано для развертывания FPGA, это использует управляющие сигналы validIn и validOut указать когда X и Y допустимы. Кроме того, это симулирует с той же задержкой как сгенерированный HDL-код.

Чтобы использовать блок, сначала создайте входные данные фиксированной точки. Формат, показанный ниже, является потребляемым блоком From Workspace.

>> X.time = (0:1:200).';
>> X.signals.values = fi(0:0.125:25,0,18,2).';
>> X.signals.dimensions = 1;

Используя тот же формат, создайте булев validIn сигнализируйте что переключатели от лжи до истины неоднократно.

>> validIn.time = (0:1:200).';
>> validIn.signals.values = [false; repmat([true false]', 100, 1)];
>> validIn.signals.dimensions = 1;

Чтобы закончить настраивать данные для проблемы, установите D равняйтесь постоянному знаменателю, чтобы использовать для операции с модулем.

>> D = 10;

Откройте модель.

>> open_system('modulo_by_constant_block_example')

DUT_FXP подсистема вычисляет$X\ mod\ D$ для входных параметров фиксированной точки с помощью блока Modulo by Constant HDL Optimized.

DUT_FLT подсистема вычисляет$X\ mod\ D$ использование блока Math Function с набором Параметра функции к mod. Поскольку mod Simulink операция только поддерживает и целочисленные входные параметры с плавающей точкой, входные данные брошен к одинарной точности прежде чем быть введенным с блоком Math Function. Это дополнительно добавляет в задержке, чтобы совпадать с задержкой DUT_FXP подсистема.

Compare and Plot подсистема строит все выходные параметры и вычисляет различие между расчетом фиксированной точки и идеалом с плавающей точкой.

Симулируйте модель и исследуйте осциллограф, чтобы сравнить фиксированную точку и результаты с плавающей точкой.

>> sim('modulo_by_constant_block_example')

Результаты Модуля Постоянным HDL блоки Оптимизированной и Математической функции соглашаются точно как график ниже показов. Обратите внимание на то, что этот график отображает задержку в системе, когда существует задержка между запуском симуляции и в первый раз validOut идет высоко.

Сгенерируйте HDL-код

Если у вас есть лицензия HDL Coder, можно сгенерировать и развернуть HDL-код для DUT_FXP подсистема как показано ниже.

>> makehdl('modulo_by_constant_block_example/DUT_FXP');

Реализованная статистика HDL

Демонстрационные статистические данные для использования ресурсов на устройстве Xilinx® Virtex®-7 XC7VX485 FFG1157-1 показывают ниже. Реализованный проект может запуститься в большем, чем 500 МГц на этом устройстве.

       Resources       Usage
    _______________    _____

    LUT                 33  
    LUTRAM              8   
    Slice Registers     57  
    DSP48               1   

Для просмотра документации необходимо авторизоваться на сайте