Why am I getting “Found 1 instances of uninferred RAM logic” message due to /*synthesis preserve*/ in an unrelated port? - Why am I getting “Found 1 instances of uninferred RAM logic” message due to /*synthesis preserve*/ in an unrelated port? Description For an example in the code below, Quartus® Standard will have issues with RAM inference because of /*synthesis preserve*/ module mem #(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6) ( input [(DATA_WIDTH-1):0] data, input [(ADDR_WIDTH-1):0] read_addr, write_addr, input we, clk, output [(DATA_WIDTH-1):0] q, output reg [3:0] state = 0/*synthesis preserve*/ ); simple_dual_port_ram_single_clock simple_dual_port_ram_single_clock_inst ( .data (data), .read_addr (read_addr), .write_addr (write_addr), .we (we), .clk (clk), .q (q) ); Resolution The issue is caused by a known limitation where any preserve in a module declaration is applied to the whole module when using Verilog 95 style. To fix this, use Verilog 2001 attribute style. Namely: replace: output reg [3:0] state = 0/*synthesis preserve*/ with: (* preserve *) output reg [3:0] state = 0 This issue is not present in the Quartus® Pro version of the software. For Quartus® Standard versions, please use the workaround. Custom Fields values: ['novalue'] Troubleshooting FB: 431547; False ['novalue'] ['FPGA Dev Tools Quartus® Prime Software Standard'] novalue novalue ['Programmable Logic Devices'] ['novalue'] ['novalue'] ['novalue'] - 2021-08-25

external_document