www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Component mit Generics, 2 mal einbinden


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
  component AsyncFIFO
    generic(  Width : integer := 32;
          Depth : integer := 64;
          AdressWidth : integer := 6;
          RamTypeFifo : string := "Block");
    port(  ReadCLK : In std_logic;
        WriteCLK : In std_logic;
        ReadCE : In std_logic;
        WriteCE : In std_logic;
        RST : In std_logic;
        Din : In std_logic_vector(Width-1 downto 0);
        RE : In std_logic;
        WE : In std_logic;          
        Dout : Out std_logic_vector(Width-1 downto 0);
        Empty : Out std_logic;
        Full : Out std_logic);
  end component;

Und gebe denn später zweimal Unterschiedliche Generics an:
CommandFIFO: AsyncFIFO 
    generic map(Width => 26,
            Depth => 4,
            AdressWidth => 2,
            RamTypeFifo => "Distributed")
    port map(ReadCLK => CLK,
          WriteCLK => UI_CLK,
          ReadCE => CE,
          WriteCE => CE,
          RST => RST,
          Din => CommandFIFO_Din,
          Dout => CommandFIFO_Dout,
          RE => NewCommandEnable,
          WE => CMD_WE,
          Empty => CMD_Empty,
          Full => CMD_Full);
  
  DataInFIFO: AsyncFIFO 
    generic map(Width => 128,
            Depth => 16,
            AdressWidth => 4,
            RamTypeFifo => "Block")
    port map(ReadCLK => CLK,
          WriteCLK => UI_CLK,
          ReadCE => CE,
          WriteCE => CE,
          RST => RST,
          Din => DataIn,
          Dout => DataInput,
          RE => NewDataEnable,
          WE => DataIn_WE,
          Empty => DataIn_Empty,
          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.
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

Autor: Sym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Max (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan M. schrieb:
> Depth kannst du einfach berechnen mit 2**AdressWidth.
Aber der umgekehrte Weg ist ein wenig beschwerlicher... ;-)
http://www.lothar-miller.de/s9y/archives/72-Breite...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.