Вы можете написать код 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;