Аппаратные шаблоны разработки Используя блок MATLAB function

В этом примере показано, как эффективно использовать блок MATLAB function, чтобы моделировать обычно используемые аппаратные алгоритмы с помощью HDL Coder™. Библиотекой шаблонов разработки HDL пользуются, чтобы показать функции MATLAB Coder, поддержанного HDL Coder.

Краткое введение

Блок MATLAB function поддерживает симуляцию и генерацию кода для ограниченного подмножества языка MATLAB®. Это обеспечивает механизм для реализации алгоритма в Simulink® и Stateflow®. Чтобы получить больше информации о том, как использовать этот блок в типе Simulink:

  >> docsearch('About Code Generation from MATLAB Algorithms')

Подмножество функций, поддерживавших HDL Coder

HDL Coder поддерживает мощное подмножество функций блока MATLAB function, которым хорошо удовлетворяют для реализаций HDL различного DSP и телекоммуникационных приложений, таких как детекторы последовательности, генераторы шаблона, энкодеры, декодеры и т.д., следующий список кратко показывает функции, поддерживавшие блоком MATLAB function в HDL Coder:

  • Различные числовые классы (int, uint, логический, один, дважды)

  • Вычисления с фиксированной точкой с помощью 'fi' объект

  • Арифметика, поддержка Логического, Реляционного и Побитового оператора

  • Полное использование поддержки выражения MATLAB выше операторов

  • 1D и 2D Матричные операции

  • Матричное индексирование

  • Использование потока управления, если, переключатель, для операторов

  • Функции Sub

  • Персистентные переменные к состоянию модели

  • Фиксированная точка и целочисленные библиотечные функции MATLAB

Моделирование аппаратных алгоритмов

Блок MATLAB function предоставляет механизм модели на высоком уровне абстракции с кратким и текстовым способом выразить поведение аппаратного алгоритма. HDL Coder обеспечивает легкий путь к реализации от такого алгоритмического представления уровня. Следующие разделы показывают, как использовать этот блок эффективно в HDL Coder.

% To illustrate the use of the above features in hardware modeling a
% sample patterns library is created that shows how to model common
% HDL problems. To open this sample library model please type
% at the command prompt

open_system('eml_hdl_design_patterns')

Используя Блоки в этой Библиотеке

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

  • Создайте новую модель.

  • Скопируйте блок интереса от eml_hdl_design_patterns библиотеки до этой модели.

  • Поместите его в подсистему или устройство под тестом.

  • Запустите 'hdlsetup' команду.

  • Запустите 'makehdl', чтобы сгенерировать код для блока

  • Создайте допустимый испытательный стенд вокруг этого с помощью источников Simulink и приемников.

  • Запустите 'makehdltb' команду, чтобы сгенерировать испытательный стенд.

  • Используйте Modelsim '.do' файл скрипта, чтобы симулировать сгенерированный код.

см. учебную модель в качестве примера 'eml_hdl_incrementer' для получения дополнительной информации или типа

  >> docsearch('Tutorial Example: Incrementer')

Моделирование арифметики

Этот раздел говорит о некоторых конструктивных соображениях, что справка генерирует эффективный HDL от блока MATLAB function. Обратите внимание на то, что для моделирования арифметических операций произвольной длины с помощью подписанного и логического использования векторов без знака объекта fi рекомендуется. Объекты fi обеспечивают мощный механизм, чтобы смоделировать вычисления с фиксированной точкой. Вот несколько вещей отметить при использовании объектов fi в блоке MATLAB function.

Функция fi помогает вам задать объект фиксированной точки с индивидуально настраиваемым 'numerictype' (который задает знак, wordlength, fractionlength) и 'fimath' (который задает округление и режимы насыщения),

Для генерации HDL-кода мы рекомендуем fimath, показанный ниже. (с 'Полом', режимами 'Wrap' и 'FullPrecision') как показано ниже.

Однако при моделировании алгоритмов, требующих более сложного округления и логики насыщения, можно использовать другие fimath режимы в округлении (пол, перекрыть, зафиксировать, самый близкий) и переполнение (перенесите, насыщайте),

  fimath(...
  'RoundMode', 'floor',...
  'OverflowMode', 'wrap',...
  'ProductMode', 'FullPrecision', 'ProductWordLength', 32,...
  'SumMode', 'FullPrecision', 'SumWordLength', 32);

Примеры: следующие примеры показывают влияние свойств fimath на сгенерированном коде.

  open_system('eml_hdl_design_patterns/Adders/add_with_carry')
  open_system('eml_hdl_design_patterns/Misc/eml_expr')

Моделирование состояния Используя персистентные переменные

Чтобы смоделировать комплексную управляющую логику, способность смоделировать регистры является основным требованием. В модели программирования MATLAB Coder содержащие состояние элементы представлены как персистентные переменные. Переменная, объявленная персистентной, сохраняет свое значение через вызовы функции в программном обеспечении, и через шаги шагов расчета Simulink. Состояние, содержащее элементы в оборудовании как регистры и триггеры также, предоставляет подобное поведение. Следующие примеры, как значения персистентных переменных могут быть изменены с помощью глобальной переменной и локальных условий сброса.

Примеры: open_system ('eml_hdl_design_patterns/Delay') open_system ('eml_hdl_design_patterns/Delays/unit задерживаются'), open_system ('eml_hdl_design_patterns/Delays/integer задержка') open_system ('eml_hdl_design_patterns/Delays/tap задержка') open_system ('eml_hdl_design_patterns/Delays/tap вектор задержки')

Моделирование счетчиков и FSMs

Построения управления MATLAB Coder, такие как переключатель/случай и if-elseif-else, вместе с элементами задержки и операциями вычислений с фиксированной точкой, позволяют вам управляющая логика модели. Примеры в FSMs показывают, как использовать случай переключателя, и if-elseif-end проверяют утверждения. Встречный показ к состоянию модели и как квантовать элементы данных в циклах.

Примеры: open_system ('eml_hdl_design_patterns/FSMs' ') open_system (' eml_hdl_design_patterns/Counters'')

Моделирование битовых операций

Блок MATLAB function поддерживает множество битовых операций, полезных для аппаратных операций побитовой обработки как битная конкатенация, битная упаковка и распаковка, генерация pn-последовательности и битные скремблеры. Вот быстрый список поразрядных функций, которые поддерживаются HDL Coder:

  • bitget, bitsliceget, bitconcat, bitset, bitcmp

  • bitand, bitor, bitxor

  • bitandreduce, bitorreduce, bitxorreduce

  • сдвиг разряда, bitsll, bitsrl, bitsra, bitrol, bitror

При моделировании чистой логики и никаких математических операций в блоке MATLAB function рекомендуются следующие настройки на входных операндах.

  • Предпочтите без знака входным операндам со знаком

  • Используйте не насыщение fimath опции, чтобы сгенерировать меньше оборудования.

  • Предпочтите, чтобы 'OverflowMode', чтобы быть 'перенеслись' и 'RoundMode', чтобы быть 'полом'

Примеры: open_system ('eml_hdl_design_patterns/Bit Twiddlers/hdl_bit_ops') open_system ('eml_hdl_design_patterns/Bit Twiddlers/signal_distance') open_system ('eml_hdl_design_patterns/Word Twiddlers/nibble_swap_with_slice_concat')

Моделирование аппаратных компонентов

Блок MATLAB function может использоваться, чтобы смоделировать различные аппаратные компоненты как многорегистровые циклические сдвиговые устройства, вращающие устройства, чтобы нести сохраняют сумматоры с помощью простых и кратких скриптов MATLAB.

Примеры: open_system ('eml_hdl_design_patterns/Shift Registers/shift_reg_universal')

Заключение

Этот пример иллюстрирует различные возможности, которые открываются для аппаратного моделирования с помощью блока MATLAB function. Набор шаблонов, чтобы решить общее оборудование, моделируя проблемы с помощью блока MATLAB function обсужден. Считайте документ для получения дополнительной информации об этой библиотеке.

  >> docsearch('The eml_hdl_design_patterns Library')