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_sysobj
で hdl.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;