Tabelle ins RAM/ROM mit Verilog

OP #5157182
Lesenswert?

Derzeit habe ich die folgende Konstruktion:
1
always @(posedge clk_100) begin
2
  data2 <= data ;
3
  address2 <= address ;
4
  case (address2)
5
    10'd   0 :  data <= 12'd 4048 ;
6
    10'd   1 :  data <= 12'd 4047 ;
7
    10'd   2 :  data <= 12'd 4046 ;
8
 ....
9
    10'd1021 :  data <= 12'd 4045 ;
10
    10'd1022 :  data <= 12'd 4047 ;
11
    10'd1023 :  data <= 12'd 4048 ;
12
    default : begin  end
13
  endcase
14
  end
Also eine case-Konstruktion (Tabelle) mit 1024 Einträgen.
Quartus synthetisiert das momentan mit jeder Menge LUTs.
Mir wäre lieber, wenn die Tabelle im ROM/RAM landen würde.

Kann man das so formulieren, dass Ram/Rom genommen wird?
OP #5157914
Lesenswert?

1
module dual_port_rom (
2
  input [(addr_width-1):0] addr_a, addr_b,
3
  input clk,
4
  output reg [(data_width-1):0] q_a, q_b
5
  );
6
parameter data_width = 12;
7
parameter addr_width = 10;
8
reg [data_width-1:0] rom[2**addr_width-1:0];
9
initial 
10
  begin
11
  $readmemh("romSinTab1.data", rom);
12
  end
13
always @ (posedge clk)
14
begin
15
q_a <= rom[addr_a];
16
q_b <= rom[addr_b];
17
end
18
endmodule
Ich hab jetzt obiges Beispiel aus dem Quartus Manual genommen.
Im RTL-View wird das als dual-ported-rom umgesetzt, aber nachher
wird das Rom doch durch LUTs realisiert (1024 Werte je 12 Bit).
Ich kapiers nicht wie ich die Umsetzung durch BlockRam erreiche.

Jemand ne Idee
#5158027
Lesenswert?

Martin O. schrieb:
> Ich kapiers nicht wie ich die Umsetzung durch BlockRam erreiche.

Was hast Du denn im Projekt ("Settings->Compiler Settings->Advanced 
Settings (Synthesis)") eingestellt?

Zumindest "Auto ROM Replacement" sollte an sein. Dann gibt's noch 
etliche Einstellungen (entweder mit "ROM" oder "RAM" im Namen), die das 
RAM/ROM inferral beeinflussen.
OP #5158174
Lesenswert?

Problem gelöst:
Irgendwie hatte Quartus nicht genau mitbekommen, welches MAX10 Device 
ich verwende. Daraufhin ging Quartus davon aus, dass ich ein "Compact" 
Device habe. Diese können bei der Configuration keine ROM 
Initialisierung. Draufhin hat Quartus konsequenterweise darauf 
verzichtet, ROM-Tabellen zu verwenden.

Jetzt hab ich den Device-Typ offensichtlich richtig eingesstellt und
alle Methoden funktionieren jetzt vollautomatisch mit ROM und 
Initialisierung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren