Этот пример демонстрирует, как вычислить гиперболическую касательную данного набора с действительным знаком данных с помощью эффективного оборудованием кода MATLAB®, встроенного в модели Simulink®. Модель, используемая в этом примере, подходит для генерации HDL-кода для входных параметров фиксированной точки. Алгоритм использует архитектуру, которая совместно использует вычислительные и блоки памяти через различные шаги, который выгоден при развертывании для FPGA или устройств ASIC с ограниченными ресурсами. Эта реализация таким образом имеет меньшую пропускную способность, чем полностью конвейерная реализация, но она также имеет меньшее место на чипе, делая его подходящим для сознательных ресурс проектов.
Гиперболическая функция тангенса является гиперболическим аналогом проспекта функция, и задана как отношение гиперболического синуса и гиперболических косинусных функций для данного угла .
CORDIC является акронимом для Координатного Компьютера Вращения и может использоваться, чтобы эффективно вычислить много тригонометрических и гиперболических функций. Для подробного объяснения алгоритма CORDIC и его приложения в вычислении тригонометрической функции, смотрите, Вычисляют Синус и Косинус Используя Ядро Вращения CORDIC.
Блок Hyperbolic Tangent HDL Optimized поддерживает генерацию HDL-кода для данных фиксированной точки с масштабированием двоичной точки. Это спроектировано с этим приложением в памяти и использует оборудование определенная семантика и оптимизация. Одна из этой оптимизации является разделением ресурсов.
При развертывании сложных алгоритмов в FPGA или устройства ASIC, часто существует компромисс между использованием ресурсов и общей пропускной способностью для данного расчета. Полностью конвейерные и параллелизированные алгоритмы имеют самую большую пропускную способность, но они являются часто слишком интенсивно использующими ресурсы, чтобы развернуться на физических устройствах. Путем реализации планирования логики вокруг одной или нескольких базовых вычислительных схем возможно снова использовать ресурсы в течение расчета. Результатом является реализация с намного меньшим местом, за счет уменьшаемой общей пропускной способности. Это часто - приемлемый компромисс, когда совместно использованные проекты ресурса могут все еще удовлетворить полные требования задержки.
Все ключевые вычислительные модули в блоке Hyperbolic Tangent HDL Optimized снова используются в жизненном цикле расчета. Это включает не, только схема CORDIC раньше выполняла вращения Givens, но также и сумматоры и множители, используемые для обновления углов. Это сохраняет и DSP и ресурсы матрицы при развертывании к устройствам ASIC или FPGA.
Одна, дважды, двоичная точка масштабировала фиксированную точку, и двоичная точка масштабировалась дважды, типы данных поддерживаются для симуляции. Однако только двоичная точка масштабировалась, типы данных с фиксированной точкой поддерживаются для генерации 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');