В этом примере показано, как использовать интерфейс командной строки HDL Coder™ для генерации кода HDL из кода MATLAB ®, включая преобразование с плавающей запятой в фиксированную и создание файла программирования FPGA.
Создание кода HDL с помощью интерфейса командной строки включает следующие основные шаги:
Создать fixpt объект конфигурации кодера. (Необязательно)
Создание hdl объект конфигурации кодера.
Задайте параметры объекта конфигурации. (Необязательно)
Выполните команду codegen для создания кода.
Интерфейс командной строки кодера HDL может использовать два объекта конфигурации кодера с командой codegen. Дополнительное fixpt объект конфигурации кодера конфигурирует преобразование кода MATLAB с плавающей запятой в фиксированную. hdl объект конфигурации кодера конфигурирует параметры генерации кода HDL и программирования FPGA.
В этом примере мы рассмотрим различные способы настройки преобразования плавающей точки в фиксированную и создания кода.
В примере кода реализован интегратор дискретного времени и его испытательный стенд.
Выполните следующий код для копирования файлов стенда проектирования и тестирования во временную папку:
close all; design_name = 'mlhdlc_dti'; testbench_name = 'mlhdlc_dti_tb'; mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_dti']; 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);
Можно создать код HDL и преобразовать конструкцию из плавающей точки в фиксированную, используя настройки по умолчанию.
Вам нужно только ваше имя, mlhdlc_dtiи название испытательного стенда, mlhdlc_dti_tb:
close all; % Create a 'fixpt' config with default settings fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'mlhdlc_dti_tb'; % Create an 'hdl' config with default settings hdlcfg = coder.config('hdl'); %#ok<NASGU>
После настройки fixpt и hdl для выполнения преобразования с плавающей запятой в фиксированную и создания кода HDL выполните следующую команду codegen.
codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_dti
Если в проекте уже используются типы и функции фиксированных точек, преобразование фиксированных точек можно пропустить:
hdlcfg = coder.config('hdl'); % Create an 'hdl' config with default settings hdlcfg.TestBenchName = 'mlhdlc_dti_tb'; codegen -config hdlcfg mlhdlc_dti
В остальном этом примере описывается, как настроить создание кода с помощью hdl и fixpt объекты.
Для выполнения преобразования с плавающей запятой в фиксированную требуется fixpt объект config.
Создать fixpt и укажите имя тестового стенда:
close all; fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'mlhdlc_dti_tb';
Генератор кода может предлагать типы с фиксированной точкой на основе выбора длины слова или длины дроби. Эти два варианта являются взаимоисключающими.
Основывать предлагаемые типы на длине слова 24:
fixptcfg.DefaultWordLength = 24; fixptcfg.ProposeFractionLengthsForDefaultWordLength = true;
Кроме того, предлагаемые типы фиксированных точек можно основывать на длине дроби. Следующий код настраивает кодер для предложения типов на основе длины дроби 10:
fixptcfg.DefaultFractionLength = 10; fixptcfg.ProposeWordLengthsForDefaultFractionLength = true;
Генератор кода увеличивает диапазон данных моделирования, на основе которого создается предложение типа с фиксированной точкой, на процент запаса прочности. Например, запас прочности по умолчанию равен 4, что увеличивает диапазон данных моделирования, используемый для предложения типа с фиксированной точкой 4%.
Задайте для параметра SafetyMargin значение 10%:
fixptcfg.SafetyMargin = 10;
Генератор кода запускает тестовый стенд с конструкцией до и после преобразования с плавающей запятой в фиксированную. Можно включить ведение журнала данных моделирования для построения графика эффектов квантования новых типов данных с фиксированной точкой.
Включить ведение журнала данных в fixpt объект конфигурации:
fixptcfg.LogIOForComparisonPlotting = true;
Сконфигурируйте генератор кода для запуска отчета по предложениям типов после предложения типов с фиксированной точкой:
fixptcfg.LaunchNumericTypesReport = true;
Для создания кода необходимо создать hdl и задайте имя тестового стенда:
hdlcfg = coder.config('hdl'); hdlcfg.TestBenchName = 'mlhdlc_dti_tb';
Можно создать код VHDL или Verilog. Кодер HDL по умолчанию генерирует код VHDL. Чтобы создать код Verilog:
hdlcfg.TargetLanguage = 'Verilog';
Создайте тестовый стенд HDL на тестовом стенде MATLAB ®:
hdlcfg.GenerateHDLTestBench = true;
Если необходимо смоделировать созданный код HDL с помощью имитатора HDL, необходимо также создать тестовый стенд HDL.
Включите моделирование HDL и используйте симулятор ModelSim:
hdlcfg.SimulateGeneratedCode = true; hdlcfg.SimulationTool = 'ModelSim'; % or 'ISIM'
Файл программирования FPGA можно создать, если установлен инструмент синтеза. Включите синтез, укажите инструмент синтеза и укажите FPGA:
% Enable Synthesis. hdlcfg.SynthesizeGeneratedCode = true; % Configure Synthesis tool. hdlcfg.SynthesisTool = 'Xilinx ISE'; % or 'Altera Quartus II'; hdlcfg.SynthesisToolChipFamily = 'Virtex7'; hdlcfg.SynthesisToolDeviceName = 'xc7vh580t'; hdlcfg.SynthesisToolPackageName = 'hcg1155'; hdlcfg.SynthesisToolSpeedValue = '-2G';
Теперь, когда у вас есть ваш fixpt и hdl настроить объекты конфигурации, выполнить команду codegen для выполнения преобразования с плавающей запятой в фиксированную, создать код HDL и создать файл программирования FPGA:
codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_dti