インテル® Quartus® Primeプロ・エディションのユーザーガイド: デザイン上の推奨事項

ID 683082
日付 4/13/2020
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

1.4.1.2. サポートされていないリセットおよび制御条件の回避

ターゲット・デバイス・アーキテクチャーでHDLコードを正しく実装するには、サポートされていないリセット条件またはデバイス・アーキテクチャーに存在しないその他の制御ロジックを避けてください。

Intel FPGAのメモリーブロックのRAMの内容は、デバイスの動作中にreset信号でクリアできません。 HDLコードがRAMの内容のreset信号でRAMを記述する場合、ロジックはメモリーブロックではなく通常のロジックセルに実装されます。 reset信号を使用して、 常にリードブロックまたはprocesブロックにRAMのリードまたはライトの動作を配置しないでください。メモリーの内容を指定するには、デバイスの動作中にメモリーを初期化するか、RAMにデータを書き込みます。

リセット信号に加えて、他の制御ロジックにより、合成がメモリーロジックをメモリーブロックとして推論するのを防ぐことができます。たとえば、リード・アドレス・レジスターでクロックイネーブルを使用する場合、RAMの出力ラッチを変更して、合成されたRAMの結果がHDL記述と一致しないことがあります。この制限を回避するには、アドレスストール機能をリード・アドレス・クロック・イネーブルとして使用します。 FPGAデバイスのドキュメントを参照して、コードがデバイスで使用可能なハードウェアと一致することを確認してください。

Verilog RAM with Reset Signal that Clears RAM Contents: Not Supported in Device Architecture

module clear_ram
(
	input clock, reset, we,
	input [7:0] data_in,
	input [4:0] address,
	output reg [7:0] data_out
);

	reg [7:0] mem [0:31];
	integer i;

	always @ (posedge clock or posedge reset)
	begin
		if (reset == 1'b1)
			mem[address] <= 0;
		else if (we == 1'b1)
			mem[address] <= data_in;

		data_out <= mem[address];
	end
endmodule