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

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

Обзор

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

  1. Создайте 'fixpt' объект конфигурации кодера. (Необязательно)

  2. Создайте 'hdl' объект конфигурации кодера.

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

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

Интерфейс командной строки HDL Coder™ может использовать два объекта конфигурации кодера с 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' настроенных объектов конфигурации, запустите следующую 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

Остальная часть этого примера описывает, как сконфигурировать генерацию кода, использующую объекты 'fixpt' и 'hdl'.

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

Чтобы выполнить преобразование из плавающей запятой в фиксированную запятую, вам нужен 'fixpt' объект конфигурации.

Создайте '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;

Задайте тип для переменной проекта

Если вы хотите задать тип данных с фиксированной точкой для переменной в вашем проекте, можно создать спецификацию типа, установить ее поля и сопоставить ее с переменной.

Спецификация типа имеет следующие поля:

  • Isinteger: Может быть TRUE или FALSE

  • ProposedType: строка типа, как 'ufix15' или 'int32'.

  • RoundingMethod: Может быть 'перекрывают', 'конвергентный', 'фиксируют', 'ставят в тупик', 'самый близкий', или 'вокруг'.

  • OverflowAction: Может быть 'насыщают' или 'переносятся'.

Создайте спецификацию типа и сопоставьте ее с 'delayed_xout' переменной:

Создайте объект спецификации типа.

  typeSpec = coder.FixPtTypeSpec;

Установите поля в объекте typeSpec.

  typeSpec.ProposedType = 'ufix15';
  typeSpec.RoundingMethod = 'nearest';
  typeSpec.OverflowAction = 'saturate';

Сопоставьте спецификацию типа с переменной, 'yt'.

  fixptcfg.addTypeSpecification('mlhdlc_dti', 'yt', typeSpec)

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

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

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

Установите выходной язык

Можно сгенерировать или код VHDL или Verilog. Кодер генерирует код 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' настроенные объекты конфигурации, запускаете codegen команду, чтобы выполнить преобразование из плавающей запятой в фиксированную запятую, сгенерировать HDL-код и сгенерировать файл программирования FPGA:

codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_dti