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?
> Xilinx Virtex 2 Pro XC2VP30-FPGA
Welches Gehäuse?
Welche Sprache?
Welchen Synthesizer?
>> 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;
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.
>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?
>... 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...
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.