Совместное использование ресурсов

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

Как работает совместное использование ресурсов

Можно задать sharing factor SF для подсистемы или блока 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 ÷ <reservedrangesplaceholder1>) × <reservedrangesplaceholder0>

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

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

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

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

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

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

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

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

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

  • Gain

  • Product

  • Multiply-Add

  • Add или Sum с двумя входами

  • Atomic Subsystem

  • MATLAB Function

Генератор кода использует функционально эквивалентные блоки MATLAB Function с фиксированными точками. Когда вы используете типы с плавающей точкой или используете MATLAB Datapath архитектура для блоков MATLAB Function с фиксированными точками, HDL Coder рассматривает блок MATLAB Function как регулярный Subsystem. Затем можно обмениваться функционально эквивалентными ресурсами внутри блока MATLAB Function. Дополнительные сведения см. в разделе Использование архитектуры MATLAB Datapath для совместного использования с блоками MATLAB function.

Указание совместного использования ресурсов

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

  • На вкладке Apps выберите HDL Coder. Появится вкладка HDL Code. Выберите подсистему, модель-ссылку или MATLAB Function блок и нажмите HDL Block Properties. В поле SharingFactor введите количество общедоступных ресурсов.

  • Щелкните правой кнопкой мыши подсистему, модель-ссылку или MATLAB Function блок и выберите HDL Code > HDL Block Properties. В поле SharingFactor введите количество общедоступных ресурсов.

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

modelname = 'sfir_fixed'
dut = 'sfir_fixed/symmetric_fir';
open_system(modelname)
hdlset_param(dut,'SharingFactor', 4);

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

  • Многократное совместное использование не может совместно использовать ресурсы, которые имеют разное количество трубопроводов, вставленных из адаптивной конвейеризации.

  • Модели-ссылки не поддерживаются для совместного использования ресурсов.

Блочные требования к совместному использованию ресурсов

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

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

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

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

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

  • Без настраиваемых параметров маски. Для совместного использования этих блоков в редакторе масок снимите флажок Tunable.

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

Чтобы узнать о параметрах блока и требованиях к совместному использованию ресурсов, смотрите:

Отчет о совместном использовании ресурсов

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

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

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

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

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

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

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

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

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

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

Похожие примеры

Подробнее о