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