В этом примере показано, как использовать интерфейс командной строки HDL Coder™ для генерации HDL-кода из кода MATLAB ®, включая преобразование из плавающей запятой в фиксированную запятую и генерацию файлов программирования FPGA.
Генерация HDL-кода с интерфейсом командной строки имеет следующие основные шаги:
Создайте fixpt
объект config кодера. (Необязательно)
Создайте hdl
объект config кодера.
Установите параметры объекта config. (Необязательно)
Запустите команду codegen, чтобы сгенерировать код.
Интерфейс командной строки HDL Coder может использовать два объекта config кодера с командой codegen. Необязательный fixpt
Объект coder config конфигурирует преобразование из плавающей запятой в фиксированную запятую кода MATLAB. The hdl
Объект coder config конфигурирует генерацию 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
объекты config, запустите следующую команду codegen, чтобы выполнить преобразование из плавающей запятой в фиксированную запятую, и сгенерируйте HDL-код.
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
объект config и укажите имя испытательного стенда:
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
объект config:
fixptcfg.LogIOForComparisonPlotting = true;
Сконфигурируйте генератор кода, чтобы запустить отчет о предложении типа после того, как будут предложены фиксированные точки:
fixptcfg.LaunchNumericTypesReport = true;
Чтобы сгенерировать код, вы должны создать hdl
объект config и установите имя испытательного стенда:
hdlcfg = coder.config('hdl'); hdlcfg.TestBenchName = 'mlhdlc_dti_tb';
Можно сгенерировать код VHDL или Verilog. HDL Coder по умолчанию генерирует код 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
настройте объекты config, запустите команду codegen, чтобы выполнить преобразование из плавающей запятой в фиксированную запятую, сгенерируйте HDL-код и сгенерируйте программный файл FPGA:
codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_dti