Für ein Beispiel im unten stehenden Code hat Quartus® Standard Probleme mit der RAM-Inferenz aufgrund von /*synthesis preserve*/
Modul mem
#(Parameter DATA_WIDTH=8, Parameter ADDR_WIDTH=6) (
Eingabe [(DATA_WIDTH-1):0] Daten,
Eingabe [(ADDR_WIDTH-1):0] read_addr, write_addr,
Eingabe wir, clk,
Ausgabe [(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 (Daten),
.read_addr (read_addr),
.write_addr (write_addr),
.wir (wir),
.clk (clk),
.q (q)
);
Das Problem wird durch eine bekannte Einschränkung verursacht, bei der beim Einsatz des Verilog 95-Stils eine Beibehaltung in einer Moduldeklaration auf das gesamte Modul angewendet wird. Verwenden Sie zur Behebung dieses Problems den Verilog 2001 Attributstil. Nämlich:
Ersetzen:
output reg [3:0] state = 0/*synthesis preserve*/
Mit:
(* preserve *) output reg [3:0] state = 0
Dieses Problem ist in der Quartus® Pro Version der Software nicht vorhanden. Für Quartus® Standardversionen verwenden Sie bitte die Problemumgehung.