HDL Coder™ реализует мультирейт-системы в HDL путем генерации ведущего синхроимпульса, работающего на базовой скорости модели, и генерации субрейта временных сигналов от ведущего синхроимпульса (см. также Генерация кода от Многоскоростных моделей). Время распространения между двумя регистрами подрейса может быть более одного цикла главного синхроимпульса. A multicycle path является путем между двумя такими регистрами.
При синтезе HDL-кода часто полезно обеспечить анализ многоколесных путей «регистр-регистр» к инструменту синтеза. Если инструмент синтеза может идентифицировать многоколесные пути, вы можете:
Реализуйте более высокие тактовые частоты из вашего мультирейтового проекта.
Уменьшите площадь вашего проекта.
Уменьшите время выполнения инструмента синтеза.
Использование опции Generate multicycle path information (или ее эквивалента MulticyclePathInfo
свойство для makehdl
) можно дать указание кодеру анализировать многоканальные пути в сгенерированном коде и сгенерировать multicycle path information file.
Файл информации о многоканальном пути является текстовым файлом, который описывает один или несколько multicycle path constraints. Ограничение многоколесного пути является timing exception - это ослабляет ограничения по умолчанию для синхронизации системы, позволяя сигналам на данном пути иметь больше времени распространения. При использовании режима нескольких часов файл также содержит определения часов.
Обычно инструмент синтеза выдает каждому сигналу бюджет времени в точности 1 такт для распространения из регистра источника в регистр назначения. Исключение синхронизации задает умножитель N пути, который информирует инструмент синтеза о том, что сигнал имеет N тактов (N > 1) для распространения от регистра источника к получателю. Умножитель пути выражает некоторое количество циклов относительного синхроимпульса в регистре источника или назначения. Когда для пути задано исключение синхронизации, инструмент синтеза обладает большей гибкостью в удовлетворении требований синхронизации для этого пути и для системы в целом.
Сгенерированный файл информации о многоканальном пути не следует собственному формату файла ограничений конкретного инструмента синтеза. Файл содержит информацию о многоколесном пути, требуемую популярными инструментами синтеза. Можно вручную преобразовать эту информацию в ограничения многоколесного пути в формате, требуемом инструментом синтеза, или написать скрипт или инструмент для преобразования. В следующем разделе подробно описывается формат файла ограничения многожильного пути.
В следующем списке показан простой файл с информацией о многоядерном пути.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Constraints Report % Module: Sbs % Model: mSbs.mdl % % File Name: hdlsrc/Sbs_constraints.txt % Created: 2009-04-10 09:50:10 % Generated by MATLAB 7.9 and HDL Coder 1.6 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Multicycle Paths %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FROM : Sbs.boolireg; TO : Sbs.booloreg; PATH_MULT : 2; RELATIVE_CLK : source, Sbs.clk; FROM : Sbs.boolireg_v<0>; TO : Sbs.booloreg_v<0>; PATH_MULT : 2; RELATIVE_CLK : source, Sbs.clk; FROM : Sbs.doubireg; TO : Sbs.douboreg; PATH_MULT : 2; RELATIVE_CLK : source, Sbs.clk; FROM : Sbs.doubireg_v<0>; TO : Sbs.douboreg_v<0>; PATH_MULT : 2; RELATIVE_CLK : source, Sbs.clk; FROM : Sbs.intireg(7:0); TO : Sbs.intoreg(7:0); PATH_MULT : 2; RELATIVE_CLK : source, Sbs.clk; FROM : Sbs.intireg_v<0>(7:0);TO : Sbs.intoreg_v<0>(7:0);PATH_MULT : 2 RELATIVE_CLK : source,Sbs.clk;
Первый раздел файла является заголовком, который идентифицирует исходную модель и предоставляет другую информацию о том, как HDL Coder сгенерировал файл. этот раздел заканчивается следующими строками с комментариями:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Multicycle Paths %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Примечание
Для модели с одной скоростью или модели без многоядерных путей кодер генерирует только раздел заголовка файла.
Далее приводится основная часть файла. Этот раздел содержит плоскую таблицу, каждая строка которой задает ограничение многожильного пути.
Каждое ограничение состоит из четырех полей. Формат каждого поля один из следующих:
KEYWORD : field;
KEYWORD : subfield1,... subfield_N;
Ключевое слово определяет тип информации, содержащейся в поле. Строка ключевых слов в каждом поле заканчивается пространством, за которым следует двоеточие.
Разделителем между полями является точка с запятой. Внутри поля разделителем между подполями является запятая.
Следующая таблица определяет поля ограничения многоколесного пути в порядке слева направо.
Ключевое слово: поле (или подполя) | Описание поля |
---|---|
FROM: | Исходный (или FROM) регистр многоколесного пути в системе. Значение src_reg_path - путь HDL выходного сигнала исходного регистра. См. также Синтаксис Пути Регистрации для ПОЛЕЙ FROM: и TO:. |
КОМУ: | Регистр назначения (или TO) многоколесного пути в системе. Регистр FROM управляет регистрацией TO в HDL-коде. Значение dst_reg_path - путь HDL выходного сигнала регистра назначения. См. также Синтаксис Пути Регистрации для ПОЛЕЙ FROM: и TO:. |
PATH_MULT: N | Этот path multiplier определяет количество тактовых импульсов, которые сигнал должен распространять от регистра источника к получателю. The Значение умножителя пути Кодер не сообщает пути регистра в регистр, где N = 1, потому что это умножитель пути по умолчанию. |
RELATIVE_CLK: | The RELATIVE_CLK поле содержит два подполя с разделителями запятыми. Каждое подполе выражает местоположение относительных часов в другой форме, для использования различных инструментов синтеза. Подполя:
|
The FROM :
и TO:
поля многолучевого ограничения обеспечивают путь к регистру источника или назначения и информацию о типе данных сигнала, размере и других характеристиках.
Сигналы фиксированной точки. Для сигналов с фиксированной точкой путь регистра имеет вид
reg_path<ps> (hb:lb)
где:
reg_path
- HDL-иерархический путь сигнала. Разделителем между иерархическими уровнями является период, например: Sbs.u_H1.initreg
.
<ps>
: Выбор детали (нулевое происхождение целого числа индекс) для сигналов вектора. Угловые скобки < > разграничены по полю выбора детали
(hb:lb)
: Поле выбора бита, обозначенное от бита высокого порядка до бита низкого порядка. Ширина сигнала (hb:lb)
совпадает с заданной шириной сигнала в HDL-коде. Это представление не обязательно подразумевает, что биты FROM :
регистр соединяются с соответствующими битами TO:
зарегистрироваться. Фактические соединения между битами определяются во время синтеза.
Логические и двойные сигналы. Для булевых и двойных сигналов путь регистра имеет вид
reg_path<ps>
где:
reg_path
- HDL-иерархический путь сигнала. Разделителем между иерархическими уровнями является период (.), например: Sbs.u_H1.initreg
.
<ps>
: Выбор детали (нулевое происхождение целого числа индекс) для сигналов вектора. Угловые скобки < > разграничены по полю выбора детали
Для булевых и двойных сигналов поле выбора бит отсутствует.
Примечание
Формат не различает логический и двойной сигналы.
Примеры. В следующей таблице приведены несколько примеров путей «регистр-регистр», представленных в файле информации о многоканальном пути.
Путь | Описание |
---|---|
FROM : Sbs.intireg(7:0); TO : Sbs.intoreg(7:0); | Оба сигнала являются фиксированной точкой и шириной в восемь битов. |
FROM : Sbs.intireg; TO : Sbs.intoreg; | Оба сигнала являются либо логическими, либо двойными. |
FROM : Sbs.intireg<0>(7:0); TO : Sbs.intoreg<1>(7:0); | Сигнал FROM является первым элементом массива вектора. Сигнал TO является вторым элементом массива вектора. Оба сигнала являются фиксированной точкой и шириной в восемь битов. |
FROM : Sbs.u_H1.intireg(7:0); TO : Sbs.intoreg(7:0); | Сигнал intireg определяется в модуле H1 , и H1 находится внутри модуля Sbs . u_H1 - имя образца H1 в Sbs . Оба сигнала являются фиксированной точкой и шириной в восемь битов. |
Для заданной модели или подсистемы упорядоченное расположение ограничивающих многоколесных путей в файле информации о многоколесном пути может варьироваться в зависимости от того, является ли целевой язык VHDL® или Verilog®, и на других факторах. Упорядоченное расположение ограничений может также изменяться в будущих версиях кодера. Когда вы проектируете скрипты или другие инструменты, которые обрабатывают файл информации о многоколесном пути, не строите никаких предположений о упорядоченном расположении ограничениях многоколесного пути в файле.
Когда вы используете режим нескольких синхроимпульсов, файл информации о пути к многоколесу также содержит раздел «Определения часов», как показано на следующем списке. Этот раздел расположен после заголовка и перед разделом «Multicycle Paths».
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Clock Definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLOCK: Sbs.clk PERIOD: 0.05 CLOCK: Sbs.clk_1_2 BASE_CLOCK: Sbs.clk MULTIPLIER: 2 PERIOD: 0.1
Следующая таблица определяет поля для определений синхроимпульса.
Ключевое слово: поле (или подполя) | Описание поля |
---|---|
CLOCK: clock_name | Каждый синхроимпульс в проекте имеет линию определения CLOCK. |
PERIOD: float_value | Simulink® скорость (значение с плавающей точкой), сопоставленная с этим CLOCK. |
BASE_CLOCK: base_clock_name | Называет главные часы. Это поле не отображается в главных часах. |
MULTIPLIER: int_value | Задает отношение периода этого синхроимпульса к главному. Это поле не отображается в главных часах. |
Имя файла для файла информации о многоканальном пути определяется именем DUT и строкой постфикса '_constraints'
, следующим образом:
DUTname_constraints.txt
Для примера, если имя DUT symmetric_fir
, имя файла информации о многоканальном пути symmetric_fir_constraints.txt
.
HDL Coder записывает файл информации о многокилометровом пути в целевое устройство.
Чтобы включить генерацию файлов информации о многоядерных путях, выберите Register-to-register path info в Multicycle Path Constraints разделе панели HDL Code Generation > Target and Optimizations диалогового окна Параметры конфигурации.
Когда вы устанавливаете этот флажок и генерируете код для вашей модели, генератор кода создает файл информации о многоканальном пути.
Чтобы сгенерировать файл информации о многоканальном пути из командной строки, передайте в паре свойство/значение 'MulticyclePathInfo','on'
кому makehdl
, как в следующем примере.
>> dut = 'hdlfirtdecim_multicycle/Subsystem'; >> makehdl(dut, 'MulticyclePathInfo','on'); ### Generating HDL for 'hdlfirtdecim_multicycle/Subsystem' ### Starting HDL Check. ### HDL Check Complete with 0 errors, 0 warnings and 1 message. ### MESSAGE: For the block 'hdlfirtdecim_multicycle/Subsystem/downsamp0' The initial condition may not be used when the sample offset is 0. ### Begin VHDL Code Generation ### Working on Subsystem_tc as hdlsrc\Subsystem_tc.vhd ### Working on hdlfirtdecim_multicycle/Subsystem as hdlsrc\Subsystem.vhd ### Generating package file hdlsrc\Subsystem_pkg.vhd ### Finishing multicycle path connectivity analysis. ### Writing multicycle path information in hdlsrc\Subsystem_constraints.txt ### HDL Code Generation Complete.
В следующей таблице перечислены реализации блоков (и связанные блоки Simulink), которые не будут вносить вклад в информацию об ограничениях многожильного пути.
Реализация | Блоки (блоки ) (ы) |
---|---|
SumCascadeHDLEmission | Сложение, вычитание, сумма, сумма элементов |
ProductCascadeHDLEmission | Продукт, Произведение Элементов |
MinMaxCascadeHDLEmission | MinMax, Максимум, Минимум |
ModelReferenceHDLInstantiation | Модель |
SubsystemBlackBoxHDLInstiation | Подсистема |
RamBlockDualHDLInstantiation | Двухпортовая ОЗУ |
RamBlockSimpDualHDLInstantiation | Простая двухпортовая оперативная память |
RamBlockSingleHDLInstantiation | Однопортовая ОЗУ |
Циклические зависимости. HDL Coder не генерирует ограничения для блоков MATLAB Function или Stateflow® графики, содержащие for
цикл с циклической зависимостью.
Индексация векторных или матричных переменных. В порядок сгенерировать ограничения для выражения вектора или матричного индекса, индексное выражение должно быть одним из следующих:
Константа
A for
переменная индукции цикла
Например, в следующем примере кода для блока MATLAB Function, индекс выражение reg(i)
не генерирует ограничения.
function y = fcn(u) %#codegen N=length(u); persistent reg; if isempty(reg) reg = zeros(1,N); end y = reg; for i = 1:N-1 reg(i) = u(i) + reg(i+1); end reg(N) = u(N);
Совет
Генерация файлов ограничений для больших моделей может быть медленной.