Реализуйте эффективную оборудованием гиперболическую касательную

Этот пример демонстрирует, как вычислить гиперболическую касательную данного набора с действительным знаком данных с помощью эффективного оборудованием кода MATLAB®, встроенного в модели Simulink®. Модель, используемая в этом примере, подходит для генерации HDL-кода для входных параметров фиксированной точки. Алгоритм использует архитектуру, которая совместно использует вычислительные и блоки памяти через различные шаги, который выгоден при развертывании для FPGA или устройств ASIC с ограниченными ресурсами. Эта реализация таким образом имеет меньшую пропускную способность, чем полностью конвейерная реализация, но она также имеет меньшее место на чипе, делая его подходящим для сознательных ресурс проектов.

Гиперболическая касательная

Гиперболическая функция тангенса является гиперболическим аналогом проспекта tan функция, и задана как отношение гиперболического синуса и гиперболических косинусных функций для данного угла α.

tanh(α)=sinh(α)cosh(α)

Алгоритм CORDIC

CORDIC является акронимом для Координатного Компьютера Вращения и может использоваться, чтобы эффективно вычислить много тригонометрических и гиперболических функций. Для подробного объяснения алгоритма CORDIC и его приложения в вычислении тригонометрической функции, смотрите, Вычисляют Синус и Косинус Используя Ядро Вращения CORDIC.

Оборудование эффективные расчеты фиксированной точки

Блок Hyperbolic Tangent HDL Optimized поддерживает генерацию HDL-кода для данных фиксированной точки с масштабированием двоичной точки. Это спроектировано с этим приложением в памяти и использует оборудование определенная семантика и оптимизация. Одна из этой оптимизации является разделением ресурсов.

При развертывании сложных алгоритмов в FPGA или устройства ASIC, часто существует компромисс между использованием ресурсов и общей пропускной способностью для данного расчета. Полностью конвейерные и параллелизированные алгоритмы имеют самую большую пропускную способность, но они являются часто слишком интенсивно использующими ресурсы, чтобы развернуться на физических устройствах. Путем реализации планирования логики вокруг одной или нескольких базовых вычислительных схем возможно снова использовать ресурсы в течение расчета. Результатом является реализация с намного меньшим местом, за счет уменьшаемой общей пропускной способности. Это часто - приемлемый компромисс, когда совместно использованные проекты ресурса могут все еще удовлетворить полные требования задержки.

Все ключевые вычислительные модули в блоке Hyperbolic Tangent HDL Optimized снова используются в жизненном цикле расчета. Это включает не, только схема CORDIC раньше выполняла вращения Givens, но также и сумматоры и множители, используемые для обновления углов. Это сохраняет и DSP и ресурсы матрицы при развертывании к устройствам ASIC или FPGA.

Поддерживаемые типы данных

Одна, дважды, двоичная точка масштабировала фиксированную точку, и двоичная точка масштабировалась дважды, типы данных поддерживаются для симуляции. Однако только двоичная точка масштабировалась, типы данных с фиксированной точкой поддерживаются для генерации HDL-кода.

Взаимодействие через интерфейс с гиперболическим HDL касательной оптимизированный блок

Блок Hyperbolic Tangent HDL Optimized принимает данные когда ready выход высок, указывая, что блок готов начать новый расчет. Отправить входные данные в блок, validIn сигнал должен утверждаться. Если блок успешно укажет входное значение, то это будет de-assert ready сигнал и пользователь должны затем ожидать, пока сигнал, как не утверждается, снова отправляет новый вход. Этот протокол получен в итоге в следующей схеме волны. Отметьте, как первый допустимый вход с блоком отбрасывается, потому что блок не был готов принять входные данные.

Когда блок закончит расчет и будет готов отправить выход, это будет утверждать validOut для одного такта. Затем ready будет утверждаться, указывая, что блок готов принять новое входное значение.

Симулируйте модель в качестве примера

Откройте модель в качестве примера путем ввода в командной строке:

mdl = 'fxpdemo_tanh';
open_system(mdl)

Модель содержит блок Hyperbolic Tangent HDL Optimized, соединенный с источником данных, который берет в массиве входных параметров и передает входное значение от массива до блока Hyperbolic Tangent HDL Optimized, когда это готово принять новый вход. Выход, вычисленный для каждого значения, хранится в переменной рабочей области. Симуляция завершает работу, когда все входные параметры были обработаны.

Задайте массив входных параметров, tanhInput. В данном примере входные параметры, удваивается.

tanhInput = -10:0.05:10;

Симулируйте модель.

sim(mdl);

Когда симуляция завершена, новая переменная рабочей области, tanhOutput, создается, чтобы содержать вычисленное значение для каждого входа.

Постройте Выход

Постройте ошибку вычисления путем сравнения выхода блока Hyperbolic Tangent HDL Optimized к тому из MATLAB® tanh функция.

figure(1);
plot(tanhInput, tanhOutput - tanh(tanhInput'));
xlabel('x');
ylabel('error');

Figure contains an axes. The axes contains an object of type line.