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
Was ist fuer dich eine Verzoegerung von einem Takt? Ein D-Flipflop gibt die Eingangsbelegung bei der naechsten positiven Taktflanke an den Ausgang weiter.
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
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
Kannst Du das mal posten? Im Allgemeinen simuliert ModelSIm das so, wie es gebaut ist.
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
ach so, der clr_i eingang wurde zu beginn der sim mit '1' belegt und nach gewisser zeit auf '0' gesetzt. bye mss
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.