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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.