Hallo
Bin gerade daran eine serielle simplex Verbindung in einem FPGA zu
realisieren. Durch verschiedene enge Anforderungen (vor allem Latenz)
und andere Gründe darf ich das Rad "neu erfinden" und kann keine IP
Cores etc. nehmen.
Für die Leitungscodierung möchte ich den vielfach verwendeten 8b/10b
Code einsetzen. Dazu habe ich auch das original Patent von IBM
durchgelesen. Alles ist da drin schön detailliert beschrieben inkl.
Schemas für eine Implementation ohne Tabellen.
Nun mein Problem: Was ist ein "OR DOT" Gatter?
Angehängt ist ein Ausschnitt aus dem Patent mit einem Schemateil der
mein Problem verdeutlicht.
Gatter "E" bezeichnet ein Exclusive-Or Gatter (Abschnitt 12, Zeile 65).
Quelle:
U.S. Patent 4,486,739 Veröffentlicht am 4. Dezember 1984
http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=4,486,739.PN.&OS=PN/4,486,739&RS=PN/4,486,739
Im Patent ist zwar erwähnt nach welchen Regeln sie sich gehalten haben
für die Schemas. Leider kann ich diese referenzierten Dokumente nicht
finden, darum hoffe ich hier eine Antwort auf dieses Rätsel zu finden.
@ Christoph (Gast)
>Bin gerade daran eine serielle simplex Verbindung in einem FPGA zu>realisieren. Durch verschiedene enge Anforderungen (vor allem Latenz)>und andere Gründe darf ich das Rad "neu erfinden" und kann keine IP>Cores etc. nehmen.
Wirklich?
>durchgelesen. Alles ist da drin schön detailliert beschrieben inkl.>Schemas für eine Implementation ohne Tabellen.
Was glaubst du dadurch zu gewinnen? Einen 8B10B Encoder packt man
einfach als Tabelle in einem BRAM und fertig. Latenz 1 Takt. Wenn es
rein kombinatorisch sein soll halt als Tabelle in Logik, wobei dabei
dann die maximale Taktfrequenz leiden wird.
>Nun mein Problem: Was ist ein "OR DOT" Gatter?
Möglicherweise ein NOR.
>U.S. Patent 4,486,739 Veröffentlicht am 4. Dezember 1984
Von Standardsymbolen haben die Amis wohl auch noch niox gehört? Passt
aber gut zu deinem Thema, das Rad neu zu erfinden.
Falk Brunner schrieb:> Möglicherweise ein NOR.
Dann würde ich nicht fragen :-)
Ich zweifle ja durchaus an meiner eigenen Frage, da ich davon
ausgegangen bin, dass in meiner Ausbildung die Boolsche Logik
vollständig behandelt wurde...
Im Schemaausschnitt sieht man ein NOR gleich rechts vom fraglichen "OR
DOT"
J. schrieb:> http://www.rz.e-technik.fh-kiel.de/~dispert/digita...>> Punkt 9.2.5.1>> Hilft das weiter?
"9.2.5.1 Open-Collector-Verknüpfungen
Das oben beschriebene Problem kann durch Verwendung von TTL-Schaltungen
mit Open-Collector-Ausgängen (Abb. 9.13) vermieden werden. Die
Gatterausgänge werden in diesem Fall nicht über Transistoren mit der
positiven Versorgungsspannung verbunden sondern über den gemeinsamen
Pull-Up-Widerstand Rpu
[...]
Gemäß dieser "0"-Dominanz wird am Ausgang y durch die vorgenommene
externe Verdrahtung eine logische Verknüpfung erzeugt, eine sogenannte
"Phantomverknüpfung".
Dieses Verbindungsprinzip wird als Wired-Dot-Logik bezeichnet."
Ja, das hilft.
Kannte diese Bezeichnung noch nicht. Ich war sehr verwirrt, weil im
Patent "wild" OR und Wired-OR Verknüpfungen gemischt werden (z. B.
Figure 12), was ja für eine reine Funktionsbeschreibung in einem Patent
eigentlich gar nicht nötig ist.
Gemäss Figure 3 aus dem Patent kann das ganze wirklich nur ein OR Gatter
sein.
Danke für die schnellen Antworten!
Christoph schrieb:> Alles ist da drin schön detailliert beschrieben inkl.> Schemas für eine Implementation ohne Tabellen.
Ich kann ich Falk im Prinzip anschließen, selbst wenn man das nicht in
einem RAM haben möchte. Vor etwas über zehn Jahren habe ich im
Zusammenhang mit einem 10G PCS einen 8b/10b Codec implementiert (ASIC).
Die Tabellen habe ich der Literatur entnommen, per copy&paste sowie
Rechteck-Funktionen im Emacs in eine recht lange case-Anweisung
umgewandelt und synthetisiert. Fertig. War im Timing der
handgeschriebenen Netzliste, die in der Firma von Generation zu
Generation ehrfürchtig weitergegeben wurde, absolut ebenbürtig.
>Durch verschiedene enge Anforderungen (vor allem Latenz)>und andere Gründe darf ich das Rad "neu erfinden" und kann keine IP>Cores etc. nehmen.
Nenn doch einfach mal diese "engen" Anforderungen.
VG, SuperWilly
Das findet ihr wieder spannend. Kann ich ja verstehen :-)
Es sollen Sollwerte (8x16 bit) an verteilte Regler in
parallelgeschalteten Leistungsmodulen übertragen werden (Grössenordnung
6-8 Schaltschränke)
Zeit zwischen der Signalerfassung am analogen Eingang bis der DSP am
entfernten Ende sie zur Verfügung hat ist weniger als 25 us. Für mich
und mein Übertragungssystem bleibt davon etwa 12 us übrig (Rest für
AD-Wandlung, DMA, Übergeordneter-Regler berechnen). Zukünftige Werte
vorberechnen und in grösseren Blöcken schicken ist innerhalb eines
Closed-Loop Reglers nicht möglich.
Netterweise soll das ganze einfach skalierbar sein, also wenn es geht
Geräte verketten. Sonst hätte ich ein System mit einem zusätzlichen
aktiven Sternverteiler in der Mitte gebaut, was vieles einfacher gemacht
hätte.
Wie geschrieben, mein System ist nur Simplex, nur für die
Reglersollwerte.
Alles andere geht über ein paralles echtzeit Ethernet System (Brav nach
Standard, nix selber erfunden). Das wird dann schätzungsweise eine
Zykluszeit von 150 us haben.
Ist auf alle Fälle spannende Arbeit!
@ Christoph (Gast)
>und mein Übertragungssystem bleibt davon etwa 12 us übrig (Rest für
Und da ist nicht EIN Takt für einen 8B10B Dekoder in einer Tabelle/ROM
übrig? Kaum zu glauben . . .
Kaum zu glauben, dass meine Block-RAMs schon was anderes zu tun haben...
Habe auch noch eine Application Note gefunden für eine pipelined
Implementation die kleine Tabellen mit Kombinatorik kombiniert. Scheint
mir für FPGAs eine gut geeignete Struktur zu sein. Die benötigt dann 3
Takte.
Bin gerade daran diese "ab zu tippen".
Bei der ursprünglichen Frage ging es mir darum, die Funktionalität im
Patent sicher zu verstehen, da das Patent im Zweifelsfall ja die
Referenz darstellt.
Es gibt von Lattice und Xilinx frei verfügbare Referenzdesigns für
8b10b,
kein Hexenwerk. Also einfach mal runterladen, simulieren und fertig ist
die Soße.
Danke für den Hinweis.
Bei Lattice ist es das RD1012, hatte ich auch schon ausprobiert. Wird
als Black-Box Design geliefert, ich kann das Ding also nur mit einer
Timingsimulation simulieren, was mich etwas nervt.
Hatte mir einen Weg überlegt um für das Gesamtdesign darum herum zu
kommen: In einem Dummy-Projekt nur das Refenzdesign implementieren und
das resultierende Timing Modell dann in meiner Verhaltenssimulation per
VHDL Configuration auszuwählen.
Habe das dann aber gelassen, da ich einen Encoder/Decoder brauche der
einen Enable Eingang besitzt (damit ich nicht mit vielen Clock-Domains
arbeiten muss, was ja sowieso nicht sauber wäre), was ich der Black-Box
nicht beibringen kann.
Meine Idee im Moment ist, dass ich das Projekt von Opencores nehme als
Modell für meine Testbench (Also meine Implementation gegen die von
Opencores testen), damit ich eine vielleicht fehlerfreie
"Golden-Reference" habe um so effizient meine eigenen Fehler zu finden.