Hi
Ich habe ein kleines Problem und suche jetzt scho 2 Stunden nach einer
Lösung.
Es ist eig. ganz einfach:
Ich habe ein FIFO mit Generics das ich in einem anderen Modul benutzen
möchte.
Doch in dem Modul brauche ich 2 FIFOs, mit unterschiedlichen
Datenbreiten usw.
Also Binde ich das FIFO so ein:
1
componentAsyncFIFO
2
generic(Width:integer:=32;
3
Depth:integer:=64;
4
AdressWidth:integer:=6;
5
RamTypeFifo:string:="Block");
6
port(ReadCLK:Instd_logic;
7
WriteCLK:Instd_logic;
8
ReadCE:Instd_logic;
9
WriteCE:Instd_logic;
10
RST:Instd_logic;
11
Din:Instd_logic_vector(Width-1downto0);
12
RE:Instd_logic;
13
WE:Instd_logic;
14
Dout:Outstd_logic_vector(Width-1downto0);
15
Empty:Outstd_logic;
16
Full:Outstd_logic);
17
endcomponent;
Und gebe denn später zweimal Unterschiedliche Generics an:
1
CommandFIFO:AsyncFIFO
2
genericmap(Width=>26,
3
Depth=>4,
4
AdressWidth=>2,
5
RamTypeFifo=>"Distributed")
6
portmap(ReadCLK=>CLK,
7
WriteCLK=>UI_CLK,
8
ReadCE=>CE,
9
WriteCE=>CE,
10
RST=>RST,
11
Din=>CommandFIFO_Din,
12
Dout=>CommandFIFO_Dout,
13
RE=>NewCommandEnable,
14
WE=>CMD_WE,
15
Empty=>CMD_Empty,
16
Full=>CMD_Full);
17
18
DataInFIFO:AsyncFIFO
19
genericmap(Width=>128,
20
Depth=>16,
21
AdressWidth=>4,
22
RamTypeFifo=>"Block")
23
portmap(ReadCLK=>CLK,
24
WriteCLK=>UI_CLK,
25
ReadCE=>CE,
26
WriteCE=>CE,
27
RST=>RST,
28
Din=>DataIn,
29
Dout=>DataInput,
30
RE=>NewDataEnable,
31
WE=>DataIn_WE,
32
Empty=>DataIn_Empty,
33
Full=>DataIn_Full);
Problem ist jetzt dass, das ISE nat. meckert von wegen das die Instanz
z.B. eine andere Signal Breite bei Dout hat als es die Componente hat.
1
ERROR:Xst:2587 - Port <Dout> of instance <DataInFIFO> has different type in definition <AsyncFIFO>.
So, dafür muss es ja iwie eine einfache Lösung geben und deswegen hoffe
ich einfach auf eure Hilfe :)
Gruß Max
In der Component steht eine andere Länge als in der Instanzierung.
Natürlich geht das nicht.
Wieso gibst du in der Entity und Component keine ranges an?
Sym schrieb:> In der Component steht eine andere Länge als in der Instanzierung.> Natürlich geht das nicht.> Wieso gibst du in der Entity und Component keine ranges an?
Das ist nicht das Problem. Das ist nur dafür da, wenn man die generics
nicht mappt, dass man Standardwerte hat
Wie ist das Signal "DataInput" definiert?
Und zeig mal die Entity-Beschreibung von AsyncFIFO, da wird der Hund
begraben liegen.
Hi
Einzeln Instanzieren geht ja ohne weiteres, muss das nur beim einbinden
der Component dort die selben Werte bei den Generics einstellen wie
sp#ter dann beim Instanzieren :-/
Das mit den Range hört sich nach was passendem an kannst du mir das
vllt. an nem kleinen Beispiel verdeutlichen ?
Google hat da grade leider nichts zu!
Gruß Max
PS: Nur zur Zufriedenstellung, das Fifo ist angehängt!
In dem von dir geposteten Code ist kein Fehler zu sehen.
Schau doch mal, ob DataInput wirklich ein std_logic_vector(127 downto 0)
ist.
Ansonsten poste doch bitte mal den kompletten Code in dem du die beiden
Fifos instantiierst damit man das nachvollziehen kann.
Btw, eine der beiden generics
>Depth : integer := 64; --FIFO Tiefe>AdressWidth : integer := 6;
kannst du dir sparen, Depth kannst du einfach berechnen mit
2**AdressWidth.