Main Content

MATLAB コードによる RAM の実装

HDL コード生成中に RAM をマッピングする MATLAB® コードを記述するには、次のものを使用します。

  • ユーザー定義 System object™ 内の永続配列またはプライベート プロパティ

  • hdl.RAM System object

次の例は、どちらも MATLAB で同じライン遅延をモデル化しています。このライン遅延には、メモリをリング構造で使用します。データをある場所に書き込んでから、指定のサイクル数をもつ遅延後に、別の場所から読み取ります。RAM の読み取りアドレスはカウンターによって生成されます。書き込みアドレスは書き込みアドレスに定数値を加算して生成されます。

永続配列または System object プロパティを使用した RAM の実装

この例では、関数 mlhdlc_hdlram_persistent で永続配列を使用して RAM の動作を実装するライン遅延を説明します。永続配列での特定の値の変更は、RAM への書き込みに相当します。永続配列での特定の値へのアクセスは、RAM からの読み取りに相当します。

ユーザー定義 System object のプライベート プロパティを同様に使用して 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;

% To write and read the memory, manipulate the values in the array

hRam(ramWriteAddr)=ramWriteData;
ramRdDout=hRam(ramReadAddr);

rdAddrCtr = rdAddrCtr + 1;

data_out = ramRdDout;

hdl.RAM を使用した RAM の実装

この例では、関数 mlhdlc_hdlram_sysobjhdl.RAM を使用して RAM の動作を実装するライン遅延を説明します。この関数では、hdl.RAM System object の step メソッドが、hRam の特定の位置に対して読み取りと書き込みを行います。hdl.RAM からコードを生成する場合の制限は、他の System objects からコードを生成する場合と同じです。詳細は、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;

% To write and read the memory, call the RAM object
[~,ramRdDout] = hRam(ramWriteData,ramWriteAddr, ...
                      ramWriteEnable,ramReadAddr);

rdAddrCtr = rdAddrCtr + 1;

data_out = ramRdDout;

参考

|

関連するトピック