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


von mss (Gast)


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

von Jan M. (mueschel)


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.

von aleco (Gast)


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

von mss (Gast)


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

von J. S. (engineer) Benutzerseite


Lesenswert?

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

von mss (Gast)


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

von mss (Gast)


Lesenswert?

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

bye
mss

von mss (Gast)


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

von Jan M. (mueschel)


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.

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.