В HDL Workflow Advisor выберите вкладку MATLAB to HDL Workflow > Code Generation > Optimizations.
Выберите опцию Map persistent array variables to RAMs.
Установите размер RAM mapping threshold (в битах) наименьшего стойкого массива, определяемой пользователем System object™ частная собственность или dsp.Delay
что вы хотите сопоставить с ОЗУ.
Следующая таблица показывает сводные данные поведения отображения ОЗУ для постоянных массивов и частной собственности пользовательского Системного объекта.
Сопоставление переменных стойкого массива с настройкой ОЗУ | Поведение отображения |
---|---|
на | Сопоставьте с ОЗУ. Ограничения см. в разделе Ограничения отображения ОЗУ. |
прочь | Сопоставьте с регистрами в сгенерированном HDL-коде. |
Когда вы активируете отображение ОЗУ, постоянный массив или определяемый пользователем Системный объект частной собственности преобразуется в блок ОЗУ, когда все следующие условия верны:
Каждый доступ для чтения или записи предназначен только для одного элемента. Для примера доступ к подматрице и копии массивов не разрешены.
Логика расчета адреса не зависит от чтения. Например, расчет адреса чтения или записи с использованием данных, считанных из массива, не разрешено.
Постоянные переменные или пользовательские частная собственность системного объекта инициализируются в 0, если они имеют циклическую зависимость. Например, если у вас есть две стойкие переменные, A и B, у вас есть циклическая зависимость, если A зависит от B, и B зависит от A.
Если доступ находится в пределах условного оператора, условный оператор использует только простые логические выражения (&&
, ||
, ~
) или реляционные операторы. Например, в следующем коде r1
не сопоставляется с ОЗУ:
if (mod(i,2) > 0) a = r1(u); else r1(i) = u; end
Перепишите сложные условия, такие как условия, которые вызывают функции, путем назначения их временным переменным и использования временных переменных в условном операторе. Например, чтобы сопоставить r1
в оперативную память перепишите предыдущий код следующим образом:
temp = mod(i,2); if (temp > 0) a = r1(u); else r1(i) = u; end
Значение частной собственности стойкого массива или пользовательского системного объекта зависит от внешних входов.
Например, в следующем коде bigarray
не сопоставляется с ОЗУ, потому что не зависит от u
:
function z = foo(u) persistent cnt bigarray if isempty(cnt) cnt = fi(0,1,16,10,hdlfimath); bigarray = uint8(zeros(1024,1)); end z = u + cnt; idx = uint8(cnt); temp = bigarray(idx+1); cnt(:) = cnt + fi(1,1,16,0,hdlfimath) + temp; bigarray(idx+1) = idx;
RAMSize
больше или равно RAMMappingThreshold
значение. RAMSize
является ли продукт NumElements * WordLength * Complexity
.
NumElements
- количество элементов в массиве.
WordLength
- количество бит, представляющих тип данных массива.
Complexity
является 2 для массивов с комплексным базовым типом; 1 в противном случае.
Если любое из вышеуказанных условий является ложным, постоянный массив или определяемая пользователем Системный объект частной собственности преобразуется в регистр в HDL-коде.
dsp.Delay
System ObjectsСводные данные поведения отображения для dsp.Delay
Системный объект приведен в следующей таблице.
Сопоставить переменные стойкого массива с опцией RAM | Поведение отображения |
---|---|
на | A
Если любое из условий ложно, |
прочь | A |