Forum: FPGA, VHDL & Co. Lattice "BB"


von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hi,

ich bin mir ziemlich sicher das es eine daemliche Frage ist... aber ich 
steh gerade ein bisschen auf dem Schlauch.

Ich versuche ein Verilog Modell von Lattice auf einen Xilinx FPGA zu 
portieren, habe aber keinerlei Erfahrung mit Lattice FPGAs. Es haengt 
blos an der Instanziierung eines "BB" Bidirectional Buffers, klingt vom 
Namen her ja nach einer Entsprechung der Xlinx IOBs. Wo kann ich 
nachlesen was das Teil genau tut?
Nach zwei Buchstaben zu googeln ist denkbar aussichtslos, "bidirectional 
buffer" ist auch fuerchterlich allgemein und in den FPGA-Handbuechern 
von Lattice hab ich auf Anhieb nichts finden koennen. Wo muss ich 
schauen?

Danke,
Sebastian

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


Angehängte Dateien:

Lesenswert?

Einen Bidirektionalen Tristate Buffer für Xilinx beschreibe ich in VHDL 
so:
1
   pins   <= dataout when dir=AUSGANG else (others=>'Z');
2
   datain <= pins;
Dann übernimmt die Synthese automatisch die Instantiierung des 
Pintreibers (IOB). In Verilog müsste das doch so ähnlich auch gehen.

Im Anhang ein Screenshot aus dem MachXO-Handbuch 
http://www.latticesemi.com/lit/docs/handbooks/HB1002.pdf

von Sebastian B. (sfreak) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Lothar,

die Beschreibung des Tristate-Puffers kann ich nachvollziehen. Ich bin 
mir aber nicht wirklich sicher ob "BB" das selbe macht... dann waere es 
ja nicht besonders sinnig die Komponente extra einzubauen wenn man das 
Verhalten so einfach beschreiben kann...

Vielleicht mag sich mal jemand die angehaengte Datei ansehen. Was tut 
diese Zeile?
1
 BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));

Sebastian

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


Lesenswert?

> BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));

Der Komponente tpio_inst werden die Signale Eingang (I), Tristate (T), 
Ausgang (O) und ein Typ (B) zugewiesen. Der Typ (PIO_IO) ist eine 
Zeichenkette, die den Portpin beschreibt (LVTTL..., Interfacespannung 
2V5, 3V3...). Die anderen 3 sind die bekannten Signale.

Im Handbook HB1001.pdf zur XP-Familie ist das noch ein wenig auscodiert.
http://www.latticesemi.com/dynamic/view_document.cfm?document_id=9418
Allerdings muß ich zugeben, dass ich auch da nichts explizit zur 
Komponente BB gefunden habe. Wenigstens aber die Anwendung.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Lothar Miller wrote:
>> BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));
>
> Der Komponente tpio_inst werden die Signale Eingang (I), Tristate (T),
> Ausgang (O) und ein Typ (B) zugewiesen. Der Typ (PIO_IO) ist eine
> Zeichenkette, die den Portpin beschreibt (LVTTL..., Interfacespannung
> 2V5, 3V3...). Die anderen 3 sind die bekannten Signale.

Also PIO_IO ist vom Typ "inout", das kann doch keine Zwichenkette sein, 
oder (zugegeben, mit meinen Verilog-Kenntnissen ists nicht soo weit her, 
aber das ist doch blos ein Bit)? Oder wie kommst du darauf?

> Im Handbook HB1001.pdf zur XP-Familie ist das noch ein wenig auscodiert.
> http://www.latticesemi.com/dynamic/view_document.cfm?document_id=9418
> Allerdings muß ich zugeben, dass ich auch da nichts explizit zur
> Komponente BB gefunden habe. Wenigstens aber die Anwendung.

PIOs sind da ausfuehrlich beschrieben, aber die Signale passen so gar 
nicht zu dem was BB hat.

Vielen Dank fuer deine Muehe, aber klar ist mir das immer noch nicht :-/
Sebastian

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


Lesenswert?

Ich kenne mich mit Verilog nun nicht soooo gut aus, ich habe deshalb vom 
VHDL-Code auf die Verilog-Beschreibung transferiert. Und im VHDL-Code 
ist das ein Attribut, das dem Synthesizer übergeben wird. Deshalb dürfte 
die Beschreibung bei Verilog auch sowas ähnliches machen (so meine 
Vermutung).

Diese Zeichenkette dürfte hier der Knackpunkt sein, der den IO-Standard 
definiert:
/*synthesis IO_TYPE="SSTL25_II"*/

Verilog:
1
:
2
inout [7:0] dq/* synthesis IO_TYPE="SSTL25_II"*/;
3
:
4
BB bidiInst0 (.I(ddrout[0]), .T(tridata[0]), .O(ddrin[0]), .B(dq[0]));
5
:

VHDL:
1
:
2
ATTRIBUTE IO_TYPE OF dq : SIGNAL IS "SSTL25_II";
3
:
4
bidiInst0 : BB PORT MAP( I => ddrout(0),T => tridata(0),O => ddrin(0),B => dq(0));
5
:


EDIT:  Weil so eine Komponenten-Instantitierung immer 
Architekturgebunden ist, vermeide ich die soweit möglich und nehme die 
generische Beschreibung wie aus meinem 1. Post. Der IO-Standard wird 
dann im (architekturabhängigen) Constraint-File angegeben.

von SuperWilly (Gast)


Lesenswert?

Spekulation:
BB = Black Box ?  In Zusammenhang mit IPExpress generierten 
IP-Core-Files ...

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Achso, nun versteh ichs...

PIO_IO ist der Ein-/Ausgangspin. Und ueber diese Attribute kriegt er 
gleich noch den IO-Standard mitgegeben, den man sonst im UCF File 
eintragen muss.

Die versuchen aber auch alles um Portabilitaet zu verhindern...

Also werd ich mal dies versuchen:
1
// BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));
2
// ersetzt durch:
3
4
assign PIO_IO   = (~PIO_TRI) ? PIO_DATA_O : 1'bz;
5
assign PIO_IO_I = ( PIO_TRI) ? PIO_IO     : 1'bz;

Schaut das grob richtig aus?

Sebastian

von SuperWilly (Gast)


Angehängte Dateien:

Lesenswert?

... aus der ispLEVER 7.1 Hilfe: siehe Anhang

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

SuperWilly wrote:
> ... aus der ispLEVER 7.1 Hilfe: siehe Anhang

Ausgezeichnet, demnach waren wir auf der richtigen Faehrte. Wenn ich mir 
die Wahrheitstabelle ansehe wuerde ich so auf den ersten Blick sagen das 
mein Code funktionieren muesste. Einwaende?

Vielen Dank fuer die guten Tipps Lothar und fuer die Loesung des 
Raetsels, SuperWilly :-)
Sebastian

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


Lesenswert?

SuperWilly wrote:
> ... aus der ispLEVER 7.1 Hilfe: siehe Anhang

Ja, nur irgendwie schade, dass sowas nicht im Datenblatt oder Usermanual 
oder in den Whitepapers auftaucht... :-(

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Lothar Miller wrote:
> SuperWilly wrote:
>> ... aus der ispLEVER 7.1 Hilfe: siehe Anhang
>
> Ja, nur irgendwie schade, dass sowas nicht im Datenblatt oder Usermanual
> oder in den Whitepapers auftaucht... :-(

Ich haette nicht gedacht das ich das mal sagen wuerde, aber das macht 
Xilinx tatsaechlich besser. Da gibts die ganze HTML-Doku durchsuchbar im 
Netz...

Sebastian

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.