Сгенерируйте HDL-код из кода MATLAB с помощью интерфейса командной строки

В этом примере показано, как использовать интерфейс командной строки HDL Coder™ для генерации HDL-кода из кода MATLAB ®, включая преобразование из плавающей запятой в фиксированную запятую и генерацию файлов программирования FPGA.

Обзор

Генерация HDL-кода с интерфейсом командной строки имеет следующие основные шаги:

  1. Создайте fixpt объект config кодера. (Необязательно)

  2. Создайте hdl объект config кодера.

  3. Установите параметры объекта config. (Необязательно)

  4. Запустите команду codegen, чтобы сгенерировать код.

Интерфейс командной строки HDL Coder может использовать два объекта config кодера с командой codegen. Необязательный fixpt Объект coder config конфигурирует преобразование из плавающей запятой в фиксированную запятую кода MATLAB. The hdl Объект coder config конфигурирует генерацию HDL-кода и опции программирования FPGA.

В этом примере мы исследуем различные способы настройки преобразования из плавающей запятой в фиксированную запятую и генерации кода.

В примере кода реализован интегратор в дискретном времени и его испытательный стенд.

Скопируйте файлы Design and Испытательный Стенд в временную папку

Выполните следующий код, чтобы скопировать файлы проекта и испытательного стенда во временную папку:

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 объекты.

Создайте объект Преобразования из плавающей запятой в фиксированную запятую Config

Чтобы выполнить преобразование из плавающей запятой в фиксированную запятую, вам нужен 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;

Создайте объект Config генерации HDL-кода

Чтобы сгенерировать код, вы должны создать hdl объект config и установите имя испытательного стенда:

hdlcfg = coder.config('hdl');
hdlcfg.TestBenchName = 'mlhdlc_dti_tb';

Установите целевой язык

Можно сгенерировать код VHDL или Verilog. HDL Coder по умолчанию генерирует код VHDL. Чтобы сгенерировать код Verilog:

hdlcfg.TargetLanguage = 'Verilog';

Сгенерируйте HDL- Испытательного стенда код

Сгенерируйте тестовый стенд HDL от тестового стенда MATLAB ®:

hdlcfg.GenerateHDLTestBench = true;

Симулируйте сгенерированный HDL-код с помощью Симулятора HDL

Если вы хотите симулировать свой сгенерированный HDL-код с помощью симулятора HDL, вы также должны сгенерировать HDL испытательный стенд.

Включите симуляцию HDL и используйте симулятор ModelSim:

hdlcfg.SimulateGeneratedCode = true;
hdlcfg.SimulationTool = 'ModelSim'; %  or 'ISIM'

Сгенерируйте файл программирования FPGA

Можно сгенерировать файл программирования 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