以下のコードの例では、/*synthesis preserve** が原因で Quartus® Standard の RAM 推論に問題があります。
モジュールメモリー
#(パラメーター DATA_WIDTH=8、パラメーター ADDR_WIDTH=6) (
入力 [(DATA_WIDTH-1):0] データ、
入力 [(ADDR_WIDTH-1):0] read_addr、write_addr、
入力 we、clk、
出力 [(DATA_WIDTH-1):0] q、
output reg [3:0] 状態 = 0/*synthesis preserve*/
);
simple_dual_port_ram_single_clock simple_dual_port_ram_single_clock_inst (
.data (データ)
.read_addr (read_addr)
.write_addr (write_addr)
.we (インテル)
.clk (clk)
.q (q)
);
この問題は、Verilog 95 スタイルを使用する際にモジュール宣言内の保持がモジュール全体に適用される既知の制限によって発生します。この問題を解決するには、Verilog 2001 属性スタイルを使用します。つまり:
置き換える:
output reg [3:0] 状態 = 0/*synthesis preserve*/
以下の機能を備えたもの
(*preserve*) 出力 reg [3:0] 状態 = 0
この問題は、インテル® Quartus® Pro バージョンのソフトウェアには存在しません。Quartus® スタンダード・バージョンの場合、回避策を使用してください。