Оборудование проекта с использованием блока MATLAB function

В этом примере показано, как эффективно использовать блок MATLAB Function для моделирования обычно используемых аппаратных алгоритмов с использованием HDL- Coder™. Библиотека шаблонов проекта используется для отображения функций 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, логический, single, double)

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

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

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

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

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

  • Управляйте потоком, используя if, switch, для операторов

  • Подфункции

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

  • Функции библиотеки 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', чтобы сгенерировать testbench.

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

смотрите пример модели 'eml _ hdl _ incrementer' для получения дополнительной информации или типа

  >> docsearch('Tutorial Example: Incrementer')

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

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

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

Для генерации HDL-кода мы рекомендуем fimath, показанный ниже. (с режимами 'Floor', '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 вектор задержки')

Счетчики моделирования и FSM

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

Примеры: open_system ('eml _ hdl _ проект _ patterns/FSM') open_system ('eml _ hdl _ проект _ patterns/Counters')

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

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

Вот быстрый список побитовых функций, которые поддерживаются HDL Coder:

  • bitget, bitsliceget, bitconcat, bitset, bitcmp

  • bitand, bitor, bitxor

  • bitandreduce, bitorreduce, bitxorreduce

  • bitshift, bitsll, bitsrl, bitsra, bitrol, bitror

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

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

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

  • Предпочитайте 'OverflowMode' быть 'wrap' и 'RoundMode' быть 'floor'

Примеры: 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')

Для примера, который показывает, как выполнить преобразование между целым числом и битами, откройте модель hdlcoder_int2bits_bits2int.

open_system('hdlcoder_int2bits_bits2int')

Эта модель использует блок MATLAB Function, который реализован в Word Twiddlers библиотека.

open_system('eml_hdl_design_patterns/Word Twiddlers/Bits2Int')
open_system('eml_hdl_design_patterns/Word Twiddlers/Int2Bits')
open_system('eml_hdl_design_patterns/Word Twiddlers/Integer to Bits')
open_system('eml_hdl_design_patterns/Word Twiddlers/Bits to Integer')

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

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

Примеры: open_system ('eml _ hdl _ проект _ patterns/Shift Registers/shift_reg_universal')

Заключение

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

  >> docsearch('The eml_hdl_design_patterns Library')