Hallo!
In einem aktuellen Projekt verwende ich das CAN Modul von opencores:
http://opencores.org/websvn,listing?repname=can&path=&
Das FPGA das ich verwende ist ein Spartan 6. Leider wird in der Datei
can_fifo.v Block Ram instantiert, den es so im Spartan 6 nicht mehr
gibt:
Hier der Link zur Datei:
http://opencores.org/websvn,filedetails?repname=can&path=%2Fcan%2Ftrunk%2Frtl%2Fverilog%2Fcan_fifo.v
Da ich kein Verilog spreche wollte ich fragen, ob Ihr mir helfen könnt.
Wie kann ich den BlockRam ersetzen?
Die erste Frage die ich mir stelle wenn ich in den Libraries Guide für
das Spartan 6 gucke ist: Was bedeutet das # am Anfang des
instantiierungstemplate? Und wie sorge ich dafür, dass die Busbreiten
richtig übernommen werden?
1
.DATA_WIDTH_A(n), // n muss bei mir wohl 1, 4 oder 8(9) sein
2
.DATA_WIDTH_B(n),
Wenn ich für DATA_WIDTH Werte eintrage sind die Signalbreiten immer 16
bit...
Gruß,
Hendrik
nimm doch einfach die RAM Version die 'abstakt' definiert ist:
`ifdef VIRTUALSILICON_RAM
ISE sollte damit klarkommen. Wenn nicht, kannst du ja das eigentliche
RAM auch in VHDL bauen (Instanz oder generisch in VHDL).
Und das # steht in Verilog m.W. fuer Delay, also wie bei VHDL ... after
X ns
nicht nur
>Und das # steht in Verilog m.W. fuer Delay, also wie bei VHDL ... after>X ns
sondern # wird auch auch bei der Parameterübergabe an Module benutzt:
[code]
param_ram_syncread #(.addrl(15), //modul instantiierung+
.datal(8)) // 2x parameter
ram ( // modul name
.clk(!clk), // ports
.write(write), .read(read),
...
module param_ram_syncread( // modul beschreibung
clk,
write,
read, ...
parameter addrl=8;
parameter datal=8;
input clk;
input write;
...
[/code)
berndl schrieb:> nimm doch einfach die RAM Version die 'abstakt' definiert ist:> `ifdef VIRTUALSILICON_RAM
... wer lesen kann ist klar im Vorteil...
Ich probier's Montag mal aus.
Gruß und schönes WE,
Hendrik
berndl schrieb:> nimm doch einfach die RAM Version die 'abstakt' definiert ist:> `ifdef VIRTUALSILICON_RAM
Dann bekomme ich:
ERROR:HDLCompiler:1654 -
"/home/likewise-open/DFKI/hhanff/proj/110909_FPGA.svn/lib/CAN_Controller
/trunk/can_fifo.v" Line 858: Instantiating <fifo> from unknown module
<vs_hdtp_64x8>
:-/
> module param_ram_syncread( // modul beschreibung
9
> clk,
10
> write,
11
> read, ...
12
>
13
>
14
> parameter addrl=8;
15
> parameter datal=8;
16
>
17
> input clk;
18
> input write;
19
>
20
> ...
21
>
Das heisst wenn ich mehrere Instanzen eines Moduls haben möchte und
diesen Instanzen unterschiedliche Werte übergeben möchte muss ich der
Instantiierung nur einen Block mit '#' voranstellen?
Dein Beispiel mit unterschiedlichen Parametern würde dann so aussehen:
Heinrich H. schrieb:> ERROR:HDLCompiler:1654 -> "/home/likewise-open/DFKI/hhanff/proj/110909_FPGA.svn/lib/CAN_Controller
/trunk/can_fifo.v"
> Line 858: Instantiating <fifo> from unknown module <vs_hdtp_64x8>
Das scheint lt. can_defines.v auch eher der Holzweg zu sein:
1
// Uncomment the line for the ram used in ASIC implementation
2
// `define VIRTUALSILICON_RAM
3
// `define ARTISAN_RAM
4
5
// Uncomment the following line when RAM BIST is needed (ASIC implementation)
Das ist aus dem XST User Guide Examples abgeleitet und läßt sich mit XST
zu einem BRAM synthetisieren. Dort stehen auch die verilog-Varianten.
Die anderen beiden fehlenden Makros kannst Du Dir leicht selber davon
ableiten.
Duke