www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Modelsim SE 61.e


Autor: mss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich habe ein problem mit ms 6.1e.
ich möchte ein design simulieren,welches mit xilinx ise 8.2i entwickelt 
wurde. problem: die werte der eingänge der flip-flops werden schon im 
gleichen takt an die ausgänge durchgeleitet. normalerweise sollte da 
eine verzögerung von einem takt sein.

die flip-flops sind vom typ FDCE, die libraries XilinxCoreLib und unisim 
sind in modelsim eingebunden.

für hilfe wäre ich dankbar.

bye
mss

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist fuer dich eine Verzoegerung von einem Takt? Ein D-Flipflop gibt 
die Eingangsbelegung bei der naechsten positiven Taktflanke an den 
Ausgang weiter.

Autor: aleco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich liegt das daran, dass sich Takt (Clock) und Datum im 
selben Delta-cycle ändern. Lösung: Ein Delta-cycle Delay in den 
Datenpfad einfügen, z.B. data_x <= data;
Im Prozess wird dann eine Zuweisung der Art "data_delayed <= data_x;" 
genau einen Takt später ausgegeben.

/aleco

Autor: mss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, mag sein dass das funktioniert,
aber:
der code wurde automatisch aus den schematics von xilinx generiert und 
die bibliotheken sollten eigentlich die zeitfunktionen abbilden.
ich wollte eigentlich nicht in diesem code rumpfuschen.

bye
mss

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du das mal posten? Im Allgemeinen simuliert ModelSIm das so, wie 
es gebaut ist.

Autor: mss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier ist mal der generierte quelltext:

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;

entity test is
   port ( ce_i   : in    std_logic;
          clk_i  : in    std_logic;
          clr_i  : in    std_logic;
          data_i : in    std_logic;
          data_o : out   std_logic);
end test;

architecture BEHAVIORAL of test is
   attribute INIT       : string ;
   attribute BOX_TYPE   : string ;
   component FDCE
      -- synopsys translate_off
      generic( INIT : bit :=  '0');
      -- synopsys translate_on
      port ( C   : in    std_logic;
             CE  : in    std_logic;
             CLR : in    std_logic;
             D   : in    std_logic;
             Q   : out   std_logic);
   end component;
   attribute INIT of FDCE : component is "0";
   attribute BOX_TYPE of FDCE : component is "BLACK_BOX";

begin
   iFDCE : FDCE
      port map (C=>clk_i,
                CE=>ce_i,
                CLR=>clr_i,
                D=>data_i,
                Q=>data_o);

end BEHAVIORAL;

und so sieht das wave in ms aus:
          _    __    _
clk_i  __|  |__|  |__|  |__
                ______
ce_i   ________|        |__
                ______
data_i ________|        |__
                _________
data_o ________|


bye
mss

Autor: mss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach so, der clr_i eingang wurde zu beginn der sim mit '1' belegt und 
nach gewisser zeit auf '0' gesetzt.

bye
mss

Autor: mss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, hab jetzt was rausgefunden:
wenn ich die simulationsauflösung auf 1 ps stelle, sehe ich, dass das 
ff-modell genau nach 100 ps den eingang auf den ausgang legt.
bei der suche in der bibliothek ist dies auch so im modell beschrieben.

entity FDCE is
  generic(
    INIT : bit := '0'
    );

  port(
    Q : out std_ulogic;

    C   : in std_ulogic;
    CE  : in std_ulogic;
    CLR : in std_ulogic;
    D   : in std_ulogic
    );
end FDCE;

architecture FDCE_V of FDCE is
begin
  VITALBehavior         : process(C, CLR)
    variable FIRST_TIME : boolean := true ;
  begin

    if (FIRST_TIME = true) then
      Q <= TO_X01(INIT);
      FIRST_TIME := false;
    end if;

    if (CLR = '1') then
      Q   <= '0';
    elsif (rising_edge(C)) then
      if (CE = '1') then
        Q <= D after 100 ps;
      end if;
    end if;
  end process;
end FDCE_V;



problem aber ist, dass diese modell nur funktioniert, wenn die clock mit 
100 ps läuft.
normalerweise sollte die von xilinx mitgelieferte bibliothek unisim die 
simulation unabhängig der taktfrequenz ermöglichen. d.h. sie sollte sich 
dem gewünschten takt anpassen.

ich werde mal weitersuchen, wie ich das in den griff bekomme.

bye
mss

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Beschreibung ist vollkommen in Ordnung. Das Signal, das bei 
positiver Taktflanke am Eingang anliegt, wird 100ps spaeter am Ausgang 
ausgegeben.

Aendere in deiner Testbench mal die Zuweisung deiner Signale, so dass 
sie um eine Nanosekunde (oder was auch immer) verzoegert gesetzt werden 
- und du wirst sehen, dass die Verzoegerung einwandfrei funktioniert.

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.