exponenta event banner

Распределенная конвейерная обработка для оптимизации тактовой частоты

В этом примере показано, как использовать распределенную конвейерную и петлевую оптимизацию в кодере HDL для оптимизации тактовой частоты.

Введение

Распределенная конвейерная обработка - это общепроектная оптимизация, поддерживаемая кодером HDL для улучшения тактовой частоты. При включении опции «Распределить регистры конвейера» в кодере HDL кодер перераспределяет входные и выходные регистры конвейера функции верхнего уровня вместе с другими регистрами в конструкции, чтобы минимизировать комбинаторную логику между регистрами и таким образом максимизировать тактовую частоту чипа, синтезированного из сгенерированного кода HDL.

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

MATLAB ® Дизайн

Код MATLAB, используемый в примере, является простым фильтром FIR. В примере также показан испытательный стенд MATLAB с фильтром.

design_name = 'mlhdlc_fir';
testbench_name = 'mlhdlc_fir_tb';
  1. Проектирование: mlhdlc_fir

  2. Испытательный стенд: mlhdlc_fir_tb

Создание новой папки и копирование соответствующих файлов

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

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_fir'];

% create a temporary folder and copy the MATLAB files
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);

Моделирование конструкции

Перед созданием кода смоделируйте проект с помощью средства тестирования, чтобы убедиться в отсутствии ошибок во время выполнения.

mlhdlc_fir_tb

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

Для выполнения преобразования с фиксированной точкой необходим объект конфигурации «fixpt».

Создайте объект конфигурации «fixpt» и укажите имя тестового стенда:

close all;
fixptcfg = coder.config('fixpt');
fixptcfg.TestBenchName = 'mlhdlc_fir_tb';

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

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

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

Распределенная конвейерная обработка

Для увеличения тактовой частоты пользователь может задать ряд входных и выходных ступеней трубопровода для любой конструкции. В этом конкретном примере параметр Input pipelining имеет значение «1», а параметр Output pipelining имеет значение «20». Без включения дополнительных опций эти настройки добавят один входной регистр трубопровода на всех входных портах конструкции верхнего уровня и 20 выходных регистров трубопровода на каждом из выходных портов.

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

В дополнение к перемещению входных и выходных конвейерных регистров, HDL Coder также пытается переместить регистры, смоделированные внутри конструкции, используя постоянные переменные или с системными объектами, такими как dsp. Задержка.

Дополнительные возможности для улучшений становятся доступными при распаковке циклов. Параметр «Unroll Loops» разворачивает явные for-loops в коде MATLAB в дополнение к неявным for-loops, выводимым для векторных и матричных операций. Для выполнения распределенной конвейерной обработки в этом примере необходимо «Разматывать петли».

hdlcfg.InputPipeline = 1;
hdlcfg.OutputPipeline = 20;
hdlcfg.DistributedPipelining = true;
hdlcfg.LoopOptimization = 'UnrollLoops';

Анализ результатов синтеза

Если на компьютере установлен ISE, выполните шаг логического синтеза

hdlcfg.SynthesizeGeneratedCode = true;
codegen -float2fixed fixptcfg -config hdlcfg mlhdlc_fir

Просмотр отчета о результатах

edit codegen/mlhdlc_fir/hdlsrc/ise_prj/mlhdlc_fir_fixpt_syn_results.txt

В отчете о синтезе запишите тактовую частоту, сообщенную средством синтеза. При синтезировании конструкции с включенными параметрами размотки и распределенной конвейерной обработки появляется значительное увеличение тактовой частоты при включенных параметрах конвейерной обработки.

Очистка созданных файлов

Выполните следующие команды для очистки временной папки проекта.

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_fir'];
clear mex;
cd (mlhdlc_demo_dir);
rmdir(mlhdlc_temp_dir, 's');