hdl.RAM

Один, простой двойной, или двухпортовый RAM для доступа для чтения-записи памяти

Описание

hdl.RAM чтения от и записи к ячейкам памяти для одного, простого двойного, или двухпортового RAM. Выходные данные задерживаются один шаг. Если ваши входные данные являются скаляром, адрес и входные параметры разрешения записи должны быть скаляром, andHDL Coder™ выводит один блок RAM. Если ваши данные являются вектором, HDL Coder выводит массив параллельных банков RAM. С векторным вводом данных адрес и входные параметры разрешения записи могут быть оба скалярами или векторами. Когда вы задаете скалярные входные параметры для разрешения записи и обращаетесь к портам, системный объект применяет ту же операцию к каждому банку RAM.

hdl.RAM Система object™ может иметь 231 байты внутренней памяти. Размер RAM учитывает ширину адреса, количество байтов, которые используются, чтобы сохранить каждое слово и количество банков RAM.

Читать из или записать в ячейки памяти в RAM:

  1. Создайте hdl.RAM объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

пример

ram = hdl.RAM возвращает один Системный объект порта RAM, в который можно записать или считать из ячейки памяти.

пример

ram = hdl.RAM(Name,Value) возвращает один, простой двойной, или двухпортовый Системный объект RAM с набором свойств с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Тип RAM, заданного как также:

  • 'Single port' — Создайте один порт RAM с, Записывают данные, Адрес и Разрешение записи как входные параметры и Считанные данные как выход.

  • 'Simple dual port' — Создайте простой двухпортовый RAM с, Записывают данные, адрес Записи, Разрешение записи и адрес Рида как входные параметры и данные из адреса чтения как выход.

  • 'Dual port' — Создайте двухпортовый RAM с, Записывают данные, адрес Записи, Разрешение записи и адрес Рида как входные параметры и данные из адреса чтения и адреса записи как выходные параметры.

Поведение для Write выход, заданный как также:

  • 'New data' — Отошлите новые данные в адресе к выходу.

  • Old data' — Отошлите старые данные в адресе к выходу.

Зависимости

Задайте это свойство, когда вы установите RamType на 'Single port' или 'Dual port'. Это свойство не запрашивает Simple Dual Port RAM объект.

Начальная симуляция выход Системного объекта, заданного как также:

  • Скалярное значение.

  • Вектор со взаимно-однозначным отображением между начальным значением и словами RAM.

Использование

Описание

dataOut = ram(wrData,rwAddress,wrEn) читает значение в ячейке памяти rwAddress когда wrEn является ложным. Когда wrEn верно, вы пишете значению wrData в ячейку памяти rwAddress. dataOut новые или старые данные в rwAddress. Используйте этот синтаксис, когда вы создадите один Системный объект порта RAM.

rdDataOut = ram(wrData,wrAddress,wrEn,rdAddress) пишет значение wrData в ячейку памяти wrAddress когда wrEn верно. rdDataOut старые данные в местоположении адреса rdAddress. Используйте этот синтаксис, когда вы создадите простой двухпортовый Системный объект RAM.

[wrDataOut,rdDataOut] = ram(wrData,wrAddress,wrEn,rdAddress) пишет значение wrData в ячейку памяти wrAddress когда wrEn верно. wrDataOut новые или старые данные в ячейке памяти wrAddress. rdDataOut старые данные в местоположении адреса rdAddress. Используйте этот синтаксис, когда вы создадите двухпортовый Системный объект RAM.

Входные параметры

развернуть все

Данные, которые вы пишете в местоположение Оперативной памяти когда wrEn верно. Этим значением может быть doubleединственныйЦелое число, или fixed-point (fi) объект, и может быть действительным или комплексным.

Типы данных: single | double | int8 | int16 | uint8 | uint16 | fi

Обратитесь к этому, вы пишете wrData в когда wrEn верно. Системный объект читает значение в ячейке памяти rwAddress когда wrEn является ложным. Этим значением может быть любой fixed-point (fi) или integer, должно быть без знака, и должен быть между 2 и 31 биты долго. Задайте этот адрес, когда вы создадите один объект порта RAM.

Типы данных: uint8 | uint16 | fi

Когда wrEn верно, вы пишете wrData в местоположение Оперативной памяти. Если вы создаете один порт RAM, Системный объект читает значение в ячейке памяти когда wrEn является ложным. Это значение должно быть логическим.

Типы данных: логический

Обратитесь к этому, вы считываете данные из того, когда вы создаете простой двухпортовый RAM или двухпортовый Системный объект RAM. Этим значением может быть любой fixed-point (fi) или integer, должно быть без знака, и должен быть между 2 и 31 биты долго.

Типы данных: uint8 | uint16 | fi

Обратитесь к этому, вы вписываете в данные, когда вы создаете простой двухпортовый RAM или двухпортовый Системный объект RAM. Этим значением может быть любой fixed-point (fi) или integer, должно быть без знака, и должен быть между 2 и 31 биты долго.

Типы данных: uint8 | uint16 | fi

Выходные аргументы

развернуть все

Выходные данные, что Системный объект читает из ячейки памяти rwAddress один порт RAM возражает когда wrEn является ложным.

Старые выходные данные, что Системный объект читает из ячейки памяти rdAddress из простого двухпортового RAM или двухпортового Системного объекта RAM.

Новые или старые выходные данные, что Системный объект читает из ячейки памяти wrAddress из простого двухпортового RAM или двухпортового Системного объекта RAM.

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Создайте Системный объект, чтобы читать из или записать в ячейку памяти в RAM. Установите WriteOutputValue к Old data возвращать предыдущее значение, сохраненное в адресе записи.

Порт выходных данных соответствует адресу чтения-записи, переданному в. Во время операции записи старые данные в адресе записи отосланы как выход.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

ram_1p = hdl.RAM('RAMType','Single port',...
                           'WriteOutputValue','Old data')
ram_1p = 
  hdl.RAM with properties:

             RAMType: 'Single port'
    WriteOutputValue: 'Old data'
     RAMInitialValue: 0

dataLength    = 10;
dataIn = 1:10;
dataOut = zeros(1,dataLength);

Запишите шаблон количества в память. Предыдущие значения на первых записях являются всем нулем.

for ii = 1:dataLength
  addressIn   = uint8(ii-1);
  writeEnable = true;
  dataOut(ii) = ram_1p(dataIn(ii),addressIn,writeEnable);
end
dataOut
dataOut = 1×10

     0     0     0     0     0     0     0     0     0     0

Считайте данные назад.

for ii = 1:dataLength
  addressIn   = uint8(ii-1);
  writeEnable = false;
  dataOut(ii) = ram_1p(dataIn(ii),addressIn,writeEnable);
end
dataOut
dataOut = 1×10

     0     1     2     3     4     5     6     7     8     9

Теперь запишите количество в обратном порядке. Предыдущие значения являются исходным количеством.

for ii = 1:dataLength
  addressIn   = uint8(ii-1);
  writeEnable = true;
  dataOut(ii) = ram_1p(dataIn(dataLength-ii+1),addressIn,writeEnable);
end
dataOut
dataOut = 1×10

    10     1     2     3     4     5     6     7     8     9

Создайте Системный объект, который пишет в один порт RAM и читает недавно записанное значение.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

Создайте однопортовый Системный объект RAM. Когда вы пишете местоположение, объект возвращает новое значение. Размер RAM выведен из bitwidth адреса, и запишите данные на первом вызове объекта.

ram_1p = hdl.RAM('RAMType','Single port','WriteOutputValue','New data');
dataLength       = 16;
[dataIn,dataOut] = deal(uint8(zeros(1,dataLength)));

Запись случайным образом сгенерировала данные к Системному объекту, и затем считала данные назад снова.

for ii = 1:dataLength
  dataIn(ii)  = randi([0 63],1,1,'uint8');
  addressIn   = fi((ii-1),0,4,0);
  writeEnable = true;
  dataOut(ii) = ram_1p(dataIn(ii),addressIn,writeEnable);
end  
dataOut
dataOut = 1x16 uint8 row vector

    0   52   57    8   58   40    6   17   35   61   61   10   62   61   31   51

for ii = 1:dataLength
  addressIn   = fi((ii-1),0,4,0);
  writeEnable = false;
  dataOut(ii) = ram_1p(dataIn(ii),addressIn,writeEnable);
end
dataOut
dataOut = 1x16 uint8 row vector

    9   52   57    8   58   40    6   17   35   61   61   10   62   61   31   51

Создайте Системный объект, чтобы читать из и записать в различные ячейки памяти в RAM.

Порт выходных данных соответствует адресу чтения. Если операция чтения выполняется в том же адресе как операция записи, старые данные в том адресе определены как выход. Размер RAM выведен из bitwidth адреса, и запишите данные на первом вызове объекта.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

ram_2p = hdl.RAM('RAMType','Simple dual port');
dataLength       = 16;
[dataIn,dataOut] = deal(uint8(zeros(1,dataLength)));

Запись случайным образом сгенерировала данные к Системному объекту и считала старые данные из того же адреса.

for ii = 1:dataLength
  dataIn(ii)  = randi([0 63],1,1,'uint8');
  wrAddr  = fi((ii-1),0,4,0);
  writeEnable = true;
  dataOut(ii) = ram_2p(dataIn(ii),wrAddr,writeEnable,wrAddr);
end  
dataOut
dataOut = 1x16 uint8 row vector

   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

Запишите и читайте из различных адресов. Объект возвращает результат чтения после одной задержки цикла.

for ii = 1:dataLength
  wrAddr   = fi((ii-1),0,4,0);
  rdAddr   = fi(dataLength-ii+1,0,4,0);
  writeEnable = true;
  dataOut(ii) = ram_2p(dataIn(ii),wrAddr,writeEnable,rdAddr);
end
dataOut
dataOut = 1x16 uint8 row vector

    0    9    9   51   31   61   62   10   61   61   35   17    6   40   58    8

Создайте Системный объект, чтобы читать из и записать в различные ячейки памяти в RAM.

Существует два выходных порта: порт выходных данных записи и порт выходных данных чтения. Порт выходных данных записи отсылает новые данные в адресе записи. Порт выходных данных чтения отсылает старые данные в адресе чтения. Размер RAM выведен из bitwidth адреса, и запишите данные на первом вызове объекта.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

ram_2p = hdl.RAM('RAMType','Dual port','WriteOutputValue','New data');
dataLength       = 16;
[dataIn,wrDataOut,rdDataOut] = deal(uint8(zeros(1,dataLength)));

Запись случайным образом сгенерировала данные к Системному объекту и считала старые данные из того же адреса.

for ii = 1:dataLength
  dataIn(ii)  = randi([0 63],1,1,'uint8');
  wrAddr  = fi((ii-1),0,4,0);
  writeEnable = true;
  [wrDataOut(ii),rdDataOut(ii)] = ram_2p(dataIn(ii),wrAddr,writeEnable,wrAddr);
end  
wrDataOut
wrDataOut = 1x16 uint8 row vector

    0   52   57    8   58   40    6   17   35   61   61   10   62   61   31   51

rdDataOut
rdDataOut = 1x16 uint8 row vector

   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

Запишите и читайте из различных адресов. Объект возвращает результат чтения после одной задержки цикла.

for ii = 1:dataLength
  wrAddr   = fi((ii-1),0,4,0);
  rdAddr   = fi(dataLength-ii+1,0,4,0);
  writeEnable = true;
  [wrDataOut(ii),rdDataOut(ii)] = ram_2p(dataIn(ii),wrAddr,writeEnable,rdAddr);
end
wrDataOut
wrDataOut = 1x16 uint8 row vector

    9   52   57    8   58   40    6   17   35   61   61   10   62   61   31   51

rdDataOut
rdDataOut = 1x16 uint8 row vector

    0    9    9   51   31   61   62   10   61   61   35   17    6   40   58    8

Создайте Системный объект, который может записать векторные данные в двухпортовый RAM и считать векторные данные. Каждый элемент вектора соответствует отдельному банку RAM. Этот пример создает 4 16-битных банка. Каждый банк имеет восемь записей.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

Создайте двухпортовый Системный объект RAM.

ram_2p = hdl.RAM('RAMType','Dual port','WriteOutputValue','New data');

Создайте вектор, записывают данные, и обращается. Используйте 3-битный адрес (в 8 местах) и запишите 16-битные данные. Считайте и запишите, что адреса независимы. Выделите память для выходных данных.

ramDataIn = fi(randi((2^16)-1,1,4),0,16,0);
ramReadAddr = fi([1,1,1,1],0,3,0);
ramWriteAddr = fi([1,1,1,1],0,3,0);
[wrOut,rdOut] = deal(fi(zeros(1,4),0,16,0));

Во-первых, напишите местоположения в банке 1 и 4, затем считайте все банки. Данные о записи отражены в wrOut выходной аргумент. Объект возвращает результаты чтения после одной задержки цикла.

[wrOut,rdOut] = ram_2p(ramDataIn,ramWriteAddr,[true,false,false,true],ramReadAddr);
[wrOut,rdOut] = ram_2p(ramDataIn,ramWriteAddr,[false,false,false,false],ramReadAddr);
[wrOut,rdOut] = ram_2p(ramDataIn,ramWriteAddr,[false,false,false,false],ramReadAddr)
wrOut=1×4 object
       53393           0           0       59859

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 0

rdOut=1×4 object
       53393           0           0       59859

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 0

Алгоритмы

развернуть все

В вашей модели Simulink® можно использовать hdl.RAM в MATLAB System или блоке MATLAB Function. Если вы регистрируете выход блока MATLAB System, выходные данные имеет, по крайней мере, три измерения, потому что блок MATLAB System имеет по крайней мере две размерности, и данные времени добавляют третью размерность. Например, если вы вводите скалярные данные с блоком, регистрируемые выходные данные имеет размерность 1x1xN, где N количество временных шагов. Чтобы получить выходную размерность, которая является тем же самым как входная размерность, добавьте блок Reshape при выходе с набором Output dimensionality к Derive from reference input port.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.

Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.

Представленный в R2015a