В HDL Workflow Advisor выберите вкладку MATLAB to HDL Workflow> Code Generation> Optimizations.
Выберите опцию Map persistent array variables to RAMs.
Установите RAM mapping threshold на размер (в битах) самого маленького персистентного массива, пользовательская Система object™ частная собственность или dsp.Delay
, который вы хотите сопоставить с RAM.
Следующая таблица показывает сводные данные поведения отображения RAM для персистентных массивов и частных свойств пользовательского Системного объекта.
Сопоставьте персистентные переменные типа массив с установкой RAM | Отображение поведения |
---|---|
на | Сопоставьте с RAM. Для ограничений смотрите, что RAM Сопоставляет Ограничения. |
'off' | Сопоставьте с регистрами в сгенерированном HDL-коде. |
Когда вы включаете отображение RAM, персистентный массив или пользовательская частная собственность Системного объекта сопоставляют с блоком RAM, когда все следующие условия верны:
Каждый доступ для чтения или доступ для записи для одного элемента только. Например, доступ к субматрице и копии массивов не позволены.
Логика вычисления адреса не зависима чтением. Например, вычисление чтения или адреса записи с помощью данных, считанных из массива, не позволено.
Персистентные переменные или пользовательские частные свойства Системного объекта инициализируются к 0, если у них есть циклическая зависимость. Например, если у вас есть две персистентных переменные, A и B, у вас есть циклическая зависимость, если A зависит от B, и B зависит от A.
Если доступ в условном операторе, условный оператор использует только простые логические выражения (&&
, ||
, ~
) или операторы отношения. Например, в следующем коде, r1
не сопоставляет с RAM:
if (mod(i,2) > 0) a = r1(u); else r1(i) = u; end
Перепишите комплексные условия, такие как условия, которые вызывают функции путем присвоения их временным переменным и использования временных переменных в условном операторе. Например, чтобы сопоставить r1
с RAM, перепишите предыдущий код можно следующим образом:
temp = mod(i,2); if (temp > 0) a = r1(u); else r1(i) = u; end
Персистентный массив или пользовательское значение частной собственности Системного объекта зависят от внешних входных параметров.
Например, в следующем коде, bigarray
не сопоставляет с RAM, потому что это не зависит от 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
Сводные данные поведения отображения для Системного объекта dsp.Delay
находятся в следующей таблице.
Сопоставьте персистентные переменные типа массив с опцией RAM | Отображение поведения |
---|---|
на | Системный объект
Если какое-либо из условий является ложным, Системный объект |
'off' | Системный объект |