Generic Map IDDR

Gast #2289852
Lesenswert?

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
1
COMPONENT IDDR
2
 PORT ( 
3
  Q1 : OUT STD_LOGIC ; 
4
  Q2 : OUT STD_LOGIC ; 
5
  C  : in STD_LOGIC ; 
6
  CE : in STD_LOGIC ; 
7
  D  : in STD_LOGIC ; 
8
  R  : in STD_LOGIC ; 
9
  S  : in STD_LOGIC
10
);
11
END COMPONENT; 
12
--##################################################################
13
IDDR_inst : IDDR
14
generic map (
15
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
PORT MAP (
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
Gast #2289878
Lesenswert?

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 :-)
#2289968
Lesenswert?

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;
Gast #2290407
Lesenswert?

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
Gast #2290493
Lesenswert?

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?
Gast #2290939
Lesenswert?

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
component IDDR is
2
  Generic (
3
      DDR_CLK_EDGE : string;-- "OPPOSITE_EDGE", "SAME_EDGE" or "SAME_EDGE_PIPELINED"
4
      INIT_Q1 : in std_logic; -- Initial value of Q1: ’0’ or ’1’
5
      INIT_Q2  : in std_logic; -- Initial value of Q2: ’0’ or ’1’
6
      SRTYPE : string-- Set/Reset type: "SYNC" or "ASYNC"
7
       );
8
 PORT ( 
9
  Q1 : OUT STD_LOGIC ; 
10
  Q2 : OUT STD_LOGIC ; 
11
  C  : in STD_LOGIC ; 
12
  CE : in STD_LOGIC ; 
13
  D  : in STD_LOGIC ; 
14
  R  : in STD_LOGIC ; 
15
  S  : in STD_LOGIC
16
);
17
END COMPONENT; 
18
--##################################################################
19
IDDR_inst : IDDR
20
generic map (
21
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
PORT MAP (
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.
Gast #2291025
Lesenswert?

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
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL; 
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL; 
5
Library UNISIM;
6
use UNISIM.vcomponents.all;
Gast #2291037
Lesenswert?

so ich werde bescheuert!!!!

ich habe es!

in echt sand bei mir
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL; 
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL; 
5
Library UNISIM;
6
use UNISIM.vcomponents.all;
7
library IEEE;

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
Gast #2291725
Lesenswert?

Martin schrieb:
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
Die Beiden solltest Du auch noch entfernen. Bzw. durch
1
use ieee.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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren