Hallo zusammen,
Ich versuche, per Verilog ein ROM zu erstellen, welches per Schalter
umgeschaltet werden kann. Das Modul unten funktioniert soweit auch, die
ROM belegen jedoch nicht BlockRam, sondern ALMs. Verwende ich das
gleiche Modul mit fix einem Rom (case-Anweisung auskommentiert), wird
wie gewünscht BlockRam verwendet.
Hat jemand eine Idee?
Ich verwende Quartus Prime Lite 17.0 mit dem Terasic Cyclone V Starter
Board (mit mehr als genug BlockRam).
Besten Dank für die Hilfe :)
Benötigt ALMs:
Damian schrieb:> Hat jemand eine Idee?
Was schreibt denn Altera im Synthesizer Users Guide, wie man ein ROM in
Verilog beschreiben muss, dass der Synthesizer dafür RAM-Blöcke nimmt?
Ich glaube, du musst den Multiplexer ausserhalb machen...
Lothar M. schrieb:> Was schreibt denn Altera im Synthesizer Users Guide, wie man ein ROM in> Verilog beschreiben muss, dass der Synthesizer dafür RAM-Blöcke nimmt?
Das hier:
1
// Single Port ROM
2
3
modulesingle_port_rom
4
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=8)
5
(
6
input[(ADDR_WIDTH-1):0]addr,
7
inputclk,
8
outputreg[(DATA_WIDTH-1):0]q
9
);
10
11
// Declare the ROM variable
12
reg[DATA_WIDTH-1:0]rom[2**ADDR_WIDTH-1:0];
13
14
// Initialize the ROM with $readmemb. Put the memory contents
15
// in the file single_port_rom_init.txt. Without this file,
16
// this design will not compile.
17
18
// See Verilog LRM 1364-2001 Section 17.2.8 for details on the
19
// format of this file, or see the "Using $readmemb and $readmemh"
20
// template later in this section.
21
22
initial
23
begin
24
$readmemb("single_port_rom_init.txt",rom);
25
end
26
27
always@(posedgeclk)
28
begin
29
q<=rom[addr];
30
end
31
32
endmodule
Lothar M. schrieb:> Ich glaube, du musst den Multiplexer ausserhalb machen...
... das glaube ich auch. Oder Du nimmst ein doppelt grosses ROM und
addierst beim Umschalten einfach einen Offset zur Adresse.