Можно записать 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;