В этом примере показано, как достичь желаемой числовой точности при преобразовании кода MATLAB ® с фиксированной точкой в код с плавающей точкой с помощью статического анализа области значений, который помогает вычислить производные диапазоны переменных из проектов.
Рабочий процесс преобразования из плавающей запятой в фиксированную запятую в HDL- Coder™ включает следующие шаги:
Проверьте совместимость проекта с плавающей точкой для генерации кода.
Вычислите фиксированные точки на основе симуляции теста.
Сгенерируйте считываемый и отслеживаемый код MATLAB ® с фиксированной точкой.
Проверьте сгенерированный проект с фиксированной точкой.
Однако фиксированные точки, предложенные в симуляции, зависят от качества теста. Иногда трудно записать пробирки, которые полностью покрывают пути проекта, представляющие полные области значений проектирования всех переменных. Рабочий процесс, основанный на статическом анализе, может использоваться в таких случаях, чтобы вычислить производные области значений от проекта областей значений.
В этом руководстве используется симметричный конечная импульсная характеристика, выходной сигнал которого интегрирован с течением времени.
Код MATLAB, используемый в этом примере, реализует простой фильтр Калмана. Этот пример также содержит тестовый набор MATLAB, который выполняет фильтр.
design_name = 'mlhdlc_dti'; testbench_name = 'mlhdlc_dti_tb';
MATLAB Проекта: mlhdlc_dti
Тестовый набор MATLAB: 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 Coder см. в разделе «Начало работы с MATLAB в HDL».
Перед переходом к шагу предложения по типу с фиксированной точкой выполните следующие задачи:
Нажмите кнопку 'Workflow Advisor', чтобы запустить HDL Workflow Advisor.
Выберите 'Преобразовать в фиксированную точку во время сборки' для опции 'Преобразование с фиксированной точкой'.
Нажмите кнопку ' Запуск', чтобы определить типы входа для проекта из теста.
Выберите шаг рабочего процесса 'Преобразование фиксированной точки'.
Нажмите 'Analyze', чтобы выполнить инструментальную симуляцию с плавающей точкой.
Более полное руководство по этим шагам см. в разделе Преобразовании из плавающей запятой в фиксированную запятую.
После завершения инструментальной симуляции с плавающей точкой, вы увидите 'Предлагаемые типы с фиксированной точкой' на основе результатов симуляции.
На этом шаге фиксированные точки для каждой переменной в проекте на основе записанных значений min/max переменных с плавающей точкой и пользовательского ввода.
Наблюдайте область значений симуляции переменной 'is _ clipped' в функции 'mlhdlc _ dti'. Вы заметите, что область значений симуляции этой переменной является постоянным значением 0. Однако, если вы можете наблюдать код, чтобы увидеть, что переменная может принимать значения от -1 до -1.
Области значений для переменной могут быть фиксированы путем обновления теста. Однако может быть желательно вычислить области значений посредством статического анализа.
На этом шаге можно задать области значений проекта и вычислить производные области значений с помощью статического анализа. Включите производный анализ области значений, установив флажок 'analyze ranges using derived range analysis' в меню кнопки 'Analyze'. Затем инструмент предложит вам задать проект областей значений для переменных входов в столбцах 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');