Dual Rate Dual Port RAM
2 つのレートをサポートするデュアル ポート RAM
ライブラリ:
HDL Coder /
HDL RAMs
説明
Dual Rate Dual Port RAM ブロックは、2 つのクロック レートで異なるアドレスに対する読み取りと書き込みの同時処理をサポートする RAM をモデル化します。RAM の端子 A と端子 B を異なるレートで実行できます。
このブロックを高性能ハードウェアの用途で使用すると、各クロック サイクルで RAM に 2 回アクセスできます。HDL コードを生成すると、このブロックはほとんどの FPGA でデュアルクロックのデュアルポート RAM にマッピングされます。
同時アクセス
端子 A と端子 B から異なるアドレスに同時にアクセスできます。端子 A と端子 B から同じアドレスを同時に読み取ることもできます。
ただし、一方の RAM 端子からアドレスに書き込んでいるときは、そのアドレスにもう一方の RAM 端子からアクセスしないでください。シミュレーション中に、一方の RAM 端子からアドレスにアクセスし、そのアドレスにもう一方の RAM 端子から同時に書き込みを行うと、ソフトウェアからエラーが報告されます。
書き込み中の読み取り動作
RAM では書き込み動作が優先されます。RAM に対して書き込みを行うと、新しい書き込みデータが出力端子ですぐに使用可能になります。
端子
入力
din_A — 端子 A の書き込みデータ入力
Scalar
(既定値) | Vector
we_A
が true の場合に RAM のメモリ位置に書き込むデータ。データは幅とデータ型を入力信号から継承します。din_A
は double
、single
、integer
、または fixed-point (fi)
オブジェクトに、および実数または複素数にできます。
データ型: スカラーの固定小数点、整数、または複素数
データ型: int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
addr_A — 端子 A の書き込みアドレス
Scalar
(既定値) | Vector
we_A
が true の場合にデータを書き込むアドレス。この値は fixed-point(fi)
または integer
のいずれかにでき、符号なしで小数部の長さが 0
でなければなりません。
データ型: uint8
| uint16
| uint32
| uint64
| fixed point
we_A — 端子 A の書き込みイネーブル
Scalar
(既定値) | Vector
RAM 端子 A の書き込みイネーブル。書き込み処理の場合は we_A
を true
に設定し、読み取り処理の場合は false
に設定します。
データ型: Boolean
din_B — 端子 B の書き込みデータ
Scalar
(既定値) | Vector
we_B
が true の場合に RAM のメモリ位置に書き込むデータ。データは幅とデータ型を入力信号から継承します。din_B
は double
、single
、integer
、または fixed-point (fi)
オブジェクトに、および実数または複素数にできます。
データ型: スカラーの固定小数点、整数、または複素数
データ型: int8
| int16
| int32
| int64
| fixed point
addr_B — 端子 B の書き込みアドレス
Scalar
(既定値) | Vector
we_B
が true の場合にデータを書き込むアドレス。この値は fixed-point(fi)
または integer
のいずれかにでき、符号なしで小数部の長さが 0
でなければなりません。
データ型: スカラーの固定小数点、整数、または複素数
データ型: int8
| int16
| int32
| int64
| fixed point
we_B — 端子 B の書き込みイネーブル
Scalar
(既定値) | Vector
RAM 端子 B の書き込みイネーブル。書き込み処理の場合は we_B
を true
に設定し、読み取り処理の場合は false
に設定します。
データ型: Boolean
出力
dout_A — 端子 A の出力データ
Scalar
(既定値) | Vector
RAM 端子 A のアドレス addr_A
からの出力データ。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
dout_B — 端子 B の出力データ
Scalar
(既定値) | Vector
RAM 端子 B のアドレス addr_B
からの出力データ。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
パラメーター
Address port width — アドレスのビット幅
8 (既定値)
最小ビット幅は 2、最大ビット幅は 28 です。
プログラムでの使用
ブロック パラメーター: ram_size |
型: string スカラー | 文字ベクトル |
値: 最小値は 2 、最大値は 28 |
既定の設定: '8' |
アルゴリズム
RAM ブロックに対して生成された HDL コードには以下が含まれます。
読み取りデータ出力に対する 1 クロック サイクルのレイテンシ。
リセット信号はなし。HDL コードにリセットが含まれていると、一部の合成ツールで RAM が推定されないためです。
RAM ブロックのコード生成では、blockname.ext
という個別のファイルが作成されます。blockname
は、RAM ブロックの名前から派生します。ext
は、ターゲット言語のファイル名拡張子です。
RAM の初期化
RAM を初期化するために生成されるコードはシミュレーションのみを目的としています。このコードは合成ツールでは無視してかまいません。
クロック イネーブルを搭載または搭載しない RAM の実装
HDL ブロック プロパティ RAMArchitecture
を使用すると、サブシステム内のすべての RAM ブロックでクロック イネーブル ロジックの生成が有効化または抑制されます。RAMArchitecture
は次の値に設定できます。
WithClockEnable
(既定の設定): クロック イネーブル信号を含む HDL テンプレートを使用した RAM と空の RAM ラッパーが生成されます。WithoutClockEnable
:クロック イネーブルを搭載しない RAM とクロック イネーブル ロジックを実装する RAM ラッパーが生成されます。
一部の合成ツールでは、クロック イネーブルを含む RAM は推定されません。合成ツールでクロック イネーブルを含む RAM 構造がサポートされず、生成された HDL コードを FPGA RAM リソースにマッピングできない場合は、RAMArchitecture
を WithoutClockEnable
に設定します。
RAM 推定の制限
RAM ブロックを使用して読み取りと書き込みの同時処理を実行する場合、ハードウェアにおける書き込み中の読み取り動作を確認してください。Simulink® における RAM ブロックの書き込み中の読み取り動作は、生成された HDL コードの動作と一致します。ただし、合成ツールが RAM 推定時に同じ動作に従わない場合、ハードウェアにおける書き込み中の読み取り動作が Simulink モデルまたは生成された HDL コードと異なる動作になります。
合成ツールでは、次の理由で、生成されたコードが RAM にマッピングされないことがあります。
RAM のサイズが小さい。合成ツールでは、パフォーマンスを高めるために、小さい RAM はレジスタを使用して実装されます。
クロック イネーブル信号がある。RAM ブロックでは、クロック イネーブルを搭載または搭載しない RAM の実装に示すように、クロック イネーブル信号の生成を抑制できます。
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加の構成オプションがあります。
メモ
生成された HDL コードと一致するシミュレーション結果の場合、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで、[各離散レートを個別のタスクとして扱う] のチェックボックスをオフにします。このチェックボックスをオフにすると、シングルタスク モードが有効になります。このチェック ボックスを選択してブロックをシミュレーションすると、出力データを同じサイクルで更新できますが、生成された HDL コードでは、出力データは 1 サイクル遅れて更新されます。
このブロックには 1 つの既定の HDL アーキテクチャがあります。
一般 | |
---|---|
ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
メモ
Dual Rate Dual Port RAM には単一クロックのインターフェイスがないため、このブロックでは [RAMDirective] プロパティは使用できません。
このブロックは複素信号のコード生成をサポートしています。実数値と複素数の入力を混在させることはできません。
バージョン履歴
R2014a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)