Forum: FPGA, VHDL & Co. Differential clock in UCF, FRAGE


von Gast (Gast)


Lesenswert?

Hallo,

ich benutze ein SPARTAN SP 601 system, welches éin 200 MHZ sys clock 
besitzt. Ich möchte ein Signal dem 200 MHz zuteilen, aber in der ucf 
komm ich nicht so recht, in der annleitung steht:

NET "SYSCLK_N" LOC = "K16";
NET "SYSCLK_P" LOC = "K15";


Wenn mein Signal MASTERCLK heist, wie sieht die ucf aus? So : ?


NET "MASTERCLK_N" LOC = "K16";
NET "MASTERCLK_P" LOC = "K15";


?


Gruss

DANKE

von Christian R. (supachris)


Lesenswert?

Wenn die beiden Signale im Toplevel auch so heißen, dann ja. Du musst ja 
mit beiden Signalen bis zu einem IBUFGDS oder direkt zu einem DCM gehen 
und die da anschließen.

von Gast (Gast)


Lesenswert?

Ich hab aber nur ein Signal das ich mit 200 Mhz betereiben möchte. Aber 
diese 200 MHz gibt es nur als diff. Signal.... wie mach ich es dann?

ALso nur ein MASTERCLK....?

von Christian R. (supachris)


Lesenswert?

Dann musst du einen IBUFGDS instanziieren um das differenzielle Signal 
erst mal in den Chip zu bekommen.

von Gast (Gast)


Lesenswert?

>Dann musst du einen IBUFGDS instanziieren um das differenzielle Signal
erst mal in den Chip zu bekommen.


Hm... und wie mach ich das ?




Gruß

von Christian R. (supachris)


Lesenswert?

Schau mal in dein ISE:

Edit -> Language Templates -> VHDL -> Device Primitive Instantiation -> 
Spartan-6 -> I/O Components -> Input -> Differential Global Clock

Da hast du rechts dann den VHDL Code und sogar mit Erklärung. Alternativ 
steht das auch im Datenblatt/User Guide.

von Gast (Gast)


Lesenswert?

Ok, danke für die antwort. ICh hab das so gemacht

1
Library UNISIM;
2
use UNISIM.vcomponents.all;
3
4
5
library IEEE;
6
use IEEE.STD_LOGIC_1164.ALL;
7
use IEEE.STD_LOGIC_ARITH.ALL;
8
use IEEE.STD_LOGIC_UNSIGNED.ALL;
9
10
---- Uncomment the following library declaration if instantiating
11
---- any Xilinx primitives in this code.
12
--library UNISIM;
13
--use UNISIM.VComponents.all;
14
15
entity Test is
16
    Port ( CLKIN : in  STD_LOGIC;
17
           reset : in std_logic;
18
        CLKOUT1: out std_logic;
19
        CLKOUT2 : out  STD_LOGIC);
20
end Test;
21
22
23
architecture Behavioral of Test is
24
25
signal cnt: integer range 0 to 1 :=0;
26
27
begin
28
29
30
  IBUFGDS_inst : IBUFGDS
31
   generic map (
32
      DIFF_TERM => FALSE, -- Differential Termination 
33
      IOSTANDARD => "DEFAULT")
34
   port map (
35
      O => open,  -- Clock buffer output
36
      I => CLKIN,  -- Diff_p clock buffer input (connect directly to top-level port)
37
      IB => CLKIN -- Diff_n clock buffer input (connect directly to top-level port)
38
   );


So ganz klappt das nicht, bin aber auch anfänger. Kann mir jemand sagen 
wo ich den Fehler mache? und wie muss ide ucf. ausschauen?


Gruß

Danke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du kannst nicht den selben Takt auf den p und den n eingang geben. Das 
müssen 2 zueinandergehörende, aber unterschiedliche Pins sein. Und ganz 
am anfang schreibst du doch was vom MASTERCLK_N und MASTERCLK_P...
Also eher so:
1
entity Test is
2
    Port ( MASTERCLK_P : in  STD_LOGIC;
3
           MASTERCLK_N : in  STD_LOGIC;
4
           reset : in std_logic;
5
           CLKOUT: out std_logic);
6
end Test;
7
8
9
  IBUFGDS_inst : IBUFGDS
10
   generic map (
11
      DIFF_TERM => FALSE, -- Differential Termination 
12
      IOSTANDARD => "DEFAULT")
13
   port map (
14
      O => CLKOUT,  -- Clock buffer output, das ist jetzt der FPGA-interne Takt
15
      I => MASTERCLK_P,  -- Diff_p clock buffer input (connect directly to top-level port)
16
      IB => MASTERCLK_N -- Diff_n clock buffer input (connect directly to top-level port)
17
   );

Die andere Richtung wäre ein OBUFDS...

von Gast (Gast)


Lesenswert?

Hi,

danke aber eigentlich will kein _p und _N ich möchte die 200 MHZ auf ein 
Signal geben, diese sind aber nur Differentiel verfügbar, also wie sag 
ich den bescheid das ich dies nur auf Eingang beziehen will?


Danke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Diferentielle Signale haben nun mal eine p und eine n Strippe (oder auch 
eine + und eine - oder eine h und eine l). Du willst also aus einem 
differentiellen LVDS-Signal ein "normales" Signal machen?
Fall ja:
1
entity Test is
2
    Port ( MASTERCLK_P : in  STD_LOGIC;
3
           MASTERCLK_N : in  STD_LOGIC;
4
           reset : in std_logic;
5
           CLKOUT: out std_logic);
6
end Test;
7
8
  IBUFDS_inst : IBUFDS
9
   generic map (
10
      DIFF_TERM => FALSE, -- Differential Termination 
11
      IOSTANDARD => "DEFAULT")
12
   port map (
13
      O => CLKOUT,  -- Clock buffer output, das ist jetzt der FPGA-interne Takt
14
      I => MASTERCLK_P,  -- Diff_p buffer input (connect directly to top-level port)
15
      IB => MASTERCLK_N -- Diff_n buffer input (connect directly to top-level port)
16
   );
Ja, wo isser denn, der Unterschied?

Falls nein: Zeichne einfach mal ein Bild, damit man sich was drauf 
Abbilden kann.

von Christian R. (supachris)


Lesenswert?

Gast schrieb:
> Hi,
>
> danke aber eigentlich will kein _p und _N ich möchte die 200 MHZ auf ein
> Signal geben, diese sind aber nur Differentiel verfügbar, also wie sag
> ich den bescheid das ich dies nur auf Eingang beziehen will?

Das geht nur mit dem IBUFGDS, wie schon gesagt wurde. Die beiden 
differenziellen Pins setzt der in ein normales Clock Signal um. Du 
musst über _p und _n gehen, wenn dein Takt differenziell am Chip 
anliegt.

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.