このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
hdl.RAM System object からの HDL コード生成
この例では、MATLAB で hdl.RAM System object™ からの MATLAB® コードから HDL コードを生成し、生成されたハードウェアで RAM を推定する方法を示します。
MATLAB 設計
この例では、リング構造のメモリを使用するライン遅延の実装を示します。この構造では、書き込まれたデータが特定のサイクル数後に読み取られるように、データをある位置に書き込み、別の位置から読み取ります。Virtex FPGA でのこのアーキテクチャの効率的な実装では、オンチップのデュアル ポート ブロック RAM およびアドレス カウンターを使用します。ブロック RAM は、512x8 または 256x9 の同期デュアル ポート RAM として構成できます。遅延の長さをパラメーター化するために、RAM 書き込みアドレスはカウンターによって生成され、読み取りアドレスは書き込みアドレスに定数 K を加算して生成されます。メモリ サイズが M の場合、入力は、メモリに書き込まれてから M-K クロック サイクル後に読み取られます。そのため、M-K 単語シフト動作を実装します。
design_name = 'mlhdlc_hdlram'; testbench_name = 'mlhdlc_hdlram_tb';
MATLAB 設計を確認します。
type(design_name);
%#codegen function data_out = mlhdlc_hdlram(data_in) % % This example shows implementation of a line delay that uses a memory in a % ring structure, where data is written in one position and read from % another position in such a way that the data written will be read after a % specific number of cycles. An efficient implementation of this % architecture on Virtex FPGAs uses the on-chip Dual Port Block RAMs and an % address counter. The Block RAMs can be configured as 512x8 or 256x9 % synchronous Dual Port RAMs. To parameterize the delay length, the RAM % write address is generated by a counter and the read address is generated % by adding a constant K to the write address. If the memory size is M, the % input will be read M-K clock cycles after it was written to the memory, % hence implementing M-K word shift behaviour. % Copyright 2012-2015 The MathWorks, Inc. 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;
type(testbench_name);
function mlhdlc_hdlram_tb % % Copyright 2012-2015 The MathWorks, Inc. clear test_hdlram; data = 100:200; ring_out = zeros(1, length(data)); for ii=1:100 ring_in = data(ii); ring_out(ii) = mlhdlc_hdlram(ring_in); end figure('Name', [mfilename, '_plot']); subplot(2,1,1); plot(1:100,data(1:100)); title('Input data to the ring counter') subplot(2,1,2); plot(1:100,ring_out(1:100)); title('Output data') end
設計のシミュレーション
コードの生成前にテスト ベンチを使用して設計をシミュレートし、実行時エラーがないことを確認します。
mlhdlc_hdlram_tb
HDL Coder™ プロジェクトの新規作成
新しいプロジェクトを作成するには、次のコマンドを入力します。
coder -hdlcoder -new mlhdlc_sysobj_prj
次に、mlhdlc_hdlram.m
ファイルを MATLAB 関数としてプロジェクトに追加し、mlhdlc_hdlram_tb.m
を MATLAB テスト ベンチとして追加します。
MATLAB HDL Coder プロジェクトの作成と入力に関する詳細なチュートリアルについては、MATLAB から HDL へのワークフロー入門を参照してください。
固定小数点変換と HDL コード生成の実行
ワークフロー アドバイザーを起動します。ワークフロー アドバイザーで、[コード生成] の手順を右クリックします。[選択したタスクまで実行] オプションを選択して、最初から HDL コード生成までのすべての手順を実行します。
ログ ウィンドウにあるリンクをクリックして、生成された HDL コードを確認します。
サポートされている System object
HDL コード生成でサポートされている System object のリストについては、HDL コード生成に使用できる事前定義済みの System Objectsを参照してください。