mikrocontroller.net

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


Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Einen Bidirektionalen Tristate Buffer für Xilinx beschreibe ich in VHDL 
so:
   pins   <= dataout when dir=AUSGANG else (others=>'Z');
   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

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:
Angehängte Dateien:
  • tpio.v (5,03 KB, 261 Downloads)

Bewertung
0 lesenswert
nicht 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?
 BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));

Sebastian

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.c...
Allerdings muß ich zugeben, dass ich auch da nichts explizit zur 
Komponente BB gefunden habe. Wenigstens aber die Anwendung.

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.c...
> 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
:
inout [7:0] dq/* synthesis IO_TYPE="SSTL25_II"*/;
:
BB bidiInst0 (.I(ddrout[0]), .T(tridata[0]), .O(ddrin[0]), .B(dq[0]));
:

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


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.

Autor: SuperWilly (Gast)
Datum:

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

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:

// BB tpio_inst(.I(PIO_DATA_O), .T(~PIO_TRI), .O(PIO_IO_I), .B(PIO_IO));
// ersetzt durch:

assign PIO_IO   = (~PIO_TRI) ? PIO_DATA_O : 1'bz;
assign PIO_IO_I = ( PIO_TRI) ? PIO_IO     : 1'bz;


Schaut das grob richtig aus?

Sebastian

Autor: SuperWilly (Gast)
Datum:
Angehängte Dateien:
  • preview image for bb.jpg
    bb.jpg
    34,7 KB, 195 Downloads

Bewertung
0 lesenswert
nicht lesenswert
... aus der ispLEVER 7.1 Hilfe: siehe Anhang

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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... :-(

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.