Можно записать код MATLAB®, который сопоставляет с RAM во время генерации HDL-кода при помощи:
Персистентные массивы или частные свойства в пользовательской Системе object™.
hdl.RAM Системные объекты.
Следующие примеры моделируют ту же задержку линии MATLAB. Однако один пример использует персистентный массив и другое использование hdl.RAM Системный объект, чтобы смоделировать поведение RAM.
Задержка линии использует память в кольцевой структуре. Данные записаны в одно местоположение и считаны из другого местоположения таким способом, которым записанные данные считаны после задержки определенного количества циклов. Адрес чтения RAM сгенерирован счетчиком. Адрес записи сгенерирован путем добавления постоянного значения в адрес чтения.
Для сравнения путей можно записать код MATLAB, чтобы сопоставить с RAM во время генерации HDL-кода, и для обзора компромиссов, видеть, что RAM Сопоставляет Сравнение для кода MATLAB. Для получения дополнительной информации см. Карту Персистентные Массивы и dsp. Задержитесь к RAM.
Этот пример показывает задержку линии, которая реализует поведение RAM с помощью персистентного массива с функциональным mlhdlc_hdlram_persistent. Изменение определенного значения в персистентном массиве эквивалентно записи в RAM. Доступ к определенному значению в массиве эквивалентен чтению от RAM.
Можно реализовать RAM при помощи пользовательских частных свойств Системного объекта таким же образом.
%#codegen
function data_out = mlhdlc_hdlram_persistent(data_in)
persistent hRam;
if isempty(hRam)
hRam = zeros(128,1);
end
% read address counter
persistent rdAddrCtr;
if isempty(rdAddrCtr)
rdAddrCtr = 1;
end
% ring counter length
ringCtrLength = 10;
ramWriteAddr = rdAddrCtr + ringCtrLength;
ramWriteData = data_in;
%ramWriteEnable = true;
ramReadAddr = rdAddrCtr;
% execute single step of RAM
hRam(ramWriteAddr)=ramWriteData;
ramRdDout=hRam(ramReadAddr);
rdAddrCtr = rdAddrCtr + 1;
data_out = ramRdDout;
hdl.RAMЭтот пример показывает задержку линии, которая реализует поведение RAM с помощью hdl.RAM с функцией, mlhdlc_hdlram_sysobj. В этой функции, step метод hdl.RAM Чтения системного объекта и записи к определенным местоположениям в hRam.
%#codegen
function data_out = mlhdlc_hdlram_sysobj(data_in)
persistent hRam;
if isempty(hRam)
hRam = hdl.RAM('RAMType', 'Dual port');
end
% read address counter
persistent rdAddrCtr;
if isempty(rdAddrCtr)
rdAddrCtr = 0;
end
% ring counter length
ringCtrLength = 10;
ramWriteAddr = rdAddrCtr + ringCtrLength;
ramWriteData = data_in;
ramWriteEnable = true;
ramReadAddr = rdAddrCtr;
% execute single step of RAM
[~,ramRdDout] = step(hRam,ramWriteData,ramWriteAddr, ...
ramWriteEnable,ramReadAddr);
rdAddrCtr = rdAddrCtr + 1;
data_out = ramRdDout;
hdl.RAM Ограничения для генерации кодаГенерация кода от hdl.RAM имеет те же ограничения как генерация кода от другого System objects. Для получения дополнительной информации смотрите Ограничения генерации HDL-кода для Системных объектов.