Forum: FPGA, VHDL & Co. Problem mit IDDR2 und Schieberegister


von Andreas B. (loopy83)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem.

Ich habe serielle LVDS Daten (8bit), die ich mittels eines 
Schieberegsiters parallelisiere. Das klappt so alleine wunderbar in der 
Simulation (SR_solo.png). Also die erste '1' wird auf Bit 0 des SRs 
eingelesen und geschiftet, alle weiteren Daten werden korrekt eingelesen 
und bei Full = '1' können sie dann ausgelesen werden.

Nun möchte ich aber die Daten auf der steigenden und fallenden Flanke 
des Taktes auslesen. Dazu verwende ich ein IDDR2, welches mittels eines 
DCM getaktet ist. Die Ausgänge Q0 und Q1 gehen jeweils auf zwei 
getrennte Schieberegister. Aber hier übernimmt das SR statt der '1' am 
Anfang eine '0' und dadurch stimmt die Ausgabe nicht mehr.

Ich habe nun testweise den Datenzweig der fallenden Flanke deaktiviert 
und will wie zuvor auch nur die Daten der steigenden Flanke auslesen. 
Diese Daten stammen aber diesmal von einem IDDR2, Ausgang Q0.
In dieser Konstellation tritt der Fehler auch auf... statt einer '1' 
wird eine '0' im ersten Takt auf Bit 0 des SRs gelesen. Auch folgende 
Takte stimmen teilweise nicht überein mit dem, was ich erwarte beim 
Dateneinlesen (SR_IDDR2.png).

Wo genau kann der Fehler liegen, wenn das Schieberegister wunderbar 
funktioniert, aber sobald ein IDDR2 dazwischen geschaltet wird, die 
Eingabe in das SR fehlerhaft ist? Muss ich in dem Zusammenhang noch 
etwas beachten?

Ich habe meine Quellen incl. der beiden Testbenches mit angehängt, 
vielleicht hilft es bei der Fehlersuche?!

TOPFILE.zip
  |---TOPFILE.vhd              => tb_TOPFILE_IDDR2.vhd
        |--DIFF_CLOCK_IN.vhd
        |--DIFF_DATA_IN.vhd
        |--schiebereg.vhd      => tb_schiebreg8bit.vhd

VIELEN DANK!!

von Andreas B. (loopy83)


Lesenswert?

Ich habe gerade gesehen, dass das zweite SR, was ich aktuell noch 
auskommentiert hatte, funktioniert. Auch zusammen mit dem IDDR2.

Sie fallende Flanke funktioniert also, nur die steigende macht 
Probleme...
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
library UNISIM;
6
use UNISIM.VComponents.all;
7
8
9
entity S2P_1laneDATA is
10
Port ( CLOCK_IN_P : in  STD_LOGIC;       --LVDS Takt
11
       CLOCK_IN_N : in  STD_LOGIC;       --LVDS Takt
12
     RESET : in  STD_LOGIC;            --Schieberegister Reset
13
     RESET_DCM : in STD_LOGIC;         --DCM Reset
14
     FULL_ris : out  std_logic;      --schieberegister mit 8bit geladen
15
     FULL_fal : out  std_logic;      --schieberegister mit 8bit geladen
16
       DATA_IN_P : in  STD_LOGIC;        --serielle Daten Eingang
17
     DATA_IN_N : in  STD_LOGIC;        --serielle Daten Eingang
18
     DATA_OUT_ris : out STD_LOGIC_VECTOR (7 downto 0); --parallele Daten Ausgang steigende Flanke
19
     DATA_OUT_fal : out STD_LOGIC_VECTOR (7 downto 0); --parallele Daten Ausgang fallende Flanke
20
     SET_IDDR2 : in  STD_LOGIC
21
      );
22
end S2P_1laneDATA;
23
24
architecture Behavioral of S2P_1laneDATA is
25
26
COMPONENT DIFF_CLOCK_IN
27
  PORT(
28
    CLKIN_N_IN : IN std_logic;
29
    CLKIN_P_IN : IN std_logic;
30
    RST_IN : IN std_logic;          
31
    CLKIN_IBUFGDS_OUT : OUT std_logic;
32
    CLK0_OUT : OUT std_logic;
33
    CLK180_OUT : OUT std_logic;
34
    LOCKED_OUT : OUT std_logic
35
    );
36
  END COMPONENT;
37
38
COMPONENT DIFF_DATA_IN
39
  PORT(
40
    DATA_N : IN std_logic;
41
    DATA_P : IN std_logic;          
42
    DATA_OUT : OUT std_logic
43
    );
44
  END COMPONENT;
45
46
COMPONENT schiebereg8bit
47
  PORT(
48
    CLOCK_SR : IN std_logic;
49
    RESET_SR : IN std_logic;
50
    DATA_IN_SR : IN std_logic;          
51
    FULL : OUT std_logic;
52
    DATA_OUT_SR : OUT std_logic_vector(7 downto 0)
53
    );
54
  END COMPONENT;
55
56
signal CLOCK_IN_DCM0 : STD_LOGIC;
57
signal CLOCK_IN_DCM180 : STD_LOGIC;
58
signal DCM_DIFF_LOCK : STD_LOGIC;
59
signal CLOCK_IN : STD_LOGIC;
60
signal DATA_IN : STD_LOGIC;
61
signal DATA_IN_ris : STD_LOGIC;
62
signal DATA_IN_fal : STD_LOGIC;
63
signal DATA_READ_EN_ris : STD_LOGIC;
64
signal DATA_READ_EN_fal : STD_LOGIC;
65
signal DATA_OUT_INT_ris : STD_LOGIC_VECTOR (7 downto 0);
66
signal DATA_OUT_INT_fal : STD_LOGIC_VECTOR (7 downto 0);
67
68
constant IDDR2_CE : STD_LOGIC := '1';
69
  
70
begin
71
72
Inst_DIFF_CLOCK_IN: DIFF_CLOCK_IN PORT MAP(
73
    CLKIN_N_IN => CLOCK_IN_N,
74
    CLKIN_P_IN => CLOCK_IN_P,
75
    RST_IN => RESET_DCM,
76
    CLKIN_IBUFGDS_OUT => CLOCK_IN,
77
    CLK0_OUT => CLOCK_IN_DCM0,
78
    CLK180_OUT => CLOCK_IN_DCM180,
79
    LOCKED_OUT => DCM_DIFF_LOCK
80
  );
81
82
Inst_DIFF_DATA_IN: DIFF_DATA_IN PORT MAP(
83
    DATA_OUT => DATA_IN,
84
    DATA_N => DATA_IN_N,
85
    DATA_P => DATA_IN_P
86
  );
87
88
IDDR2_inst : IDDR2
89
generic map (
90
   DDR_ALIGNMENT => "NONE", -- Sets output alignment 
91
                            -- to "NONE", "C0" or "C1"
92
   INIT_Q0 => '0', -- Sets initial state of the Q0  
93
                   --   output to ?0? or ?1?
94
   INIT_Q1 => '0', -- Sets initial state of the Q1 
95
                   --   output to ?0? or ?1?
96
   SRTYPE => "SYNC") -- Specifies "SYNC" or "ASYNC" 
97
                      --   set/reset
98
port map (
99
   Q0 => DATA_IN_ris, -- 1-bit output captured with C0 clock
100
   Q1 => DATA_IN_fal, -- 1-bit output captured with C1 clock
101
   C0 => CLOCK_IN_DCM0, -- 1-bit clock input
102
   C1 => CLOCK_IN_DCM180, -- 1-bit clock input
103
   CE => IDDR2_CE, -- 1-bit clock enable input
104
   D => DATA_IN,   -- 1-bit DDR data input
105
   R => RESET,   -- 1-bit reset input
106
   S => SET_IDDR2    -- 1-bit set input
107
);
108
109
110
Inst_schiebereg8bit1: schiebereg8bit PORT MAP(
111
    CLOCK_SR => CLOCK_IN_DCM0,
112
    RESET_SR => RESET,
113
    DATA_IN_SR => DATA_IN_ris,
114
    FULL => DATA_READ_EN_ris,
115
    DATA_OUT_SR => DATA_OUT_INT_ris
116
  );
117
118
Inst_schiebereg8bit2: schiebereg8bit PORT MAP(
119
    CLOCK_SR => CLOCK_IN_DCM0,
120
    RESET_SR => RESET,
121
    DATA_IN_SR => DATA_IN_fal,
122
    FULL => DATA_READ_EN_fal,
123
    DATA_OUT_SR => DATA_OUT_INT_fal
124
  );
125
  
126
READ_EN : process (RESET, DATA_READ_EN_ris, DATA_READ_EN_fal, DATA_OUT_INT_ris, DATA_OUT_INT_fal)
127
begin
128
    if (RESET = '1') then
129
      DATA_OUT_ris <= (others => '0');
130
    elsif (DATA_READ_EN_ris = '1') then
131
      DATA_OUT_ris <= DATA_OUT_INT_ris;
132
    else
133
      DATA_OUT_ris <= (others => '0');
134
    end if;
135
    
136
    if (RESET = '1') then
137
      DATA_OUT_fal <= (others => '0');
138
    elsif (DATA_READ_EN_fal = '1') then
139
      DATA_OUT_fal <= DATA_OUT_INT_fal;
140
    else
141
      DATA_OUT_fal <= (others => '0');
142
    end if;
143
    
144
end process;
145
146
FULL_ris <= DATA_READ_EN_ris;
147
FULL_fal <= DATA_READ_EN_fal;
148
149
150
end Behavioral;

von Andreas B. (loopy83)


Lesenswert?

Ich denke ich habe den Fehler gefunden.
Der IDDR2 erzeugt ein Delay im Datenzweig... der Takt ist laut 
Simulation 100ps eher da als die Daten und daher kann auch keine '1' 
übernommen werden.

Nun ist wieder die Frage: Wie kann ich die Daten synchron zum Takt 
schalten?

Kann ich den Takt irgendwie künstlich durch ein paar Gatter schicken, 
dass dieser die gleiche Laufzeit hat wie die Daten und beide wieder 
synchron am Eingang des SRs ankommen?

DANKE!!!

von Christian R. (supachris)


Angehängte Dateien:

Lesenswert?

Für genau diesen Anwendungsfall gibts doch den DCM. Da kannst du die 
Phasenlage aller Ausgangstakte zum Eingangstakt nochmal ganz fein 
einstellen, im ps-Stufen. Siehe Bild -> Phase Shift

In der Hardware kann das dann durchaus noch mehr als 100ps werden. Da 
musst du dann bestimmt nochmal am Delay drehen.

von Andreas B. (loopy83)


Lesenswert?

Ach na klar... oh mann... die einfachsten Lösungen sieht man nicht...

Also stelle ich den Parameter CLKOUT_PHASE_SHIFT auf "FIXED", nur 
welcher Parameter legt fest, wie groß das Delay ist?

Ich würde nur sehr ungern einen neuen IPCore einbinden. Den vorhandenen 
editieren wäre mir fast lieber.

VIELEN DANK!!!

von Christian R. (supachris)


Lesenswert?

Na gut, du könntest auch das Datenblatt des DCM oder im User Guide 
lesen, aber "PHASE_SHIFT = 5" wäre zum Beispiel eine Einstellung. 
Ausrechnen, wieviel das ist, musst du aber selbst, die Formel steht im 
Datenblatt.

von Andreas B. (loopy83)


Lesenswert?

Hallo,

Kann man dieses Delay denn auch simulieren?

Ich habe nun doch einen neuen IP Core erzeugt und den VDHL Code kopiert 
und anschließend versucht zu simulieren. Egal ob Phaseshift => 0 oder => 
255, das Simulationsergebnis unterscheidet sich in keinster Weise. Auch 
im Größten Zoom ist kein Delay des DCM0 zum Eingangstakt sichtbar.

Das hier ist der erzeigte Code, den Phaseshift Parameter habe ich dann 
wahlweise verändert, nur leider ohne Ergebnis:
1
entity DIFF_CLOCK_IN is
2
   port ( CLKIN_N_IN        : in    std_logic; 
3
          CLKIN_P_IN        : in    std_logic; 
4
          RST_IN            : in    std_logic; 
5
          CLKIN_IBUFGDS_OUT : out   std_logic; 
6
          CLK0_OUT          : out   std_logic; 
7
          CLK180_OUT        : out   std_logic; 
8
          LOCKED_OUT        : out   std_logic);
9
end DIFF_CLOCK_IN;
10
11
architecture BEHAVIORAL of DIFF_CLOCK_IN is
12
   signal CLKFB_IN          : std_logic;
13
   signal CLKIN_IBUFGDS     : std_logic;
14
   signal CLK0_BUF          : std_logic;
15
   signal CLK180_BUF        : std_logic;
16
   signal GND_BIT           : std_logic;
17
begin
18
   GND_BIT <= '0';
19
   CLKIN_IBUFGDS_OUT <= CLKIN_IBUFGDS;
20
   CLK0_OUT <= CLKFB_IN;
21
   CLKIN_IBUFGDS_INST : IBUFGDS
22
      port map (I=>CLKIN_P_IN,
23
                IB=>CLKIN_N_IN,
24
                O=>CLKIN_IBUFGDS);
25
   
26
   CLK0_BUFG_INST : BUFG
27
      port map (I=>CLK0_BUF,
28
                O=>CLKFB_IN);
29
   
30
   CLK180_BUFG_INST : BUFG
31
      port map (I=>CLK180_BUF,
32
                O=>CLK180_OUT);
33
   
34
   DCM_SP_INST : DCM_SP
35
   generic map( CLK_FEEDBACK => "1X",
36
            CLKDV_DIVIDE => 2.0,
37
            CLKFX_DIVIDE => 1,
38
            CLKFX_MULTIPLY => 4,
39
            CLKIN_DIVIDE_BY_2 => FALSE,
40
            CLKIN_PERIOD => 6.250,
41
            CLKOUT_PHASE_SHIFT => "FIXED",
42
            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
43
            DFS_FREQUENCY_MODE => "LOW",
44
            DLL_FREQUENCY_MODE => "LOW",
45
            DUTY_CYCLE_CORRECTION => TRUE,
46
            FACTORY_JF => x"C080",
47
            PHASE_SHIFT => 128,
48
            STARTUP_WAIT => FALSE)
49
      port map (CLKFB=>CLKFB_IN,
50
                CLKIN=>CLKIN_IBUFGDS,
51
                DSSEN=>GND_BIT,
52
                PSCLK=>GND_BIT,
53
                PSEN=>GND_BIT,
54
                PSINCDEC=>GND_BIT,
55
                RST=>RST_IN,
56
                CLKDV=>open,
57
                CLKFX=>open,
58
                CLKFX180=>open,
59
                CLK0=>CLK0_BUF,
60
                CLK2X=>open,
61
                CLK2X180=>open,
62
                CLK90=>open,
63
                CLK180=>CLK180_BUF,
64
                CLK270=>open,
65
                LOCKED=>LOCKED_OUT,
66
                PSDONE=>open,
67
                STATUS=>open);
68
   
69
end BEHAVIORAL;

VIELEN, VIELEN DANK!!!

von Christian R. (supachris)


Lesenswert?

Ja kann man simulieren. Dazu muss die Simulations-Auflösung aber 1ps 
oder kleiner sein. Ich konnte den DCM bisher immer in der Simulation 
benutzen, allerdings instanziiere ich immer nur den Core, den der 
Core-Generator ausspuckt. Das machts übersichtlicher.

von Andreas B. (loopy83)


Lesenswert?

Hab es jetz genauso gelöst, hab den Core direkt eingebunden. So kann man 
ja auch recht einfach direkt über den Wizzard das Delay einstellen.

Nur leider kann ich kein Delay erzeugen. Der Versatz zwischen Daten und 
Clock bleibt unverändert bei 100ps... keine Chance daran zu rütteln und 
das Design zu ner vernünftigen Funktion zu bewegen.

Im Modelsim kann ich bis zu einem Abstand von 1ps zoomen, also an der 
Auflösung sollte es nicht liegen. Zumal ich nun testweise das Delay auf 
2ns gestellt habe. Leider keine Veränderung :(

von Duke Scarring (Gast)


Lesenswert?

@Andreas B.:
>Im Modelsim kann ich bis zu einem Abstand von 1ps zoomen,
Das reicht nicht.

Du mußt die Auflösung beim Simulieren anpassen:
1
vsim -t ps ...

Duke

von Andreas B. (loopy83)


Lesenswert?

In der .fdo Datei steht schon folgendes drin:

vsim -t 1ps   -lib work tb_TOPFILE_DCM_DELAY

Reicht das aus, oder wie verwende ich den Befehl?

Hab ihn gerade versucht im mehreren Varianten einzugeben, leider 
resultiert bisher jeder Versuch in einer Fehlermeldung.

Ich starte das Modelsim direkt aus dem ISE...

DANKE

von Duke Scarring (Gast)


Lesenswert?

@Andreas B:
Sieht eigentlich gut aus. Wie lautet denn die Fehlermaldung?
Laß mal die Zahl vor der Einheit weg:
1
vsim -t ps   -lib work tb_TOPFILE_DCM_DELAY

Duke

von Andreas B. (loopy83)


Lesenswert?

vsim -t ps   -lib work tb_TOPFILE_DCM_DELAY

damit macht er was, hatte ich vorhin schon einmal probiert.
Nur leider verschwinden dann meine Simulationsergebnisse (Kurven) und 
ich habe ihm bis jetzt noch nicht beibringen können, wieder erneut zu 
starten.

weder "restart" noch "run 100000" bewirken etwas.

Wenn ich erneut "do {tb_TOPFILE_DCM_DELAY.fdo}" eingebe, wie von ISE 
ganz am Anfang einer jeden Simulation, wird scheinbar alles wieder 
zurückgesetzt und die einstellungen von vsim -t gehen wieder verloren. 
Zumindest unterscheidet sich das Simulationsergebniss nicht von dem 
davor... sofern die Auflösung der Grund für das nicht wirkende Delay des 
DCM ist...

VIELEN DANK!

von Christian R. (supachris)


Lesenswert?

Naja, die Voreinstellung bei Xilinx ist schon 1ps Auflösung beim Start 
der Simulation. Aber um diesem allen aus dem Weg zu gehen, kommst du 
eventuell besser, wenn du dir im ModelSim eigene Projekte anlegst dafür. 
Das ist viel bequemer. Dann ein .do File, in dem die Befehle für die 
Simulation stehen:

vsim ...
add wave *
run 10000 ns

usw.

von Andreas B. (loopy83)


Lesenswert?

Also das bedeutet so viel, wie es liegt nicht an der Auflösung, dass die 
100ps Delay weiterhin bestehen und ich meinen Ausgangstakt vom DCM nicht 
verzögern kann.

Das ist weniger gut. Ich hatte gehofft, dass es nur noch eine 
Einstellungssache ist.

Auch wenn ich den DCM stand-alone simuliere und Eingangstakt und 
Ausgangstakt vergleiche, sind diese identisch trotz eingestelltem 
Delay... ich verstehs nicht :(

Aber ohne diese Verzögerung kann ich zwar schauen, dass mein Design was 
auswirft, aber inwieweit sinnvoll das ist, kann ich dann nicht mehr 
beurteilen, wenn meine Daten schon falsch eingelesen werden. Somit kann 
ich nicht mal die logische Funktion nachweisen und muss mich dann dazu 
in der realen Hardware noch mit Timingsachen rumschlagen... eine 
schlechte Kombination. Ich hoffe ich finde noch eine Lösung. Ich werde 
es mal mit einem komplett neuen Projekt versuchen, in dem ich einfach 
nur den DCM simuliere, ohne irgendetwas drum herum.

MfG

von Andreas B. (loopy83)


Angehängte Dateien:

Lesenswert?

Als einzelner Core, aufgerufen in einem eigenen Topfile in einem eigenen 
Projekt funktioniert die Verzögerung des Ausgangstaktes auch nicht :(

von Andreas B. (loopy83)


Lesenswert?

Könnte es was damit zu tun haben?
1
# WARNING: No extended dataflow License exists

von Christian R. (supachris)


Lesenswert?

Sind denn die Simulationsmodelle aktuell? Da gibts ja immer mal neue von 
Xilinx. Es gab gerade beim DCM mal Probleme, da ging z.B. das LOCK nie 
auf 1.

Edit: Ich habs eben mal getestet. Du hast einen Spartan 3e, stimmts? Da 
scheint die Simulations-Lib einen Bug zu haben, da gehts tatsächlich 
nicht (wohl aber in Hardware). Ich hatte das bisher am Virtex 4 benutzt, 
und da klappts auch in der Simulation bestens. Ich weiß nicht, ob die 
aktuellen Libs von Modelsim XE 6.4b zur ISE 11.3 das beheben, kann sein. 
Ich arbeite noch mit 6.3c

von Andreas B. (loopy83)


Lesenswert?

Ich habe einen Spartan 3A DSP XC3SD1800A-4FGG676C... bzw. das Starterkit 
dazu.

Ich teste den einfachen DCM einfach mal in der Hardware und versuche es 
zu messen... ich hoffe, dass ich hier in einem anderen Labor ein 
passendes Oszi auftreiben kann.

von Andreas B. (loopy83)


Lesenswert?

Also ich kann es leider nicht genau messen.
Das Oszi was ich gefunden habe kann zwar angeblich 500MHz bei 5GT/s, 
aber naja... wenn ich die Messspitzen anders anfasse, sehen die Kurven 
anders aus. MIt 160MHz ist eben nicht zu scherzen, wenn man dann noch 
1-3ns auflösen will.

Könnte eine ChipScope Lizenz die ganze Sache bereinigen bzw. Licht ins 
Dunkel bringen, was der DCM in der Hardware macht?
Die kostenlose Version von CS wird bei mir leider nicht fehlerfrei 
installiert und somit habe ich auch nicht die Auswahl, unter New Source 
einen CS Core zu implementieren.

von Christian R. (supachris)


Lesenswert?

ChipScope kann nur taktsynchron sampeln. Das bringt dir nix weiter. 
Klappt denn der Receiver in der Hardware auch nicht? Eventuell kommst du 
mit Constraints weiter, also mit "OFFSET IN BEFORE" dem ISE sagen, dass 
die Daten da x ns vor dem Takt anliegen müssen.

von Andreas B. (loopy83)


Lesenswert?

Ok, also ist ChipScope der falsche Weg.

Der Reciever in der Hardware funktioniert. Also der DCM spuckt am 
Ausgang einen Takt aus, nur leider kann ich nicht exakt nachmessen, ob 
nun wirklich das parametrierte Delay eingehalten wird, da mir die 
Lokalisierung der steigenden und fallenden Flanken schwer fällt. Die 
Signale sind schon sehr verwaschen und alles andere als ein sauberes 
Rechteck (ist ja auch nicht zu erwarten). Ich habe die LVDS Signale eher 
stiefmütterlich an das Starterkit geführt, ohne Terminierung und alles. 
Auf meiner eigenen Hardware habe ich es ordentlich gemacht. Impedanzen 
von 100Ohm eingehalten und auch dementsprechend terminiert. Aber die ist 
eben noch nicht fertig, so muss ich vorerst auf das Starterkit 
zurückgreifen.

>Eventuell kommst du
>mit Constraints weiter, also mit "OFFSET IN BEFORE" dem ISE sagen, dass
>die Daten da x ns vor dem Takt anliegen müssen.

Das bedeutet, dass ich den Datenkanälen ein constraint zuweise, dass 
diese Daten meinetwegen 1ns vor der Taktflanke anliegen müssen? Also 
wird dann bei der Implementierung dem Clock automatisch ein Delay 
verpasst?
Die Variante schaue ich mir mal an.
Nur könnte ich da dann nicht Probleme mit meinem IDDR2 bekommen?
Die Daten kommen ja auf der fallenden und auf der steigenden Flanke des 
Taktes. Oder wird einfach eine komplette Phasenverschiebung des Taktes 
zu den Daten implementiert?

Constraints werden doch aber erst in der realen Hardware aktiv, bei der 
Simulation habe ich dadurch keinen Vorteil, richtig?

Vielen Dank!

von Andreas B. (loopy83)


Lesenswert?

Ich hab gerade das appnote wp237 gefunden. Ich denke da steht alles 
drin, was es mit dem OFFSET IN BEFORE zu tun hat und es ist auch ein 
Bsp. für DDR gegeben.

Ich werde mich mal mit diesen Befehlen versuchen:
1
NET "CLKIN_IN_N" TNM_NET = CLKIN_IN_N;
2
TIMESPEC TS_CLKIN_IN_N = PERIOD "CLKIN_IN_N" 6.25 ns HIGH 50%;
3
NET "CLKIN_IN_P" TNM_NET = CLKIN_IN_P;
4
TIMESPEC TS_CLKIN_IN_P = PERIOD "CLKIN_IN_P" 6.25 ns HIGH 50%;
5
6
OFFSET = IN 1ns BEFORE CLKIN_IN_P;
7
OFFSET = IN -1ns BEFORE CLKIN_IN_P TIMEGRP falling_ffs_grp;

Bei differentiellen Signalen sollte es ja ausreichen, auf den positiven 
Zweig Bezug zu nehmen, oder?

MfG

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.