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

Обзор

HDL Coder™ реализует многоскоростные системы в HDL путем генерации основного тактового генератора, запускающегося в базовой ставке модели и генерирующего сигналы синхронизации подуровня от основного тактового генератора (см. также Генерацию кода от Многоскоростных моделей). Время распространения между двумя регистрами подуровня может быть больше чем одним циклом основного тактового генератора. multicycle path является путем между двумя такими регистрами.

При синтезировании HDL-кода часто полезно обеспечить анализ путей от регистра к регистру мультицикла к инструменту синтеза. Если инструмент синтеза может идентифицировать пути к мультициклу, можно смочь:

  • Осознайте более высокие тактовые частоты из своего многоскоростного проекта.

  • Уменьшайте область своего проекта.

  • Уменьшайте время выполнения инструмента синтеза.

Используя опцию Generate multicycle path information (или equivalentMulticyclePathInfo свойство для 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;

Ключевое слово идентифицирует тип информации, содержавшейся в поле. Строка ключевого слова в каждом поле завершает работу с пробелом, сопровождаемым двоеточием.

Разделитель между полями является точкой с запятой. В поле разделитель между подполями является запятой.

Следующая таблица задает поля ограничения мультивелосипедной дорожки в слева направо порядке.

Ключевое слово: поле (или подполя)Полевое описание
ОТ: 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 задает количество тактов, которые сигнал должен распространить от источника до целевого регистра. RELATIVE_CLK поле описывает часы, сопоставленные со множителем пути (relative clock для пути).

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

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

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

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

Укажите синтаксис пути для FROM: и TO: Поля

FROM : и TO: поля многопутевого ограничения обеспечивают путь к источнику или целевому регистру и информации о типе данных сигнала, размере и других характеристиках.

Сигналы Фиксированной точки.  Для сигналов фиксированной точки путь к регистру имеет форму

reg_path<ps> (hb:lb)

где:

  • reg_path HDL иерархический путь сигнала. Разделитель между иерархическими уровнями является периодом, например: Sbs.u_H1.initreg.

  • <ps>: Выбор части (целочисленный индекс нулевого источника) для векторных сигналов. Угловые скобки <> разграничивают поле выбора части

  • (hb:lb): Битное избранное поле, обозначенное от старшего бита до бита младшего разряда. Ширина сигнала (hb:lb) совпадает с заданной шириной сигнала в HDL-коде. Это представление не обязательно подразумевает что биты FROM : регистр соединяется с соответствующими битами TO: регистр. Фактические поразрядные связи определяются во время синтеза.

Boolean и Сигналы double.  Для boolean и сигналов double, путь к регистру имеет форму

reg_path<ps>

где:

  • reg_path HDL иерархический путь сигнала. Разделитель между иерархическими уровнями является периодом (.), например: Sbs.u_H1.initreg.

  • <ps>: Выбор части (целочисленный индекс нулевого источника) для векторных сигналов. Угловые скобки <> разграничивают поле выбора части

Для boolean и сигналов double, не присутствует никакое битное избранное поле.

Примечание

Формат не различает boolean и сигналы double.

Примеры.  Следующая таблица дает несколько примеров путей от регистра к регистру, как представлено в файле информации о пути к мультициклу.

PathОписание
FROM : Sbs.intireg(7:0); TO : Sbs.intoreg(7:0); Оба сигнала являются фиксированной точкой и восемь битов шириной.
FROM : Sbs.intireg; TO : Sbs.intoreg;Оба сигнала являются или boolean или дважды.
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®, и на других факторах. Упорядоченное расположение ограничений может также измениться в будущих версиях кодера. Когда вы спроектируете скрипты или другие инструменты, что файл информации о мультивелосипедной дорожке процесса, не создавайте ни в каких предположениях об упорядоченном расположении ограничений мультивелосипедной дорожки в файле.

Синхронизируйте определения

Когда вы используете несколько режим тактовой синхронизации, файл информации о мультивелосипедной дорожке также содержит раздел "Clock Definitions", как показано в следующем листинге. Этот раздел расположен после заголовка и перед разделом "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Каждые часы в проекте имеют СИНХРОНИЗИРОВАТЬ линию определения.
PERIOD: float_valueSimulink® уровень (значение с плавающей точкой), сопоставленное с этим, СИНХРОНИЗИРУЕТ.
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 диалогового окна Configuration Parameters.

Когда вы устанавливаете этот флажок и генерируете код для вашей модели, генератор кода создает файл информации о мультивелосипедной дорожке.

Генерация файлов информации о мультивелосипедной дорожке Используя командную строку

Чтобы сгенерировать файл информации о мультивелосипедной дорожке из командной строки, передайте в паре свойства/значения '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Модель
SubsystemBlackBoxHDLInstantiationПодсистема
RamBlockDualHDLInstantiationДвухпортовый RAM
RamBlockSimpDualHDLInstantiationПростой двухпортовый RAM
RamBlockSingleHDLInstantiationОдин порт RAM

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

Несомые на цикле Зависимости.  HDL Coder не генерирует ограничения для блоков MATLAB Function или Stateflow® графики, которые содержат for цикл с несомой на цикле зависимостью.

Индексация Переменных Вектора или матрицы.  Для того, чтобы сгенерировать ограничения для выражения индекса вектора или матрицы, выражение индекса должно быть одним из следующего:

  • Константа

  • 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);

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

Совет

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