В этом примере показано, как эффективно использовать блок MATLAB function, чтобы моделировать обычно используемые аппаратные алгоритмы с помощью HDL Coder™. Библиотекой шаблонов разработки HDL пользуются, чтобы показать функции 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, логический, один, дважды)
Вычисления с фиксированной точкой с помощью '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 вектор задержки')
Построения управления 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')
Для примера, который показывает, как выполнить преобразование между целым числом и битами, открыть модель 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_design_patterns/Shift Registers/shift_reg_universal')
Этот пример иллюстрирует различные возможности, которые открываются для аппаратного моделирования с помощью блока MATLAB function. Набор шаблонов, чтобы решить общее оборудование, моделируя проблемы с помощью блока MATLAB function обсужден. Считайте документ для получения дополнительной информации об этой библиотеке.
>> docsearch('The eml_hdl_design_patterns Library')