Разделение ресурсов

Resource sharing является оптимизацией области, в которой HDL Coder™ идентифицирует несколько функционально эквивалентных ресурсов и заменяет их на один ресурс. Данные мультиплексируются временем по совместно используемому ресурсу, чтобы выполнить те же операции.

Как работы разделения ресурсов

Можно задать SF sharing factor для подсистемы или блока MATLAB function. HDL Coder пытается идентифицировать определенное число идентичных, общих ресурсов N до SF. То, как генератор кода совместно использует эти ресурсы, зависит от N, SF и Oversampling factor.

По умолчанию Oversampling factor равняется 1, и разделение ресурсов разгоняет совместно используемые ресурсы разгоняющимся фактором (OCF), который зависит от остатка от SF и N.

if rem(SF,N) == 0
    OCF = N;
else
    OCF = SF;
end

Если вы задаете Oversampling factor, больше, чем 1, ваш проект управляет более быстрой тактовой частотой на целевом компьютере, потому что конвейеризация тактовой частоты включена по умолчанию. Когда вы задаете SharingFactor, оптимизация разделения ресурсов пытается совместно использовать до ресурсов N и разгоняет совместно используемые ресурсы фактором, данным:

Разгон фактора = (block_rate ÷ DUT_base_rate) × Oversampling

Можно использовать модель валидации, чтобы проверить, что вывод оптимизированного DUT битно-верен для результатов, приведенных исходным DUT. Чтобы узнать больше о модели валидации, см. Сгенерированную Модель Модели и Валидации.

Преимущества и затраты на разделение ресурсов

Разделение ресурсов может существенно уменьшать вашу область чипа. Например, сгенерированный код может использовать один множитель, чтобы выполнить операции нескольких тождественно сконфигурированных множителей из исходной модели. Однако разделение ресурсов имеет следующие затраты:

  • Использование больше мультиплексоров и может использовать больше регистров.

  • Уменьшает возможности для распределенной конвейеризации или повторной синхронизации, потому что HDL Coder не конвейерно обрабатывает через контуры тактовой частоты.

  • Умножает тактовую частоту целевого компьютера фактором совместного использования.

Общие ресурсы в различных блоках

Если вы задаете ненулевой фактор совместного использования для блока MATLAB function, HDL Coder идентифицирует и совместно использует функционально эквивалентные множители.

Если вы задаете ненулевой фактор совместного использования для Подсистемы, HDL Coder идентифицирует и совместно использует функционально эквивалентные экземпляры следующих типов блоков:

  • Усиление

  • Продукт

  • Умножьтесь - Добавляют

  • Добавьте или Сумма с двумя входными параметрами

  • Атомарная подсистема

  • Функция MATLAB

Задайте разделение ресурсов

Задавать разделение ресурсов от пользовательского интерфейса:

  1. Щелкните правой кнопкой по подсистеме, модели - ссылке или блоку MATLAB function.

  2. Выберите HDL Code> HDL Block Properties.

  3. В поле SharingFactor введите номер общих ресурсов.

В командной строке, набор SharingFactor с помощью hdlset_param, как в следующем примере.

dut = 'ex_dimcheck/Channel';
hdlset_param(dut,'SharingFactor',3);

Ограничения для разделения ресурсов

HDL Coder не делает ссылок модели поддержки для разделения ресурсов.

Блокируйте требования для разделения ресурсов

Блоки, которые будут совместно использованы, должны иметь следующие требования:

  • Односкоростной.

  • Никакая бесконечная частота дискретизации. DUT не должен содержать блоки с набором Sample time к Inf. Например, блокам Константа нужно было установить Sample time на-1. Чтобы установить шаг расчета на-1 для всех блоков Константа в вашем DUT, используйте следующий код MATLAB:

    blks = find_system(dut, 'BlockType', 'Constant');
    for i = 1:length(blks) 
       set_param(blks{i}, 'SampleTime', '-1'); 
    end
    

  • Никакие вводы или выводы шины.

  • Никакие настраиваемые параметры маски. Чтобы совместно использовать эти блоки, в Редакторе Маски, снимают флажок Tunable.

  • Если блок в обратной связи, по крайней мере один блок Unit Delay или Delay должен быть соединен с каждым выходным портом.

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

Отчет разделения ресурсов

Чтобы видеть информацию о разделении ресурсов в отчете, прежде чем вы сгенерируете код для каждой подсистемы или модели - ссылки, включают отчет Генерации кода. Чтобы включить отчет Генерации кода, в диалоговом окне Configuration Parameters, на панели HDL Code Generation, включают Generate optimization report.

Когда вы генерируете отчет генерации кода в разделе Streaming and Sharing Optimization Report, вы видите эффект оптимизации разделения ресурсов. Если разделение ресурсов неудачно, отчет показывает диагностические сообщения и нарушающие блоки что разделение ресурсов причины, чтобы перестать работать.

Если разделение ресурсов успешно, отчет отображает SharingFactor и таблицу, которая содержит группы блоков это совместно используемые ресурсы. Таблица содержит:

  • Group Id: уникальный идентификатор для группы подобных блоков Simulink®, тех, которые добавляют или блоки продукта, та доля ресурсы.

  • Resource Type: тип блока Simulink в группе совместного использования.

  • I/O Wordlengths: Размеры слова входных параметров к и выведенный от блока в группе совместного использования.

  • Group size: Количество блоков того же типа в группе совместного использования.

  • Block name: Имя блока, который принадлежит группе совместного использования.

  • Color Legend: Цвет, который подсвечивает все блоки в группе совместного использования.

Чтобы видеть совместно используемые ресурсы в вашей модели Simulink и в сгенерированной модели, щелкните по ссылке Highlight shared resources and diagnostics.

Примечание

Если блок MATLAB function в вашей модели Simulink успешно совместно используемые ресурсы, то ссылка Highlight shared resources and diagnostics не может подсветить совместно используемые ресурсы в блоке.

Связанные примеры

Больше о