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