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