exponenta event banner

Реализация ОЗУ с использованием кода MATLAB

Вы можете написать код MATLAB ®, который сопоставляется с оперативной памятью во время создания кода HDL, используя :

  • Постоянные массивы или частные свойства в определяемой пользователем системной object™.

  • hdl.RAM Системные объекты.

В следующих примерах моделируется та же задержка линии в MATLAB. Линейная задержка использует память в кольцевой структуре. Данные записываются в одно местоположение и считываются из другого местоположения таким образом, что записанные данные считываются после задержки определенного числа циклов. Адрес считывания ОЗУ генерируется счетчиком. Адрес записи генерируется путем добавления постоянного значения к адресу считывания.

Реализация ОЗУ с использованием постоянного массива или свойств системного объекта

В этом примере показана задержка строки, которая реализует поведение ОЗУ с использованием постоянного массива с функцией mlhdlc_hdlram_persistent. Изменение определенного значения в постоянном массиве эквивалентно записи в ОЗУ. Доступ к определенному значению в массиве эквивалентен чтению из ОЗУ.

Можно реализовать ОЗУ с помощью пользовательских свойств private объекта System таким же образом.

%#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

В этом примере показана задержка линии, которая реализует поведение ОЗУ с помощью hdl.RAM с функцией, mlhdlc_hdlram_sysobj. В этой функции step способ hdl.RAM Системный объект читает и записывает в определенные расположения в hRam. Создание кода из hdl.RAM имеет те же ограничения, что и создание кода из других системных объектов. Дополнительные сведения см. в разделе Ограничения создания кода HDL для системных объектов.

%#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;

См. также

|

Связанные темы