Forum: FPGA, VHDL & Co. LVDS an Xilinx V2P


von Markus (Gast)


Lesenswert?

Hallo,

ich versuche verzweifelt ein differentielles Clock-Signal in eine 
Single-Ended Clock zu konvertieren. Ich benutze einen Xilinx Virtex 2 
Pro XC2VP30-FPGA und habe mein differentielles Signal an den Pins F3 und 
F4.

Mit dieser Anleitung: 
http://www.fpgarelated.com/usenet/fpga/show/31651-1.php zusammen mit dem 
Xilinx Answer Record 19539: 
http://www.xilinx.com/support/answers/19539.htm habe ich es versucht, 
ich bekomme jedoch immer folgenden Fehler:

Running directed packing...
ERROR:Pack:1107 - Unable to combine the following symbols into a single 
DIFFS
   component:
     PAD symbol "CLK_N" (Pad Signal = CLK_N)
     SlaveBuffer symbol
   "diff_input_buf_0/diff_input_buf_0/XPS_IBUFDS_IP_CORE_GENERATE[0].MULTIP 
LE_IB
   UFDS/SLAVEBUF.DIFFIN" (Output Signal =
   diff_input_buf_0/diff_input_buf_0/XPS_IBUFDS_IP_CORE_GENERATE[0].MULTIPL 
E_IBU
   FDS/SLAVEBUF.DIFFIN)
   Each of the following constraints specifies an illegal physical site 
for a
   component of type DIFFS:
     Symbol "CLK_N" (LOC=F3)
   Please correct the constraints accordingly.
ERROR:Pack:1107 - Unable to combine the following symbols into a single 
DIFFM
   component:
     PAD symbol "CLK_P" (Pad Signal = CLK_P)
     DIFFAMP symbol
   "diff_input_buf_0/diff_input_buf_0/XPS_IBUFDS_IP_CORE_GENERATE[0].MULTIP 
LE_IB
   UFDS/IBUFDS" (Output Signal = VI_CLOCK_OBUF)
   Each of the following constraints specifies an illegal physical site 
for a
   component of type DIFFM:
     Symbol "CLK_P" (LOC=F4)
   Please correct the constraints accordingly.


Mein Definition im .ucf-file:
NET "CLK_N"  LOC = "F3"  | IOSTANDARD = LVDS_25 ;
NET "CLK_P"  LOC = "F4"  | IOSTANDARD = LVDS_25 ;

und im .mhs-file:
PORT CLK_N = CLK_N, DIR = I, IOB_STATE = BUF, SIGIS = CLK
PORT CLK_P = CLK_P, DIR = I, IOB_STATE = BUF, SIGIS = CLK

BEGIN DIFF_INPUT_BUF
 PARAMETER INSTANCE = DIFF_INPUT_BUF_0
 PARAMETER HW_VER = 1.00.a
 PARAMETER INPUT_BUS_WIDTH = 1
 PORT DIFF_INPUT_P = CLK_P
 PORT DIFF_INPUT_N = CLK_N
 PORT SINGLE_ENDED_INPUT = vi_clk
END


Irgendjemand der sich da auskennt?

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


Lesenswert?

> Xilinx Virtex 2 Pro XC2VP30-FPGA
Welches Gehäuse?
Welche Sprache?
Welchen Synthesizer?

von Markus (Gast)


Lesenswert?

>> Xilinx Virtex 2 Pro XC2VP30-FPGA
>Welches Gehäuse?
>Welche Sprache?
>Welchen Synthesizer?

Package: ff896
Synthesetool: XST
Sprache: VHDL

Hier noch der Code den ich laut Xilinx Answer Record 19539
(http://www.xilinx.com/support/answers/19539.htm) verwendet habe:

-- Differential Input Buffer IP Core VHDL Soure Code
-- Kieran O' Leary - 11th June 2004

-- Description: This core will take two differential bus inputs 
"DIFF_INPUT_P" and "DIFF_INPUT_N" and convert it to a single-ended input 
bus
-- "SINGLE_ENDED_INPUT". SINGLE_ENDED_INPUT<0> will be associated with 
DIFF_INPUT_P<0> and DIFF_INPUT_N<0> and so on
-- By default the IOSTANDARD will be LVDS_25 but this can be changed 
along with the pin location in a UCF file.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
library UNISIM;
use UNISIM.VComponents.all;

entity DIFF_INPUT_BUF is
    Generic (
          INPUT_BUS_WIDTH : integer := 4);
   Port ( SINGLE_ENDED_INPUT : out std_logic_vector(INPUT_BUS_WIDTH-1 
downto 0);
           DIFF_INPUT_P : in std_logic_vector(INPUT_BUS_WIDTH-1 downto 
0);
        DIFF_INPUT_N : in std_logic_vector(INPUT_BUS_WIDTH-1 downto 0));
end DIFF_INPUT_BUF;

architecture Behavioral of DIFF_INPUT_BUF is

  component IBUFDS
    port (O : out STD_ULOGIC;
      IB : in STD_ULOGIC;
      I : in STD_ULOGIC);
  end component;

begin
XPS_IBUFDS_IP_CORE_GENERATE: for i in 0 to INPUT_BUS_WIDTH-1 generate
  MULTIPLE_IBUFDS : IBUFDS
    port map (I => DIFF_INPUT_P(i), IB => DIFF_INPUT_N(i), O => 
SINGLE_ENDED_INPUT(i));
end generate;

end Behavioral;

von Markus (Gast)


Lesenswert?

OK, ich denke ich habe rausgefunden, warum es nicht geht. Die beiden 
differentiellen Pins befinden sich in Bank2, wo sich auch einige 
LVTTL-Signale befinden, die ich laut Datenblatt (V2p) S.40 wegen den 
unterschiedlichen Spannungen nicht miteinander kombinieren kann.
Und LVDS_33 wird nicht unterstützt von den FPGAs der V2p-Serie. 
Verdammt, meine Platine ist schon fertig gelayoutet und bestückt.

von HildeK (Gast)


Lesenswert?

>Verdammt, meine Platine ist schon fertig gelayoutet und bestückt.

Kann man nicht schon vor dem Platinenlayout und vor dem VHDL-Design 
das Interface von den Tools auf solche Probleme prüfen lassen? Also, ucf 
erstellen mit den Buffertypen und checken lassen?

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


Lesenswert?

>... vor dem Platinenlayout ... solche Probleme prüfen lassen?
Altium probiert sowas in die Richtung.
Aber der übliche Designflow ist (leider) zuerst die 
Schaltplanerstellung, danach das HDL-Design und das Layout gleichzeitig.
Und wehe, wenn der Schaltplanersteller einen Denkfehler drin hat, oder 
das Datenblatt von einem der ICs nicht komplett durchgearbeitet hat...

von HildeK (Gast)


Lesenswert?

>Aber der übliche Designflow ist (leider) zuerst ...
Ja, aber du musst auch für die Schaltplanerstellung festlegen, welches 
Signal an welchen Pin soll - das kann dann auch fast gleichzeitig der 
UCF-File sein (oder welches nützliche Format es auch immer sei) oder er 
ist einfach daraus ableitbar. Und damit kann man doch schon mit nur 
wenig Zusatzaufwand über die VHDL-Tools erste Checks machen.
Sinn macht dies speziell dann, wenn HW-Entwickler und VHDL-Entwickler 
nicht die selbe Person ist - wie das in meinem Berufsalltag der Fall 
ist.
Der Aufwand ist lächerlich - im Vergleich zur gesamten Entwicklungszeit 
von Board und VHDL-Code - speziell auch im Vergleich zum Redesign und 
den dabei anfallenden zusätzlichen Kosten und der zusätzlichen Zeit.
Speziell bei komplexen und 'pinreichen' FPGAs ist sonst ein 
(zusätzliches) Redesign praktisch garantiert.

Typische Probleme, die dabei zu Tage kommen:
- Single ended clocks dürfen nur an den _p eines dedicated Clk-Eingangs, 
der andere muss frei bleiben (Virtex5)
- keine Mischung von Logikbuffern unterschiedlicher Spannungsversorgung 
in einer Bank
- Anpassung von Herstellermakros (z.B. DDR-, PCI-IF)
Die Liste ist weiter fortsetzbar ...

>Altium probiert sowas in die Richtung.
Voll integriert wäre natürlich große Klasse!
Wir hatten das Pinout in einem Excel-Sheet und einige zusätzliche 
Spalten enthielten die Infos über Buffertypen und -stärke, I/O-Richtung, 
eigene Signalnamen, selbst Swap-Informationen. Ein Makro eines Kollegen 
hat daraus direkt den UCF erstellt.

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.