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 идентифицирует и совместно использует функционально эквивалентные множители.
Если вы задаете ненулевой фактор совместного использования для 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);
HDL Coder не делает ссылок модели поддержки для разделения ресурсов.
Блоки, которые будут совместно использованы, должны иметь следующие требования:
Односкоростной.
Никакая бесконечная частота дискретизации. 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®, тех, которые добавляют или блоки продукта, та доля ресурсы.
Resource Type: тип блока Simulink в группе совместного использования.
I/O Wordlengths: Размеры слова входных параметров к и выведенный от блока в группе совместного использования.
Group size: Количество блоков того же типа в группе совместного использования.
Block name: Имя блока, который принадлежит группе совместного использования.
Color Legend: Цвет, который подсвечивает все блоки в группе совместного использования.
Чтобы видеть совместно используемые ресурсы в вашей модели Simulink и в сгенерированной модели, щелкните по ссылке Highlight shared resources and diagnostics.