Реализуйте RAM Используя код MATLAB

Реализация RAM

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

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

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

Следующие примеры моделируют ту же задержку линии MATLAB. Однако один пример использует персистентный массив и другое использование hdl.RAM Системный объект, чтобы смоделировать поведение RAM.

Задержка линии использует память в кольцевой структуре. Данные записаны в одно местоположение и считаны из другого местоположения таким способом, которым записанные данные считаны после задержки определенного количества циклов. Адрес чтения RAM сгенерирован счетчиком. Адрес записи сгенерирован путем добавления постоянного значения в адрес чтения.

Для сравнения путей можно записать код MATLAB, чтобы сопоставить с RAM во время генерации HDL-кода, и для обзора компромиссов, видеть, что RAM Сопоставляет Сравнение для кода MATLAB. Для получения дополнительной информации см. Карту Персистентные Массивы и dsp. Задержитесь к RAM.

Реализуйте 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;

Реализуйте RAM Используя 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-кода для Системных объектов.