В этом примере показано, как эффективно использовать блок MATLAB Function для моделирования обычно используемых аппаратных алгоритмов с использованием HDL- Coder™. Библиотека шаблонов проекта используется для отображения функций MATLAB Coder, поддерживаемого HDL Coder.
Блок MATLAB Function поддерживает симуляцию и генерацию кода для ограниченного подмножества языка MATLAB ®. Он предоставляет механизм реализации алгоритма в Simulink ® и Stateflow ®. Чтобы получить дополнительные сведения о том, как использовать этот блок в типе Simulink:
>> docsearch('About Code Generation from MATLAB Algorithms')
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 вектор задержки')
Структуры управления 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')