Hallo zusammen,
ich habe ein Problem mit der Generic map. Habe schon im Forum gelesen
aber schlauer bin ich nicht :-)
ich möchte ein IDDR einsetzten.
folgenden code habe ich eingefügt
DDR_CLK_EDGE=>"SAME_EDGE",-- "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED"
16
INIT_Q1=>'0',-- Initial value of Q1: ’0’ or ’1’
17
INIT_Q2=>'0',-- Initial value of Q2: ’0’ or ’1’
18
SRTYPE=>"SYNC")-- Set/Reset type: "SYNC" or "ASYNC"
19
PORTMAP(
20
Q1=>Q1_a,-- 1-bit output for positive edge of clock
21
Q2=>Q1_an,-- 1-bit output for negative edge of clock
22
C=>dco,-- 1-bit clock input
23
CE=>'1',-- 1-bit clock enable input
24
D=>channel_A,-- 1-bit DDR data input
25
R=>'0',-- 1-bit reset
26
S=>'0'-- 1-bit set
27
);
Folgende Fehlermeldungen bekomme ich:
ERROR:HDLParsers:850 - "C:/.../CDDC.vhd" Line 2241. Formal port
DDR_CLK_EDGE does not exist in Component 'IDDR'.
ERROR:HDLParsers:850 - "C:/.../CDDC.vhd" Line 2242. Formal port INIT_Q1
does not exist in Component 'IDDR'.
ERROR:HDLParsers:850 - "C:/.../CDDC.vhd" Line 2243. Formal port INIT_Q2
does not exist in Component 'IDDR'.
ERROR:HDLParsers:850 - "C:/.../CDDC.vhd" Line 2244. Formal port SRTYPE
does not exist in Component 'IDDR'.
Welchen fehler mache ich blos? muss man die generic map oben bei
component auch bekannt machen?!?! Das ist doch eigentlich quatsch oder?
Achso ich benutze ISE 10.1.03. Im Netz habe ich gefunden, dass ich
"SAME_EDGE" in Großbuchstaben schreiben soll. Das hilft aber nichts :-(
Danke schon mal
Ich noch mal,
der code steht übrigens so in meinen Toplevel. Kann es sein, dass man
extra sei eine Datei erzeugen muss, wie als wenn man ein FIFO vom FIFO
Generator erzeugen lässt? Hoffentlich nicht :-)
Wenn du einen Generic in der Instanz verwendest, musst du den auch bei
der Komponent-Deklaration angeben. Wenn du eh nur die Default-Werte
nimmst, kannst du die Generics an beiden Stellen weglassen. Kopier doch
einfach die Vorlagen. Bei Edit->Language Tamplates sind die drin in der
ISE. Außerdem muss bei sowas noch die passende Lib angegeben werden:
Library UNISIM;
use UNISIM.vcomponents.all;
Christian R. schrieb:> Wenn du einen Generic in der Instanz verwendest, musst du den auch bei> der Komponent-Deklaration angeben.
Jepp. Das ist eine tückische Sache, bei der ich auch immer mal wieder
reinfalle. Da passiert es dann, daß die Deklaration im component-package
(mit component-Definition) Vorrang hat, vor dem was in der entity steht.
(Und im component-package steht natürlich noch der alte Quatsch drin...)
Duke
Hallo,
erst mal ein geiler Tipp mit den Language Tamplates kannte ich nicht.
Dafür schon mal vielen Dank!!
Im Template steht ja nur der Teil für die architecture. Christian R du
sagst ich muss das auch in der Komponent-Deklaration angeben.... aber
wie? ich finde das einfach nicht im Netz oder ich bin zu blöd (befürchte
zweites). könntest du mit bitte ein ganz kurzes Beispiel geben? Dann
würde ich es auf mein Problem überführen können.
@ Duke: Das verstehe ichleider auch nicht ganz! Wenn ich die Generic in
der architecture angeben ist das Problem aber nicht vorhanden oder?
Tatsache, steht da nicht drin. Aber wenn du die unisim einbindest, musst
du das überhaupt nicht als Component extra aufführen. Die Xilinx
Primitiven lassen sich einfach so instanziieren. XST kümmert sich dann
schon. Also lass einfach die Komponent-Deklaration ganz weg und fertig.
Hallo,
das mit dem ganz weglassen funktioniert leider nicht :-( obwohl ich die
unisim eingebunden habe. ist aber nicht so schlimm habe es hetzt so
gemancht.
1
componentIDDRis
2
Generic(
3
DDR_CLK_EDGE:string;-- "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED"
4
INIT_Q1:instd_logic;-- Initial value of Q1: ’0’ or ’1’
5
INIT_Q2:instd_logic;-- Initial value of Q2: ’0’ or ’1’
DDR_CLK_EDGE=>"SAME_EDGE",-- "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED"
22
INIT_Q1=>'0',-- Initial value of Q1: ’0’ or ’1’
23
INIT_Q2=>'0',-- Initial value of Q2: ’0’ or ’1’
24
SRTYPE=>"SYNC")-- Set/Reset type: "SYNC" or "ASYNC"
25
PORTMAP(
26
Q1=>Q1_a,-- 1-bit output for positive edge of clock
27
Q2=>Q1_an,-- 1-bit output for negative edge of clock
28
C=>dco,-- 1-bit clock input
29
CE=>'1',-- 1-bit clock enable input
30
D=>channel_A,-- 1-bit DDR data input
31
R=>'0',-- 1-bit reset
32
S=>'0'-- 1-bit set
33
);
So läuft die ISE auf jeden fall schon mal durch! Danke euch. Was ich
mich allerdings noch frage ich habe da ja z.B. DDR_CLK_EDGE : string
geschrieben! ist string denn überhaut richtig? das gibt es doch
eigentlich nicht in VHDL oder?! Er meckert es aber nicht an.
Wie funktioniert nicht mit weglassen? Bei mir geht das bei ISE. Sobald
man IDDR, ODDR oder sowas instanziiert, wird das ja so rot geschrieben
und XST erkennt das als Xilinx Primitive. Außer der Unisim muss da nix
weiter gemacht werden. Wie ist denn die Fehlermeldung?
Ich glaube ich bin zu doof!
Also rot macht er das bei mir auch! Somit hat er es ja erkannt.
folgende Fehlermeldung kommt:
Line 2248. Undefined symbol 'IDDR'.
folgendes binde ich ein
so ich werde bescheuert!!!!
ich habe es!
in echt sand bei mir
1
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.STD_LOGIC_ARITH.ALL;
4
useIEEE.STD_LOGIC_UNSIGNED.ALL;
5
LibraryUNISIM;
6
useUNISIM.vcomponents.all;
7
libraryIEEE;
das letzte library IEEE habe ich entfernt und schon funktionierts!
Einen Großen Dank and dich Christian!!! Hoffe andere machen nicht den
gleichen doofen Fehler :-)
Noch mal Danke
Martin schrieb:> use IEEE.STD_LOGIC_ARITH.ALL;> use IEEE.STD_LOGIC_UNSIGNED.ALL;
Die Beiden solltest Du auch noch entfernen. Bzw. durch
1
useieee.numeric_std.all;
ersetzen.
Die std_logic_arith, std_logic_unsigned und std_logic_signed sind keine
offiziellen IEEE-Arithmetik-Packages.
Das std_logic_arith-Package ist ähnlich zum numeric_std-Package. Die
anderen beiden Packages enthalten keine neuen Datentypen sondern nur
überladene arithmetische Operatoren für die std_logic_vector-Datentypen.
Dieser Ansatz umgeht den Zwang zur Typkovertierung. Das sieht zwar auf
dem ersten Blick wie eine Vereinfachung aus, ist aber keine gute Idee,
da die Packages nicht standardisiert sind und auf lange Sicht
Kompatibilitätsprobleme zu erwarten sind. Außerdem entgeht
Neueinsteigern das Gefühl und Verständnis für die verschiedenen
Datentypen.
Also: Lieber gleich richtig machen.
Duke