ЛПВП Coder™ реализует многоскоростные системы в ЛПВП, генерируя главный тактовый сигнал, работающий на базовой скорости модели, и генерируя сигналы синхронизации субскоростной передачи из главного тактового сигнала (см. также Генерация кода из многоскоростных моделей). Время распространения между двумя регистрами субскоростей может составлять более одного цикла ведущего синхросигнала. Многосекционный путь - это путь между двумя такими регистрами.
При синтезировании кода ЛПВП часто полезно обеспечить анализ многосекционных путей регистр-регистр к средству синтеза. Если инструмент синтеза может идентифицировать многоцикловые пути, можно выполнить следующие действия:
Получите более высокие тактовые частоты из многоскоростного дизайна.
Уменьшите площадь проекта.
Сократите время выполнения средства синтеза.
Использование опции «Генерировать информацию о многоцикловом пути» (или эквивалентнойMulticyclePathInfo свойство для makehdl) можно поручить кодеру проанализировать пути к нескольким циклам в сгенерированном коде и создать файл информации о путях к нескольким циклам.
Файл информации о пути к многоциклу - это текстовый файл, описывающий одно или несколько ограничений пути к многоциклу. Ограничение многоциклового тракта является исключением синхронизации - оно ослабляет ограничения по умолчанию для синхронизации системы, позволяя сигналам на данном тракте иметь более длительное время распространения. При использовании режима с несколькими часами файл также содержит определения часов.
Обычно средство синтеза дает каждому сигналу временной бюджет ровно 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 создал файл. этот раздел завершается следующими строками комментария:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 = 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: зарегистрироваться. Фактические соединения бит-бит определяются в процессе синтеза.
Логические и двойные сигналы. Для логических и двойных сигналов путь регистра имеет вид
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 является первым элементом вектора. Сигнал ТО является вторым элементом вектора. Оба сигнала имеют фиксированную точку и ширину восемь битов. |
FROM : Sbs.u_H1.intireg(7:0); TO : Sbs.intoreg(7:0); | Сигнал intireg определяется в модуле H1, и H1 находится внутри модуля Sbs. u_H1 - имя экземпляра H1 в Sbs. Оба сигнала имеют фиксированную точку и ширину восемь битов. |
Для данной модели или подсистемы порядок ограничений многоциклового пути в файле информации о многоцикловом пути может варьироваться в зависимости от того, является ли целевой язык VHDL ® или Verilog ®, и от других факторов. Порядок ограничений также может изменяться в будущих версиях кодера. При разработке сценариев или других инструментов, обрабатывающих файл информации о путях для нескольких циклов, не следует строить какие-либо предположения относительно порядка ограничений путей для нескольких циклов в файле.
При использовании режима с несколькими часами файл информации о пути к мультициклу также содержит раздел «Определения часов», как показано в следующем списке. Этот раздел расположен после заголовка и перед разделом «Пути для нескольких циклов».
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 записывает файл информации о пути для нескольких циклов в целевой объект.
Чтобы включить генерацию файлов информации о путях для нескольких циклов, выберите «Регистрация информации о путях для регистрации» в разделе «Ограничения путей для нескольких циклов» панели «Создание кода HDL» > «Цель и оптимизация» диалогового окна «Параметры конфигурации».
Если установить этот флажок и создать код для модели, генератор кода создаст файл информации о пути к многоциклу.
Чтобы создать файл информации о пути к нескольким циклам из командной строки, передайте в паре свойство/значение '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 не создает ограничения для функциональных блоков MATLAB или диаграмм 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);
Совет
Создание файлов ограничений для больших моделей может быть медленным.