В этом примере показано, как вычислить гиперболическую касательную данного набора данных реального значения с помощью аппаратного эффективного кода MATLAB ®, встроенного в модели Simulink ®. Модель, используемая в этом примере, подходит для генерации кода HDL для фиксированных входов. Алгоритм использует архитектуру, которая разделяет вычислительные блоки и блоки памяти на различных этапах, что полезно при развертывании на устройствах FPGA или ASIC с ограниченными ресурсами. Таким образом, эта реализация имеет меньшую пропускную способность, чем полностью конвейерная реализация, но она также имеет меньший отпечаток на кристалле, что делает ее подходящей для конструкций, учитывающих ресурсы.
Гиперболическая касательная функция является гиперболическим аналогом круговой функции и определяется как отношение гиперболической синусоидальной и гиперболической косинусных функций для данного угла .
cosh (α)
CORDIC является акронимом для COordinate Rotation DIgital Computer и может использоваться для эффективного вычисления многих тригонометрических и гиперболических функций. Подробное описание алгоритма CORDIC и его применения при вычислении тригонометрической функции см. в разделе Вычисление синуса и косинуса с помощью ядра вращения CORDIC.
Блок Hyperbolic Tangent HDL Optimized поддерживает генерацию кода HDL для данных с фиксированной точкой с двоичным масштабированием. Он разработан с учетом этого приложения и использует аппаратную семантику и оптимизацию. Одной из таких оптимизаций является совместное использование ресурсов.
При развертывании сложных алгоритмов на устройствах FPGA или ASIC часто существует компромисс между использованием ресурсов и общей пропускной способностью для данного вычисления. Полностью конвейерные и параллельные алгоритмы имеют наибольшую пропускную способность, но они часто слишком ресурсоемки для развертывания на реальных устройствах. Реализуя логику планирования вокруг одной или нескольких основных вычислительных схем, можно повторно использовать ресурсы на протяжении всего вычисления. Результатом является реализация с гораздо меньшей площадью за счет снижения общей пропускной способности. Это часто приемлемый компромисс, поскольку проекты с общим ресурсом все еще могут соответствовать общим требованиям к задержкам.
Все ключевые вычислительные единицы в блоке оптимизации гиперболической касательной ЛПВП используются повторно в течение всего жизненного цикла вычислений. Это включает в себя не только схемы CORDIC, используемые для выполнения вращений Гивенса, но также сумматоры и умножители, используемые для обновления углов. Это экономит ресурсы DSP и фабрики при развертывании на устройствах FPGA или ASIC.
Для моделирования поддерживаются одно-, двух-, двоично-точечные масштабированные с фиксированной точкой и двоично-точечные масштабированные-двойные типы данных. Однако для генерации кода HDL поддерживаются только типы данных с фиксированными точками, масштабированные по двоичным точкам.
Блок оптимизации гиперболической касательной HDL принимает данные, когда ready выходной сигнал является высоким, указывая, что блок готов начать новое вычисление. Для отправки входных данных в блок, validIn сигнал должен быть подтвержден. Если блок успешно зарегистрирует входное значение, он отменит 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, создается для хранения вычисленного значения для каждого ввода.
Постройте график ошибки вычисления, сравнив выходные данные блока оптимизации гиперболической касательной HDL с выходными данными блока MATLAB ®tanh функция.
figure(1); plot(tanhInput, tanhOutput - tanh(tanhInput')); xlabel('x'); ylabel('error');
