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;
Ключевое слово идентифицирует тип информации, содержавшейся в поле. Строка ключевого слова в каждом поле завершает работу с пробелом, сопровождаемым двоеточием.
Разделитель между полями является точкой с запятой. В поле разделитель между подполями является запятой.
Следующая таблица задает поля ограничения мультивелосипедной дорожки в слева направо порядке.
Ключевое слово: поле (или подполя) | Полевое описание |
---|---|
ОТ: | Источник (или FROM) регистр мультивелосипедной дорожки в системе. Значение src_reg_path путь к HDL исходного выходного сигнала регистра. См. также Синтаксис Пути к Регистру для FROM: и TO: Поля . |
К: | Место назначения (или TO) регистр мультивелосипедной дорожки в системе. Регистр FROM управляет регистром TO в HDL-коде. Значение dst_reg_path путь к HDL выходного сигнала целевого регистра. См. также Синтаксис Пути к Регистру для FROM: и TO: Поля . |
PATH_MULT: | path multiplier задает количество тактов, которые сигнал должен распространить от источника до целевого регистра. Значение множителя пути Кодер не сообщает о путях от регистра к регистру, где N = 1, потому что это - множитель пути по умолчанию. |
RELATIVE_CLK: | RELATIVE_CLK поле содержит два разграниченных запятой подполя. Каждое подполе описывает местоположение относительных часов в другой форме для использования различных инструментов синтеза. Подполя:
|
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_value | Simulink® уровень (значение с плавающей точкой), сопоставленное с этим, СИНХРОНИЗИРУЕТ. |
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 | Продукт, продукт элементов |
MinMaxCascadeHDLEmission | MinMax, максимум, минимум |
ModelReferenceHDLInstantiation | Модель |
SubsystemBlackBoxHDLInstantiation | Подсистема |
RamBlockDualHDLInstantiation | Двухпортовый RAM |
RamBlockSimpDualHDLInstantiation | Простой двухпортовый RAM |
RamBlockSingleHDLInstantiation | Один порт RAM |
Несомые на цикле Зависимости. 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);
Совет
Генерация ограничительных файлов для больших моделей может быть медленной.