www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Simulation 16bit FIFO


Autor: Andreas B. (loopy83)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich bin bei meinem Projekt auf einen merkwürdigen Fehler gestoßen.

Ich habe in meinem Design ein FIFO eingebunden, welches über den Ausgang 
eines Schieberegisters gefüttert wird. Immer wenn das Schieberegsister 8 
Schiebeoprationen durchgeführt hat, wird ein Ausgang namens "FULL" 
geschaltet der signalisiert, jetzt sind 8 neue bits vorhanden und zum 
Auslesen bereit. Das geschieht zwei Mal parallel und die Ausgänge der 
beiden SRs ergeben dann den 16bit Eingang des FIFOs.

Der Eingang des FIFOs (write) wird dann mit eben diesem FULL Signal 
getaktet, dass quasi immer 16bit neue Daten ins FIFO geschoben werden.

Der Ausgang des FIFOs wird extern getaktet und unterscheidet sich vom 
Eingangstakt. Das FIFO dient also mehr oder weniger nur der 
Synchronisation der Eingangs- und Ausgangsseite.

Nun habe ich versuchsweise den RD_EN und WR_EN dauerhaft mittels zweier 
Konstanten auf '1' gelegt, weil am Ausgangs des FIFOs nix anliegt.
constant FIFO_RD_EN : std_logic := '1'; 
constant FIFO_WR_EN : std_logic := '1';

Aber selbst mit dieser Maßnahme werden beide Signale in der Simulation 
unter Modelsim XE auf 0 gelegt.

Wie kann das sein, wenn ich beide Signale doch auf hart '1' gelegt habe?

Könnte eine Warnung im Modelsim Schuld daran sein?
# ** Warning: (vsim-3473) Component instance "fifo : fifo_16" is not bound.

Den Testbench habe ich im ISE erstellen lassen und meine Eingangssignale 
eingestellt.
Den FIFO habe ich via CoreGen erstellt, das daraus resultierende .xco 
File habe ich von Hand (weil hier die Option "View HDL Instantiation 
Template" nicht verfügbar ist, wie zum Beispiel bei einem DCM) 
eingebunden.
  COMPONENT FIFO_16 
  port (
  din: IN std_logic_VECTOR(15 downto 0);
  rd_clk: IN std_logic;
  rd_en: IN std_logic;
  rst: IN std_logic;
  wr_clk: IN std_logic;
  wr_en: IN std_logic;
  dout: OUT std_logic_VECTOR(15 downto 0);
  empty: OUT std_logic;
  full: OUT std_logic
  );
  END COMPONENT;

Fifo : FIFO_16 PORT MAP (
  din => DATA_IN_FIFO,
  dout => DATA_OUT_FIFO,
  rd_clk => PCLK,
  rd_en => FIFO_rd_en,
  wr_clk => FULL,
  wr_en => FIFO_wr_en,
  rst => RESET,
  empty => FIFO_empty,
  full => FIFO_full
  );

VIELEN DANK!!!

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
># ** Warning: (vsim-3473) Component instance "fifo : fifo_16" is not bound.
>Könnte eine Warnung im Modelsim Schuld daran sein?


Ja definitiv! Du solltest herausfinden, wieso die Komponente nicht 
gefunden wird. Hast du die richtige Bibliothek eingebunden ?


SuperWilly

Autor: Andreas B. (loopy83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
library UNISIM;
use UNISIM.VComponents.all;

So sieht es momentan aus, sollte meiner Meinung nach nichts fehlen, 
sonst würde er doch auch schon bei der Synthese meckern, oder?

Wie wäre denn der korrekte Weg, den IPCore des Fifos einzubinden bzw. 
aufzurufen? Denn bisher habe ich es ja nur per Hand gelöst... gibt es da 
eine "sicherere" Methode ähnlich dem "View HDL Instantiation
Template", denn diese Option ist ja hier leider nicht verfügbar.

Vielen Dank!

Autor: Marcus W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ... gibt es da eine "sicherere" Methode ähnlich dem "View HDL Instantiation
> Template", denn diese Option ist ja hier leider nicht verfügbar.

Benutzt du ein altes ISE?

Zumindest bei ISE 11 gibt es nämlich das Instantiation Template auch für 
FIFOs.
AFAIR wurde das .vho file bei früheren Versionen zwar im 
Projektverzeichniss angelegt, aber nur nicht im ISE verlinkt.

Gruß

Autor: Marcus W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, erzeugst du das FIFO im externen CoreGen oder innerhalb des ISE 
Designflows?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Warnung bedeutet, dass Modelsim den VHDL_Wrapper des FIFO-Cores 
nicht finden kann und daher nicht simulieren kann. Du musst zu deinem 
Modelsim Projekt die vom CoreGenerator erzeugte VHDL Datei hinzufügen 
und kompilieren, dann klappts.

Autor: Cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Hatte das Problem auch letztens :-) Hast du den externem Coregen 
benutzt? Dann ist der korrekte Weg (zumindest unter ISE 11.x) in deinem 
Projekt "add copy of source" zu wählen und dann das .xco file. Der Rest 
wird dann automatisch kopiert.
Hoffe das hilft weiter.

Gruß
Cpt

Autor: Andreas B. (loopy83)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen und danke für die Antworten.

Ich habe ISE 10.1 und habe den internen CoreGen genommen.

Ich weiß zwar nicht genau, wie es geklappt hat, aber nun geht es und der 
FIFO spuckt auch was aus :)

VIELEN DANK!!!

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.