В этом примере показано, как достичь требуемой числовой точности при преобразовании кода MATLAB ® с фиксированной запятой в код с плавающей запятой с помощью статического анализа диапазона, который помогает вычислять производные диапазоны переменных из проектных диапазонов.
Поток операций преобразования с плавающей запятой в фиксированную в Coder™ HDL включает в себя следующие шаги:
Убедитесь, что конструкция с плавающей запятой совместима с созданием кода.
Вычислять типы фиксированных точек на основе моделирования testbench.
Создание читаемого и отслеживаемого кода MATLAB ® с фиксированной точкой.
Проверьте созданную конструкцию с фиксированной точкой.
Однако типы фиксированных точек, предложенные при моделировании, зависят от качества испытательных стендов. Иногда трудно записать тестбенчи, которые полностью покрывают пути конструкции, представляющие полные проектные диапазоны всех переменных. Рабочий процесс на основе статического анализа может использоваться в таких случаях для вычисления производных диапазонов из проектных диапазонов.
В данном учебном пособии используется симметричный фильтр FIR, выходной сигнал которого интегрируется с течением времени.
Код MATLAB, используемый в этом примере, реализует простой фильтр Калмана. В этом примере также содержится тестовое средство MATLAB, выполняющее фильтр.
design_name = 'mlhdlc_dti'; testbench_name = 'mlhdlc_dti_tb';
Проектирование MATLAB: mlhdlc_dti
MATLAB testbench: mlhdlc_dti_tb
Выполните следующие строки кода, чтобы скопировать необходимые файлы примеров во временную папку.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_flt2fix_dmm']; % create a temporary folder and copy the MATLAB files cd(tempdir); [~, ~, ~] = rmdir(mlhdlc_temp_dir, 's'); mkdir(mlhdlc_temp_dir); cd(mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);
Перед созданием кода смоделируйте проект с помощью средства тестирования, чтобы убедиться в отсутствии ошибок во время выполнения.
mlhdlc_dti_tb

Для создания нового проекта введите следующую команду:
coder -hdlcoder -new flt2fix_project_dmm
Затем добавьте файл «mlhdlc _ dti.m» в проект в качестве функции MATLAB и «mlhdlc _ dti _ tb.m» в качестве испытательного стенда MATLAB.
Для получения более полного руководства по созданию и заполнению проектов кодера MATLAB HDL см. раздел Начало работы с MATLAB в Workflow-процессе HDL.
Перед переходом к шагу предложения типа с фиксированной точкой выполните следующие задачи:
Нажмите кнопку «Помощник по рабочим процессам», чтобы запустить помощник по рабочим процессам HDL.
Выберите «Преобразовать в фиксированную точку во время построения» для параметра «Преобразование фиксированной точки».
Нажмите кнопку «Run» (Выполнить), чтобы определить типы входных данных для проекта из испытательного стенда.
Выберите шаг рабочего процесса «Преобразование фиксированных точек».
Нажмите кнопку «Анализ», чтобы выполнить инструментальное моделирование с плавающей запятой.
Дополнительные сведения об этих шагах см. в разделе Преобразование с плавающей точкой на фиксированную.
После того как инструментальное моделирование с плавающей запятой завершится, на основе результатов моделирования будет показано предложение типов фиксированных точек.
На этом этапе типы с фиксированной запятой для каждой переменной в конструкции на основе записанных значений min/max переменных с плавающей запятой и пользовательского ввода.
Просмотрите диапазон моделирования переменной «is _ clipped» в функции «mlhdlc _ dti». Следует заметить, что диапазон моделирования этой переменной является постоянным значением 0. Однако, если вы можете наблюдать код, чтобы увидеть, что переменная может принимать значения от -1 до -1.
Диапазоны для переменной можно зафиксировать путем обновления testbench. Однако может быть желательно вычислить программные диапазоны посредством статического анализа.
На этом шаге можно задать проектные диапазоны и вычислить производные диапазоны с помощью статического анализа. Включите анализ производных диапазонов, установив флажок «анализировать диапазоны с помощью анализа производных диапазонов» в меню кнопки «Анализировать». Затем инструмент предложит задать проектные диапазоны для входных переменных в столбцах Статический минимум (Static Min) и Статический максимум (Static Max).

Существует несколько способов ввода проектных диапазонов.
Можно вручную отредактировать записи «Static Min» и «Static Max» в таблице и указать диапазоны проектирования.
Можно скопировать Sim Min и Sim Max для переменной, щелкнув правой кнопкой мыши ячейку таблицы (или)
Можно заблокировать или указать тип вывода, который будет использоваться в качестве диапазона проектирования

После указания всех необходимых диапазонов проектирования можно нажать кнопку «Analyze» (Анализ), чтобы использовать анализ производных диапазонов.

Обратите внимание, что производный диапазон переменной теперь включает значения, принятые во всех путях потока управления.
Иногда определения диапазонов только для входных переменных может быть недостаточно для определенных конструкций. Например, в конструкции MATLAB, реализующей счетчик с использованием постоянной переменной, диапазон переменной зависит от количества вызовов конструкции. В таких ситуациях вы увидите вычисленные производные статические диапазоны для переменной, сообщаемой как -Inf или + Inf. Когда появятся эти неточные диапазоны, рассмотрите возможность указания диапазонов для таких постоянных переменных.
Выполните следующие команды для очистки временной папки проекта.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_flt2fix']; clear mex; cd (mlhdlc_demo_dir); rmdir(mlhdlc_temp_dir, 's');