Можно записать MATLAB® код, который сопоставляет с RAM во время генерации HDL-кода при помощи:
Персистентные массивы или частные свойства в пользовательской Системе object™.
hdl.RAM
Системные объекты.
Следующие примеры демонстрируют ту же задержку линии MATLAB. Задержка линии использует память в кольцевой структуре. Данные записаны в одно местоположение и считаны из другого местоположения таким способом, которым записанные данные считаны после задержки определенного количества циклов. Адрес чтения 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
. Генерация кода от 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;