Forum: FPGA, VHDL & Co. Generic Map IDDR


von Martin (Gast)


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

von Martin (Gast)


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 :-)

von Christian R. (supachris)


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;

von Duke Scarring (Gast)


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

von Martin (Gast)


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?

von Christian R. (supachris)


Lesenswert?

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.

von Martin (Gast)


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.

von Christian R. (supachris)


Lesenswert?

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?

von Martin (Gast)


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;

von Martin (Gast)


Lesenswert?

moment mal er macht alles rot aber nicht UNISIM und UNISIM.vcomponents!

von Martin (Gast)


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

von Christian R. (supachris)


Lesenswert?

Hihi, manchmal ist es ganz einfach. Schön, dass ich helfen konnte.

von Duke Scarring (Gast)


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

von Martin (Gast)


Lesenswert?

Ah ok werde ich machen und gucken was passiert :-) guter Hinweis! über 
kurz oder lang hätte das bestimmt auch Probleme gemacht.


DANKE AN EUCH BEIDEN!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.