Шаблоны модели HDL Coder™ в Simulink® предоставляют вам шаблоны разработки и лучшые практики для моделей, предназначенных для генерации HDL-кода. Модели, которые вы создаете из одного из шаблонов модели HDL Coder, имеют свои параметры конфигурации и настройки решателя, настроенные для генерации HDL-кода. Чтобы сконфигурировать существующую модель для генерации HDL-кода, использовать hdlsetup
.
Чтобы смоделировать оборудование для эффективной генерации HDL-кода, создайте модель с помощью шаблона модели HDL Coder.
Откройте начальную страницу Simulink. Во вкладке Home MATLAB® нажмите кнопку Simulink. Alternativelty, в командной строке, введите:
simulink
В разделе HDL Coder вы видите шаблоны, которые предварительно сконфигурированы для генерации HDL-кода. Выбор шаблона открывает пустую модель в Редакторе Simulink. Чтобы сохранить модель, выберите File> Save As.
Чтобы открыть Браузер Библиотеки Simulink и затем открыть Библиотеку блоков HDL Coder, нажмите кнопку Library Browser в Редакторе Simulink. В качестве альтернативы в командной строке, войти
slLibraryBrowser
Чтобы отфильтровать Браузер Библиотеки Simulink, чтобы показать библиотеки блоков что генерация HDL-кода поддержки, используйте hdllib
функция:
hdllib
Шаблон Complex Multiplier показывает, как смоделировать комплексный аккумулятор множителя и вручную конвейерно обработать промежуточные стадии. Аппаратная реализация комплексного умножения использует четыре множителя и два сумматора.
Шаблон применяет применяющие лучшые методы:
В диалоговом окне Configuration Parameters, в HDL Code Generation> Global Settings, Reset type установлен в Synchronous
.
Чтобы улучшить скорость, блоки Delay, которые сопоставляют с регистрами в оборудовании, при вводах и выводах множителей и сумматоров.
Чтобы поддержать выходные данные множителя комплекса полной точности, размер слова выходных данных вручную задан, чтобы быть (operand_word_length
* 2) + 1.
Например, в шаблоне, размер слова операнда равняется 18, и выходной размер слова равняется 37.
Шаблон MATLAB Arithmetic содержит арифметические операции MATLAB, которые выводят DSP48s в оборудовании.
Например, ml_mul_acc
Блок MATLAB Function показывает, как записать, что умножение - накапливает операцию в MATLAB. hdlfimath применяет математические настройки фиксированной точки для генерации HDL-кода.
function y = fcn(u1, u2) % design of a 6x6 multipler % same reset on inputs and outputs % followed by an adder nt = numerictype(0,6,0); nt2 = numerictype(0,12,0); fm = hdlfimath; persistent u1_reg u2_reg mul_reg add_reg; if isempty(u1_reg) u1_reg = fi(0, nt, fm); u2_reg = fi(0, nt, fm); mul_reg = fi(0, nt2, fm); add_reg = fi(0, nt2, fm); end mul = mul_reg; mul_reg = u1_reg * u2_reg; add = add_reg; add_reg(:) = mul+add; u1_reg = u1; u2_reg = u2; y = add;
Шаблон ROM является шаблоном разработки, который сопоставляет с ROM в оборудовании.
Шаблон применяет применяющие лучшые методы:
При выходе интерполяционной таблицы существует блок Delay с ResetType
= none
.
Интерполяционная таблица структурирована таким образом, что интервал между точками останова является степенью двойки.
Используя табличные размерности, которые являются степенью двойки, позволяет HDL Coder сгенерировать операции сдвига вместо операций деления. При необходимости заполните таблицу нулями.
Количество записей интерполяционной таблицы является степенью двойки. Для некоторых инструментов синтеза интерполяционная таблица, которая имеет количество степени двойки записей, сопоставляет лучше с ROM. При необходимости заполните таблицу нулями.
Шаблон Register показывает, как смоделировать аппаратные регистры:
В Simulink, с помощью блока Delay.
В MATLAB, с помощью персистентных переменных.
Этот шаблон разработки также показывает, как использовать cast
распространить типы данных автоматически.
Код MATLAB в блоке MATLAB Function использует персистентную переменную, чтобы смоделировать регистр.
function y = fcn(u) % Unit delay implementation that maps to a register in hardware persistent u_d; if isempty(u_d) % defines initial value driven by unit delay at time step 0 u_d = cast(0, 'like', u); end % return delayed input from last sample time hit y = u_d; % store the current input u_d = u;
Шаблон SRL показывает, как реализовать сдвиговый регистр, который сопоставляет с SRL16 в оборудовании. Можно использовать подобный шаблон, чтобы сопоставить с SRL32.
В подсистеме сдвигового регистра Tapped Delay реализует операцию сдвига, и MATLAB Function, select_tap
, реализует выходной мультиплексор.
В select_tap
, основанный на нуле адрес, addr
шаг 1, потому что индексы MATLAB на основе одни.
function dout = fcn(addr, tdelay) %#codegen addr1 = fi(addr+1,0,5,0); dout = tdelay(addr1);
Шаблон также применяет применяющие лучшые методы для отображения с SRL16 в оборудовании:
Для блока Tapped Delay:
В диалоговом окне Block Parameters не включен Include current input in output vector.
В диалоговом окне HDL Block Properties ResetType установлен в none
.
Для блока Subsystem, в диалоговом окне HDL Block Properties, FlattenHierarchy установлен в on
.
Шаблон Simulink Hardware Patterns содержит шаблоны разработки для общей аппаратной работы:
Последовательно-параллельный сдвиговый регистр
Обнаружьте возрастающее ребро
Обнаружьте падающее ребро
Фиксатор SR
Фиксатор RS
Например, шаблоны разработки для возрастающего обнаружения ребра и падающего обнаружения ребра:
Шаблон State Machine in MATLAB показывает, как реализовать Мучнистый и машина состояний Мура с помощью блока MATLAB Function.
Чтобы узнать больше о лучшых практиках для моделирования машины состояний, см. Модель Конечный автомат для генерации HDL-кода.