В этом примере показано, как эффективно использовать функциональный блок MATLAB для моделирования часто используемых аппаратных алгоритмов с использованием Coder™ HDL. Библиотека шаблонов дизайна HDL используется для отображения функций кодера MATLAB, поддерживаемого кодером HDL.
Функциональный блок MATLAB поддерживает моделирование и генерацию кода для ограниченного подмножества языка MATLAB ®. Он обеспечивает механизм реализации алгоритма в Simulink ® и Stateflow ®. Дополнительные сведения об использовании этого блока в Simulink:
>> docsearch('About Code Generation from MATLAB Algorithms')Кодер HDL поддерживает мощное подмножество функциональных блочных функций MATLAB, хорошо подходящих для реализации HDL различных DSP и телекоммуникационных приложений, таких как детекторы последовательностей, генераторы шаблонов, кодеры, декодеры и т.д., В следующем списке кратко показаны функции, поддерживаемые функциональным блоком MATLAB в кодере HDL:
Различные числовые классы (int, uint, логический, одинарный, двойной)
Арифметика с фиксированной точкой с использованием объекта «fi»
Поддержка арифметических, логических, реляционных и побитовых операторов
Полная поддержка выражений MATLAB с использованием указанных выше операторов
1-D и 2-D Матричные операции
Подстрочный индекс матрицы
Управление потоком с помощью if, switch, для операторов
Подфункции
Постоянные переменные в состояние модели
Функции библиотеки MATLAB с фиксированной точкой и целым числом
Блок MATLAB Function обеспечивает механизм моделирования на высоком уровне абстракции с кратким и текстовым способом выражения поведения аппаратного алгоритма. Кодер HDL обеспечивает простой путь к реализации из такого алгоритмического представления уровня. В следующих разделах показано, как эффективно использовать этот блок в кодере HDL.
% 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')В этом разделе рассматриваются некоторые аспекты проектирования, которые помогают генерировать эффективную ЛПВП из функционального блока MATLAB. Обратите внимание, что для моделирования арифметических операций произвольной длины с использованием подписанных и неподписанных логических векторов рекомендуется использовать объект fi. Объекты fi обеспечивают мощный механизм моделирования арифметики фиксированных точек. Вот несколько моментов, которые следует отметить при использовании объектов fi в блоке функции MATLAB.
Функция fi помогает определить объект с фиксированной точкой с настраиваемым «числовым типом» (определяющим знак, длину слова, длину фракции) и «fimath» (определяющим режимы округления и насыщения).
Для генерации кода HDL рекомендуется использовать формат, показанный ниже. (с режимами Floor, Wrap и FurePrecision), как показано ниже.
Однако при моделировании алгоритмов, требующих более сложной логики округления и насыщения, можно использовать другие режимы 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 элементы удержания состояния представлены в виде постоянных переменных. Переменная, объявленная постоянной, сохраняет свое значение для вызовов функций в программном обеспечении и для шагов времени выборки 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, такие как switch/case и if-elseif-else, в сочетании с элементами задержки и арифметическими операциями с фиксированной точкой, позволяют моделировать логику управления. Примеры в FSM показывают, как использовать управляющие операторы switch-case и if-elseif-end. Счетчик показывает состояние модели и способ квантования элементов данных в циклах.
Примеры: open_system ('eml _ hdl _ design _ patterns/FSM') open_system ('eml _ hdl _ design _ patterns/Counters')
Функциональный блок MATLAB поддерживает различные побитовые операции, полезные для операций аппаратной манипуляции битами, такие как конкатенация битов, упаковка и распаковка битов, преобразования между целыми числами и битами, генерация pn-последовательностей и скремблеры битов.
Ниже приведен краткий список побитовых функций, поддерживаемых кодером HDL:
bitget, bitsliceget, bitconcat, bitset, bitcmp
bitand, bitor, bitxor
bitandreduction, bitorreduction, bitxorreduction
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, реализованный в 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 может использоваться для моделирования различных аппаратных элементов, таких как бочкообразные переключатели, вращатели, сумматоры сохранения с помощью простых и сжатых сценариев MATLAB.
Примеры: open_system ('eml _ hdl _ design _ patterns/Shift Registers/shift_reg_universal')
Этот пример иллюстрирует различные возможности, открывающиеся для аппаратного моделирования с помощью функционального блока MATLAB. Рассматривается набор шаблонов для решения общих задач аппаратного моделирования с использованием функционального блока MATLAB. Дополнительные сведения об этой библиотеке см. в документе.
>> docsearch('The eml_hdl_design_patterns Library')