HDL Coder™ шаблоны модели в Simulink® предоставляет вам шаблоны проекта и лучшие практики для моделей, предназначенных для генерации HDL-кода. Модели, созданные вами из одного из шаблонов модели HDL Coder, имеют свои параметры конфигурации и настройки решателя, настроенные для генерации HDL-кода. Чтобы сконфигурировать существующую модель для генерации HDL-кода, используйте hdlsetup
.
Чтобы смоделировать оборудование для эффективной генерации HDL-кода, создайте модель с помощью шаблона модели HDL Coder.
Откройте начальную страницу Simulink. В MATLAB® На вкладке Home нажмите кнопку Simulink. Альтернатива в командной строке введите:
simulink
В HDL Coder разделе отображаются шаблоны, предварительно настроенные для генерации HDL-кода. Выбор шаблона открывает пустую модель в редакторе Simulink. Чтобы сохранить модель, выберите File > Save As.
Чтобы открыть браузер библиотеки Simulink и затем открыть HDL Coder Библиотеки блоков, нажмите кнопку Library Browser в редакторе Simulink. Кроме того, в командной строке введите
slLibraryBrowser
Чтобы фильтровать браузер библиотеки Simulink, чтобы показать библиотеки блоков, которые поддержку генерацию HDL-кода, используйте hdllib
функция:
hdllib
Шаблон Комплексного Умножителя показывает, как смоделировать комплексный умножитель-аккумулятор и вручную конвейерировать промежуточные каскады. Аппаратная реализация комплексного умножения использует четыре множителя и два сумматора.
Шаблон применяет следующие лучшие практики:
В диалоговом окне Параметров конфигурации, в HDL Code Generation > Global Settings, Reset type установлено на Synchronous
.
Чтобы улучшить скорость, Delay блоки, которые сопоставляются с регистрами в оборудовании, находятся на входах и выходах умножителей и сумматоров.
Чтобы поддержать выходные данные комплексного множителя полной точности, размер слова выходных данных вручную задаётся равной (operand_word_length
* 2) + 1.
Для примера в шаблоне размера слова операнда равен 18, а выход размера слова равен 37.
Арифметический шаблон MATLAB содержит арифметические операции 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;
Шаблон ПЗУ является шаблоном проекта, который сопоставляется с ПЗУ на оборудовании.
Шаблон применяет следующие лучшие практики:
На выходе интерполяционной таблицы существует блок Delay с ResetType
= none
.
Интерполяционная таблица структурирована так, что интервал между точками останова является степенью двойки.
Использование размерностей таблицы, которые являются степенью двойки, позволяет HDL Coder генерировать операции сдвига вместо операций деления. При необходимости дополните таблицу нулями.
Количество записей интерполяционной таблицы является степенью двойки. Для некоторых инструментов синтеза интерполяционная таблица, которая имеет степень двойки записей, лучше сопоставляется с ПЗУ. При необходимости дополните таблицу нулями.
Шаблон 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
, реализует выход mux.
В select_tap
, нулевой адрес, addr
шаги на 1, потому что индексы MATLAB основаны на одном.
function dout = fcn(addr, tdelay) %#codegen addr1 = fi(addr+1,0,5,0); dout = tdelay(addr1);
Шаблон также применяет следующие лучшие практики для отображения на SRL16 оборудования:
Для блока Tapped Delay:
В диалоговом окне Параметров блоков Include current input in output vector не активируется.
В диалоговом окне HDL Block Properties ResetType установлено значение none
.
Для блока Subsystem в диалоговом окне HDL Block Properties FlattenHierarchy установлено значение on
.
Шаблон Оборудование Patterns содержит шаблоны проекта для общих аппаратных операций:
Регистр последовательного переключения на параллельный сдвиг
Обнаружение приподнятого ребра
Обнаружение падающего ребра
Защелка SR
Фиксатор RS
Для примера, модели проекта для увеличения обнаружения ребра и падения ребра обнаружения:
Шаблон State Machine в MATLAB показов, как реализовать машины состояний Мили и Мура с помощью блока MATLAB Function.
Дополнительные сведения о лучших практиках моделирования машин состояний см. в разделе Модель конечного компьютера для генерации HDL-кода.