FPGA mit VHDL
Unterschiede zwischen ALTERA und XILINX
Natürlich gibt es grosse Unterschiede zwischen diesen beiden Herstellern.
Was ich aber in diesem Artikel beschreiben möchte ist, worauf man im Speziellen achten muss, wenn man ein System von einem Hersteller auf den anderen überträgt.
Oft sind es die simpelsten Sachen, die unterschiedlich umgesetzt werden.
Unterschiedliche Ansteuerung der IO-Buffer
ALTERA mach das grundsätzlich anders als es XILINX macht.
Funktional unterscheiden sie sich dadurch, dass ALTERA mit OE den echten Output-Enable meint.
Also, wenn oe=1 ist, ist der Output freigeschaltet. XILINX meint das irgendwie anders und nennt es T. Soll wohl sowas wie Tri-State-Output sein.
Wenn aber hierbei T = 1 ist, ist der Treiber auf Input geschaltet.
Eine weitere grundsätzliche Fehlerquelle bei beiden Herstellern ist die Portbenennung:
i meint den Inputport des Ausgangstreibers, also musst daran das Outputsignal angeschlossen werden.
Anders herum meint o, den Outputport des Eingangstreibers, also das Inputsignal.
Verwirrend, ich weiss. Hier mal zwei Codebeispiele:
ALTERA IO-Buffer
IOBUF_Bit3 : ALT_IOBUF
generic map (
IO_STANDARD => "Differential 1.2-V HSTL Class I",
CURRENT_STRENGTH_NEW => "4mA",
ENABLE_BUS_HOLD => "none",
WEAK_PULL_UP_RESISTOR => "off",
LOCATION => "IOBANK_3C"
)
port map (
i => DatenOut(3),
oe => T,
o => DatenIn(3),
io => Daten(3)
);
XILINX IO-Buffer
IOBUF_Bit6 : IOBUF
generic map (
DRIVE => 12,
IBUF_DELAY_VALUE => "0",
IFD_DELAY_VALUE => "AUTO",
IOSTANDARD => "DEFAULT",
SLEW => "FAST")
port map (
O => XDIn(6), -- Buffer output
IO => XD(6), -- Buffer inout port
I => XDOut(6), -- Buffer input
T => T -- 3-state enable input,1=input,0=output
);