- 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.
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.
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?