2.4.2.1. 高速クロック・ドメイン
2.4.2.2. ループの再構築
2.4.2.3. コントロール信号のバックプレッシャー
2.4.2.4. FIFOステータス信号によるフロー・コントロール
2.4.2.5. スキッドバッファーを使用したフロー制御
2.4.2.6. リードモディファイライトメモリー
2.4.2.7. カウンターとアキュムレーター
2.4.2.8. ステートマシン
2.4.2.9. メモリー
2.4.2.10. DSPブロック
2.4.2.11. 一般ロジック
2.4.2.12. モジュラスと除算
2.4.2.13. リセット
2.4.2.14. ハードウェアの再利用
2.4.2.15. アルゴリズム要件
2.4.2.16. FIFO
2.4.2.17. 三進加算器
2.4.2.9.2. シンプル・デュアル・ポート・メモリー
インテル® Hyperflex™ アーキテクチャーを元のデザインに各ポートで異なるクロックを使用するデュアル・ポート・メモリーが含まれているかどうかを検討します。デザインが実際に両方の書き込みポートで同じクロックを使用している場合、2つのシンプルなデュアル・クロック・メモリーを使用して再構成します。
この方法の利点は、シンプルなデュアルポートブロックが1GHzまでの周波数をサポートすることです。欠点は、メモリーを実装するのに必要なメモリーブロック数が倍増することです。
図 72. トゥルー・デュアル・ポート・メモリーのコンフィグレーション以前のバージョンの インテル® Quartus® Primeプロ・エディションソフトウェアは、 インテル® Arria® 10デバイスの真のデュアル・ポート・メモリー構造を生成します。 。
デュアル・ポート、デュアル・クロック・メモリー実装
module true_dual_port_ram_dual_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
input [(DATA_WIDTH-1):0] data_a, data_b,
input [(ADDR_WIDTH-1):0] addr_a, addr_b,
input we_a, we_b, clk_a, clk_b,
output reg [(DATA_WIDTH-1):0] q_a, q_b
);
// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];
always @ (posedge clk_a)
begin
// Port A
if (we_a)
begin
ram[addr_a] <= data_a;
q_a <= data_a;
end
else
begin
q_a <= ram[addr_a];
end
end
always @ (posedge clk_b)
begin
// Port B
if (we_b)
begin
ram[addr_b] <= data_b;
q_b <= data_b;
end
else
begin
q_b <= ram[addr_b];
end
end
endmodule
異なる書き込みクロックを使用するデュアル・ポート・メモリーを同期させることは困難です。両方のポートが同時に指定のアドレスに書き込まれないようにしてください。多くのデザインでは、デュアル・ポート・メモリーは、ポートの1つで書き込み動作を実行し、その後に両方のポート(1W2R)を使用して2つのみ出し動作を実行します。この動作は、2つのシンプル・デュアル・ポート・メモリーを使用してモデル化できます。シンプル・デュアル・ポート・メモリーでは、書き込み動作は常に両方のメモリーに書き込み、読み出し動作はポートに依存します。