Сгенерируйте 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

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

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

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

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

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

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

codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_dti