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

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.4.1.2. サポートされないリセットおよびコントロール条件の回避

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

デバイスの動作時に、インテル FPGAメモリーブロックのRAMのコンテンツを reset 信号でクリアすることはできません。HDLコードで記述しているRAMで reset 信号をRAMのコンテンツに使用している場合、ロジックはメモリーブロックではなく通常のロジックセルに実装されます。RAMの読み出しまたは書き込み動作は、always ブロックまたは process ブロックに reset 信号とともに配置しないでください。メモリーコンテンツを指定するには、メモリーを初期化する、もしくはデバイス動作時にRAMにデータを書き込みます。

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

RAMのコンテンツをクリアするリセット信号のあるVerilog RAM (デバイスのアーキテクチャーでサポートされません)

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