Сгенерируйте файлы информации о многоколесном пути

Обзор

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: src_reg_path;Исходный (или FROM) регистр многоколесного пути в системе. Значение src_reg_path - путь HDL выходного сигнала исходного регистра. См. также Синтаксис Пути Регистрации для ПОЛЕЙ FROM: и TO:.
КОМУ: dst_reg_path;Регистр назначения (или TO) многоколесного пути в системе. Регистр FROM управляет регистрацией TO в HDL-коде. Значение dst_reg_path - путь HDL выходного сигнала регистра назначения. См. также Синтаксис Пути Регистрации для ПОЛЕЙ FROM: и TO:.
PATH_MULT: N;

Этот path multiplier определяет количество тактовых импульсов, которые сигнал должен распространять от регистра источника к получателю. The RELATIVE_CLK поле описывает часы, сопоставленные с умножителем пути (relative clock для пути).

Значение умножителя пути N указывает, что сигнал имеет N тактовых импульсов своего относительного синхроимпульса для распространения из регистра источника в регистр назначения.

Кодер не сообщает пути регистра в регистр, где N = 1, потому что это умножитель пути по умолчанию.

RELATIVE_CLK: relclock, sysclock;The RELATIVE_CLK поле содержит два подполя с разделителями запятыми. Каждое подполе выражает местоположение относительных часов в другой форме, для использования различных инструментов синтеза. Подполя:
  • relclock: Поскольку HDL Coder в настоящее время генерирует только однотактовые системы, это подполе принимает значение source. В системе с несколькими синхроимпульсами относительный синхроимпульс, сопоставленный с многоядерным путем, может быть либо исходным, либо целевым регистром пути, и это подполе может иметь одно из значений source или destination. Это использование зарезервировано для будущего релиза кодера.

  • sysclock: Это подполе предназначено для использования с инструментами синтеза, которые требуют фактического времени распространения для многоколесного пути. sysclock обеспечивает путь к синхроимпульсу верхнего уровня системы (например Sbs.clk) Можно использовать период этого времени и множитель пути, чтобы вычислить время распространения для заданного пути.

Синтаксис пути регистра для полей FROM: и TO:

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_valueSimulink® скорость (значение с плавающей точкой), сопоставленная с этим 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Продукт, Произведение Элементов
MinMaxCascadeHDLEmissionMinMax, Максимум, Минимум
ModelReferenceHDLInstantiationМодель
SubsystemBlackBoxHDLInstiationПодсистема
RamBlockDualHDLInstantiationДвухпортовая ОЗУ
RamBlockSimpDualHDLInstantiationПростая двухпортовая оперативная память
RamBlockSingleHDLInstantiationОднопортовая ОЗУ

Ограничения на блоки MATLAB Function и диаграммы Stateflow

Циклические зависимости.  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);

Время генерации файлов

Совет

Генерация файлов ограничений для больших моделей может быть медленной.