- Virtex 6 - VHDL Guten Morgen, Es liegt ein differentielles Signal (x_N, X_P) vor. Bei dem Ausgangssignal (welches ich im weiteren intern im FPGA nutzen möchte) handelt es sich um ein single ended Signal y. Wie folgt habe ich dieses umgesetzt: Library UNISIM; use UNISIM.vcomponents.all; . . . component IBUFGDS port ( I : in STD_LOGIC; IB : in STD_LOGIC; O : out STD_LOGIC ); end component; IBUFGDS_Y : IBUFGDS generic map (IOSTANDARD => "LVDS_25") port map ( O => y, I => x_P, IB => x_N);. Dadrauf folgt folgende Fehlermeldung: Line 125: Type error near y ; current type std_logic_vector; expected type std_ulogic Line 125: Type error near x_P ; current type std_logic_vector; expected type std_ulogic Line 125: Type error near x_N ; current type std_logic_vector; expected type std_ulogic Unit <behavioral> ignored due to previous errors. Kann mir eventuell einer eine Lösung vorschlagen, oder das Problem aufzeigen? Möchte ich eine differentielles Ausgangssignal erzeugen, dann schreibe ich doch component OBUFDS port ( O : out STD_LOGIC; OB : out STD_LOGIC; I : in STD_LOGIC ); end component; OBUFGDS_Y : OBUFGDS generic map (IOSTANDARD => "LVDS_25") port map ( O => Y_N, OB => Y_P, I => Y);. richtig?
FPGA schrieb im Beitrag #3413553: > Line 125: Type error near y ; current type std_logic_vector; expected > type std_ulogic > Line 125: Type error near x_P ; current type std_logic_vector; expected > type std_ulogic > Line 125: Type error near x_N ; current type std_logic_vector; expected > type std_ulogic Das Problem liegt nicht im geposteten Code. Zeig doch mal die Typdefinitionen für y, x_P und x_N.
Außerdem ist der IBUFGDS nur für Takt-Eingänge gedacht, dessen Ausgang geht nämlich auf ein internes Takt-Netz. IBUFDS ist für Daten.
Vielen Dank. Ich habe die Anregung einmal umgesetzt. component IBUFDS port ( I : in STD_LOGIC; IB : in STD_LOGIC; O : out STD_LOGIC); end component; component OBUFDS port ( O : out STD_LOGIC; OB : out STD_LOGIC; I : in STD_LOGIC); end component; begin ... IBUFDS_Y_1 : IBUFDS -- generic map (IOSTANDARD => "LVDS_25") port map ( O => Y_1, I => X_P, IB => X_N); IBUFDS_Y_2 : IBUFDS -- generic map (IOSTANDARD => "LVDS_25") port map ( O => Y_N, OB => Y_P, I => Y); So läuft es zumindestens ohne eine Fehlermeldung durch. Das Beispiel habe ich von http://www.cs.indiana.edu/hmg/le/project-home/xilinx/ise_8.1/doc/usenglish/de/libs/lib/ibufds.pdf. Dort kommentiert der Autor generic map (IOSTANDARD => "LVDS_25") allerdings ein. Dieses funktioniert bei mir nicht. Es wird dann eine Meldung ausgegeben (IOSTANDARD nicht definiert ...). X_N, x_P ... dürften auch Vektoren sein, oder muss man dafür ein anderes Konstrukt wählen? Dank euch
Ich habe die Antwort im "Virtex-6 Libraries Guide for HDL Designs" (S.154/154)gefunden. Danke euch nocheinmal für die Hilfe. Für alle anderen, die eine Ähnliche Frage haben: library UNISIM; use UNISIM.vcomponents.all; ... signal y :std_logic; signal x_N:std_logic; signal x_P:std_logic; ... IBUFDS_y : IBUFDS generic map ( DIFF_TERM => FALSE, IBUF_LOW_PWR => TRUE, IOSTANDARD => "DEFAULT") port map ( O => y, I => x_P, IB => x_N); Für den Output Buffer siehe Seite 256/257. Für Vektoren, d.h. signal x_n :std_logic_vector (2 downto 0) funktiniert es bei mir nicht. Hier muss jedes Bit x_n(0),x_n(1),x_n(2) betrachtet werden. Falls ich falsch liege, oder es für vektorielle Signale eine andere Lösung gibt, wäre es nett diese zu posten.
Für Vektoren musst du dann alles hinschreiben, eleganter gehts natürlich mit einer "for ... generate" Schleife.
FPGA schrieb im Beitrag #3413616: > IBUFDS_Y_2 : IBUFDS > port map ( > O => Y_N, > OB => Y_P, > I => Y); > X_N, x_P ... dürften auch Vektoren sein? Nein, denn ein paar Zeilen weiter oben schreibst du selber > component IBUFDS > port ( I : in STD_LOGIC; > IB : in STD_LOGIC; > O : out STD_LOGIC); > end component; Und STD_LOGIC ist /= STD_LOGIC_VECTOR. > Dort kommentiert der Autor generic map (IOSTANDARD => "LVDS_25") > allerdings ein. Dieses funktioniert bei mir nicht. Es wird dann eine > Meldung ausgegeben (IOSTANDARD nicht definiert ...). Vermutlich ist beim "Autor" diese Definition vorhanden und bei dir nicht. Das Schöne und manchmal Umständliche an VHDL ist die strikte Typverwaltung. Jede Konvertierung und jeder Typ muss vor der Verwendung angegeben werden. Sonst stellt sich der Synthesizer sofort dumm und sagt "undefined!"
Vielen Dank. Ich habe noch eine generelle Frage zu den verwendeten Signaltypen. Bei einem differentiellen Ausgang x_N, x_P sind diese vom Datentyp LVDS => UCF-File ... NET "x_N" LOC = "A1"| IOSTANDARD = LVDS_25; NET "x_P" LOC = "A2"| IOSTANDARD = LVDS_25; In der main.vhd habe ich diese dann Einbunden als ... entity main is Port ( x_N : out std_logic; x_P : out std_logic); end main; architecture Behavioral of main is signal y std_logic := '0'; begin OBUFDS_TX_FRAME : OBUFDS generic map ( IOSTANDARD => "DEFAULT") port map ( O => x_net, OB => x_N_net, I => y); end Behavioral; Vom Verhalten soll jetzt das Signal y differentiel zwischen Pin A1 und A2 anliegen. Korrekt? Das Signal ist vom Typ STD_LOGIC. Ich bekommen teils eine solche Fehlermeldung: ERROR:Bitgen - Could not find programming information for I/O standard LVDS_25 drive=-1, slew=*, master=*. The programming of the output buffers will not be correct. Zum besseren Verständnis also diese Nachfrage. Danke euch
Habe es bis auf ein Signal geschafft: ... y_P : out STD_LOGIC_VECTOR(5 downto 0); y_N : out STD_LOGIC_VECTOR(5 downto 0); ... signal y: STD_LOGIC_VECTOR(5 downto 0) := "000000"; signal y_P_net: STD_LOGIC_VECTOR(5 downto 0) := "000000"; signal y_N_net: STD_LOGIC_VECTOR(5 downto 0) := "111111"; Loop_Y: for i in 0 to 5 generate OBUFDS_Y : OBUFDS generic map (IOSTANDARD => "DEFAULT") port map ( O => y_P_net(i), OB => y_N_net(i), I => y(i)); end generate Loop_Y; Zugehöriges UCF-File NET "y_P<0>" LOC = "D34"| IOSTANDARD = LVDS_25; ... NET "y_N<0>" LOC = "D34"| IOSTANDARD = LVDS_25; ... y_N <= y_N_net; y_P <= y_P_Net; ERROR:Pack:1107 - Pack was unable to combine the symbols listed below into a single IOBM component because the site type selected is not compatible. Ich sehe den Fehler insofern nicht, da der Rest des Programms funktioniert, wenn ich die oben aufgezeigten Zeilen auskommentiere. D.h. der Fehler muss beim Signal y, y_p, y_n etc liegen
FPGA schrieb im Beitrag #3414249: > da der Rest des Programms Eins vorneweg: es ist kein Programm. Sondern eine Hardwarebeschreibung. Deshalb heißt VHDL auch nicht VHPL (Very high density Hardware Programming Language)... FPGA schrieb im Beitrag #3414249: > ERROR:Pack:1107 - Pack was unable to combine the symbols listed below > into a single IOBM component because the site type selected is not > compatible. Funktioniert diese Beschreibung mit ausgerollter Schleife, wenn du jedem Buffer einen eigenen Namen gibst?
Kann doch nicht gehen, wenn N und P auf dem selben Pin liegen. Ist bei dir beide Male D34. Mach mal die Pin Zuweisung in PlanAhead. Bei User Constraints ist das zu finden, Package Planning oder so. Hab ISE gerade nocht zur Hand. Da kannst du dann in Drop Down Boxen alles einstellen. Normal muss man auch nur den P angeben, N passt ja dann nur einer dazu, das macht der selber. @Lothar: War das V nicht für VHSIC?
:
Bearbeitet durch User
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.