Forum: FPGA, VHDL & Co. differential signal output


von Michi (Gast)


Lesenswert?

Hallo Zusammen,

Hätte da eine Frage...

Habe ich einen XC3S400-4FT256C und programmiere in VHDL.
Benutze zur Zeit meine I/Os nur als Single Ended.
Wollte jetzt gerne auf Differential Signals umsteigen.

Anscheinend reicht es nicht aus dass ich nur in der UCF Datei den 
IOSTANDARD = LVDS_25 setze...

Bei der Suche auf Xilinx.com habe nur wenig Erfolg gehabt, bzw. verstehe 
ich nicht für was ich einen Buffer erzeugen muss. Ausserdem werden dort 
auf Instanzen OBUF_LDVS, INV, und OBUF_LVDS zurückgegriffen. Kann die 
aber doch nicht einfach als Black Boxes instanzieren??

Bei den Pins in meienm Target habe ich aufgepasst dass ich auch zwei 
Paare benutze.
Bin mir auch nicht so wirklich sicher ob meine Hardware diesen Modus 
unterstützt. Das Datenblatt wiederspricht sich an einigen Stellen.

Vielen Dank im vorraus.

von Ulk (Gast)


Lesenswert?

Hallo Michi,

so weit ich weis gibt es bei vielen neueren FPGAs PAD-Paare die dafür 
ausgelegt sind das zu machen was du willst.
Zum beispiel das:
   OBUFTDS_inst : OBUFTDS
   generic map (
      IOSTANDARD => "DEFAULT")
   port map (
      O => O,     -- Diff_p output (connect directly to top-level port)
      OB => OB,   -- Diff_n output (connect directly to top-level port)
      I => I,     -- Buffer input
      T => T      -- 3-state enable input
   );
könnte dir helfen.

Ist eine Vorlage von Xilinx im:VHDL\Device Primitive 
Instantation\FPGA\I/O Components\Output zu finden.

Ich weis von einem Kollegen das die Typen im Namen hinten ...DS heissen.
Leider gibt es die nicht für CPLDs, was mir helfen würde.

Gruß, Ulrich

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


Lesenswert?

> XC3S400-4FT256C
Wenn es nicht unbedingt gleich ein Tristate LVDS-Ausgang sein muß:
1
   LVDSO_0 : OBUFDS
2
   generic map (IOSTANDARD => "BLVDS_25")
3
   port map ( I  => lvdsout0,
4
              O  => lvdsout0_p,
5
              OB => lvdsout0_n
6
   );
Und in der UCF Datei:
1
NET "lvdsout0_n"    LOC = "W9"   | IOSTANDARD = LVDS_25 ; 
2
NET "lvdsout0_p"    LOC = "V9"   | IOSTANDARD = LVDS_25 ;

LVDS-Eingänge dann z.B. über:
1
   -- Takt
2
   LVDS_CLOCK : IBUFGDS
3
   port map ( O  => lvdsclkin,
4
              I  => lvdsclkin_p,
5
              IB => lvdsclkin_n
6
   );
7
8
   -- D0
9
   LVDS_0 : IBUFDS
10
   port map ( O  => lvdsin0,
11
              I  => lvdsin0_p,
12
              IB => lvdsin0_n
13
   );

Zur Simulation solltest du dann noch die Xilinx Primitives einbinden:
1
--  Xilinx Primitives
2
Library UNISIM;
3
use UNISIM.vcomponents.all;

von Michi (Gast)


Lesenswert?

Danke, hat gut geklappt.

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.