Реализуйте ОЗУ с помощью кода MATLAB

Можно записать MATLAB® код, который преобразуется в ОЗУ во время генерации HDL-кода при помощи:

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

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

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

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

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

Реализовать ОЗУ можно при помощи определяемых пользователем Системных объектов частной собственности аналогичным образом.

%#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 имеет те же ограничения, что и генерация кода из других System objects. Для получения дополнительной информации смотрите Ограничения Генерации 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;

См. также

|

Похожие темы