Aufmacher 

PCI-Recorder

Audio-Schnittstellenkarte für den PCI-Bus, Teil 1

Martin Kirst, Uwe Kirst


| Hauptseite | Artikel | Take six?|

Auswahl der Bausteine
Software
Das Schaltungskonzept
Die Details der PCI-Bus-Bridge
Übertragung von Nutzdaten
Die Schaltungsbeschreibung
Daten- und Adreßpfade

D ie Vorstellung dieses neuen Projekts ist aber nicht nur aufgrund der besonderen Features interessant (Aufnahme und Wiedergabe gleichzeitig, Mehrspur-Option, 24 Bit breite Auflösung), sondern soll auch einen Weg auf zeigen, wie ein PCI-Bus-Adapter konstruiert werden kann. Das hier eingesetzte Know-how und die während der Entwicklung gesammelten Erfahrungen können Entwicklern anderer PCI-Lokal-Bus-Bridges (PLBB) eine Hilfe sein.

Der PCI-Bus wird im allgemeinen als besonders kostengünstige Lösung angepriesen. Für den Entwickler selbst sieht die Situation erst einmal etwas anders aus. Es müssen nicht unerhebliche Startschwierigkeiten überwunden werden.

Die strengen Timing-Spezifikationen erfordern besondere Sorgfalt beim Schaltungsdesign. SMD-Gehäuse, typischerweise PQFP, sind vorgeschrieben, da PGA-Gehäuse zu hohe Leitungskapazitäten besitzen. Vorgaben, die der Entwickler unbedingt einhalten muß, sind beispielsweise, daß die minimale 'Input Setup Time' relativ zum Takt nur 7 ns betragen darf und daß alle von einem PCI-Agenten getriebenen Signale spätestens 11 ns nach der steigenden Taktflanke (CLK to Signal Valid Delay) auf dem Bus stabil anstehen. Die maximale Taktverzerrung zwischen zwei beliebigen Buskomponenten darf 2 ns nicht überschreiten.
 

Bild 1. Das Handmuster der Schnittstellenkarte. Im Gegensatz zur alten "Take Five" eine geradezu "flockige" Bestückung.

Da jeder Agent das Taktsignal nur einmal kontaktieren und dabei mit maximal 10 pF kapazitiv belasten darf, muß ein Takttreiber her. Eine Abkopplung vom PCI-Taktsignal kann aber nicht durch einfache Takttreiber erfolgen, da diese Treiber bereits eine Durchlaufverzögerung besitzen, die den erlaubten 'Skew' überschreitet. Es gibt zwar einige handelsübliche PLL-Schaltkreise, die in der Lage sind, das unverzögerte Taktsignal mit geringer 'Input to Output Skew' zu rekonstruieren (z. B. Cypress CY7B9910), die verteilte Realisierung der PLBB unter Verwendung mehrerer Bausteine ist jedoch insgesamt aufwendiger, fehleranfälliger und treibt die Kosten unnötig in die Höhe. Da sich die Komplexität unseres Designs in Grenzen hält, reichen bereits FPGAs mittlerer Größe (ca. 5000 bis 6000 Gatter) aus, um alles in einem Baustein unterzubringen. Die Timing-Vorgaben sind leichter einzuhalten, da lange Chip-zu-Chip-Verbindungen gar nicht erst auftreten können.

Eine Aufteilung in verschiedene ICs verschlingt außerdem viele I/O-Pins und schafft ein großes Verbindungsnetzwerk, das der Entwickler auf der Platine unterbringen muß. Außerdem verliert man an Flexibilität, da davon ausgegangen werden kann, daß nachträgliche Schaltungsänderungen neue Chip-zu-Chip-Verbindungen erfordern.
 

Bild 2. Die drei Funktionsblöcke der Karte PLBB, SRAMs und Audiologik sind über einen internen lokalen 32-Bit-Bus verbunden.

Um dieser Art von Schwierigkeiten grundsätzlich aus dem Weg zu gehen, setzten wir nur ein einziges IC ein.

Auswahl der Bausteine

Für die Implementierung eines PCI-Bus-Interfaces kommen CPLDs, FPGAs oder ASICs in Frage. Der Einstieg in die ASIC-Technologie birgt ein hohes Risiko und kam für uns allein schon wegen der damit verbundenen hohen NRE-Kosten (Non Returning Engineering) nicht in Frage. ASICs amortisieren sich erst bei hohen Stückzahlen, die wir mit diesem Projekt voraussichtlich nicht erreichen werden.

CPLDs besitzen den Vorteil niedriger Laufzeiten, die zudem noch genau vorhergesagt werden können. Außerdem fallen auch keine Plazierungs- und Routingprobleme an. Die meisten CPLDs sind aber allein wegen ihrer beschränkten Größe nicht für unser Projekt verwendbar. Der größte verfügbare Xilinx-Baustein, das XC73144 CPLD mit 144 Makrozellen, reicht nicht aus, um die ganze Schaltung aufzunehmen.

Die Berücksichtigung der bisher diskutierten Gesichtspunkte legt nahe, die PLBB unter Verwendung von FPGAs zu realisieren.

Wir haben PCI-kompatible FPGAs von Cypress (Quick Logic), Altera, Actel und Xilinx auf Eignung für das Projekt untersucht.

Alle Hersteller haben Produkte in ihrem Programm, die die Spezifikationen in bezug auf die Treiberleistung und die Timing-Vorgaben erfüllen. Da die nicht-terminierte Übertragungsleitung das Grundprinzip des Busses darstellt, müssen die Bausteine zudem besonders strengen Anforderungen beim Überspannungsschutz genügen. Die meisten Antifuse-basierten Bauteile sind zwar den SRAM-FPGAs in der Performance überlegen, lassen sich jedoch nur einmal programmieren.

Die FPGAs von Altera und Xilinx basieren auf SRAM-Zellen und sind daher in-circuit-rekonfigurierbar (ICR). Besonders in der Entwicklungsphase ist diese Eigenschaft sehr nützlich, da Fehler im Design schnell behoben werden können. Aber auch später kann es wichtig sein, den Baustein neu zu konfigurieren. Inkompatibilitäten mit bestimmten PC-Boards lassen sich so schnell beheben, und es können kleine Erweiterungen nachträglich hinzugefügt werden.

Bei FPGAs muß berücksichtigt werden, daß das Timing von der Plazierung der Logikblöcke und deren Verdrahtung innerhalb des Bausteins abhängt und meist nicht vorhergesagt werden kann. Die Xilinx-FPGAs der XC3000er und XC4000er Serie besitzen den Vorteil, daß ihre konfigurierbaren Logikblöcke (CLBs), die durch verschiedene Arten von Routingressourcen verbunden werden können, von programmierbaren Ein-/Ausgabeblöcken mit intergrierten Registern umgeben sind. Bei Verwendung der Flip-Flops in den I/O-Blöcken (IOBs) lassen sich die Forderung der 'Input Setup Time' und der 'Clock to Output'-Verzögerung unabhängig vom Routing einhalten.

Die Altera Flex 8000 Familie besitzt zwar ebenfalls I/O-Blöcke, diese beinhalten jedoch nur ein einziges Flip-Flop, so daß keine I/O-Flip-Flops für beide Datenrichtungen zur Verfügung stehen. Nachdem ein erster Prototyp, der mit einem FPGA 4008E des Marktführers Xilinx bestückt worden war, einwandfrei funktionierte, gab es kurzzeitig Überlegungen, auf Actel mit Antifuse-basierter Technologie umzusteigen. Actel-Bauteile besitzen ebenfalls zwei I/O-Flip-Flops pro PAD. Wir haben die Idee jedoch schnell wieder fallengelassen, da die PCI-kompatible Actel-Logik zwar angekündigt, aber noch nicht lieferbar war. Ein Preisvergleich ergab zudem, daß Actel keinen nennenswerten Kostenvorteil bietet. Daher sehen wir auch keinen Anlaß, die große Flexibilität der Xilinx-FPGAs aufzugeben. Die hohe Geschwindigkeit der XC4000E-Produkte machen es zudem möglich, eine voll PCI-kompatible Lösung in einem Chip unterzubringen. Die strengen Timing-Vorgaben erfordern in einigen Fällen eine manuelle Plazierung, die ohne das Wissen über die interne Struktur des FPGA nicht möglich ist.

Die modular aufgebauten Logikblöcke der XC4000E-Familie bestehen aus zwei unabhängigen programmierbaren Funktionsgeneratoren F und G mit je vier Eingängen und einem H-Funktionsgenerator mit drei Eingängen, der auch die Ausgänge von F und G verschalten darf. Die Funktionsgeneratoren bestehen aus Lookup Tables. Die vier beziehungsweise drei kombinatorischen Eingänge adressieren die Tables, die jeder ein 1-Bit-Ergebnis zurückliefern. Die kombinatorischen Ausgänge der CLBs können mit dem Verbindungsnetzwerk verknüpft oder in zwei Flip-Flops der CLB eingespeist werden.

Die XC4000E LCAs (Logic Cell Arrays) besitzen noch weitere Goodies:

Für das Design besonders nützlich ist es, daß die I/O-Blöcke zwei Flip-Flops mit einer Takt-Freigabeleitung besitzen. Dieser kommt eine besondere Aufgabe zu: Während eines PCI-Lesetransfers kann der Master erzwingen, daß Wartezyklen eingelegt werden. Damit in diesem Fall die Pipline nicht ins Stocken gerät, ist es erforderlich, daß die Daten der Output-Register ihren Inhalt für die Dauer des Wartezustandes behalten und nicht heraustakten. Die Takt-Freigabeleitung erlaubt Piplining ohne Performance-Einbußen.

Eine CLB kann in einem speziellen Modus als 16¥2-Bit-RAM oder als 16¥1-Bit-Dual-Port-RAM konfiguriert werden. Die RAM-Option wird in unserem Design nicht verwendet, ist aber bei Busmaster-Anwendungen für die Implementierung von Burst-FIFOs interessant (Xilinxs Application Note).

Software

Das Design der PLBB lehnt sich an eine Application Note von Xilinx ('Full compliant PCI Interface in XC3164A-2') an. Wir verwenden, anders als dort beschrieben, einen Baustein der 4000E-Serie und nahmen die Kodierung der Schaltung in VHDL statt Verilog vor. Die Application Note behandelt eine Anbindung von SRAM-Speicher an den PCI-Bus. Gegenüber der ursprünglichen Verilog-Beschreibung haben wir einige wesentliche Verbesserungen in der PCI-Bus-Bridge vorgenommen, ohne die die Schaltung nicht lauffähig wäre. Unter anderem reagierte das DEVSEL-Signal in der Beispielapplikation langsamer als erlaubt (subslow), und es gab einige Ungereimtheiten bei der Erzeugung des Stopp-Signals.

Für die Synthese der Schaltung stand uns die auf PCs unter Windows 95/ NT 4.0 lauffähige Software FPGA-Express von Synopsys - Marktführer auf dem Gebiet der Logiksynthese - zur Verfügung. Die Firma Synopsys, die für ihre Chip-Entwurfstools auf Workstation-Basis bekannt ist, engagiert sich neuerdings auch im PC-Bereich. Der FPGA-Express benutzt die gleiche Compiler-Technologie wie die Synopsys Workstation-Programme 'Design Compiler' und 'FPGA Compiler', ist aber von Grund auf neu entwickelt worden. Der FPGA Express glänzt durch die optimale Nutzung aller Features der Xilinx-Bausteine. Besonders hilfreich für unser Design erwies sich, daß die Takt-Freigabeleitung der I/O-Flip-Flops unterstützt wird.

Zum Routen und zum Überprüfen des Timings kam die Entwicklungsumgebung Xilinx Foundation Series in der Ausführung Standard VHDL zum Einsatz.

Das Schaltungskonzept

Der PCI-Bus (Peripheral Component Interconnect) ist sowohl bei Intel-PCs als auch bei Apple-Rechnern und Unix-Workstations zu finden und setzt sich in jüngster Zeit immer mehr durch. Bisher gibt es zwar nur wenige Audiokarten mit PCI-Bus-Anschluß, weil die meisten Hersteller aus Kompatibilitätsgründen nicht auf feste IRQ-Zuordnung oder den DMA-Transfer, den der Soundblaster-Standard vorsieht, verzichten wollen. Unsere Neuentwicklung zielt jedoch eher auf den professionellen Anwender ab. Daher bereitet es keine Schwierigkeiten, von ISA auf PCI-Bus zu wechseln.

Der PCI-Bus ist eine 32 Bit (zukünftig auch 64 Bit) breite Schnittstelle mit gemultiplexten Adreß- und Datenleitungen, der mit 33 MHz getaktet ist. Ein besonderer Vorteil des PCI-Bus ist die hohe Bandbreite, theoretisch können 132 MBytes/s übertragen werden. Jedes Gerät, das mit dem Bus verbunden ist, agiert entweder als 'Target' oder besitzt die Funktionalität von 'Initiator' und 'Target'. Der 'Initiator' kann die Kontrolle über den Bus übernehmen und Adreß-, Daten- und Steuerleitungen betätigen (Busmaster). Das Gerät mit 'Target'-Funktion kann nur auf Datenanforderungen des 'Initiators' reagieren.

Die hier vorgestellte Audiokarte arbeitet nur in der 'Target'-Betriebsart, obwohl auf der Platine auch die für den 'Initiator' benötigten Steuerleitungen zum FPGA geführt werden, um sich für zukünftige Weiterentwicklungen die Busmaster- Option offen zu halten. Für eine PCI-Audiokarte kommen verschiedene Konzepte der Realisierung in Frage; eine Möglichkeit ist der Busmaster-Betrieb. Bei diesem Ansatz sollte besonderes Augenmerk auf die Buslatenz gelegt werden. Als 'Initiator' müßte die PLBB sicherstellen, daß Audiodaten für 30 µs ('access latency') zwischengespeichert werden können. Im worst case kann der Bus für diese Zeit von anderen Geräten blockiert werden. Die typische Latenzzeit beträgt meist nur 2 µs, kann aber in einigen Fällen nur schwer vorhergesehen werden. Insbesondere bei einer PCI-zu-ISA-Bridge wird die Latenzzeit nicht durch diese, sondern durch den nachfolgenden ISA-Adapter bestimmt.

Da innerhalb von 30 µs mehrere Abtastwerte liegen, muß ein FIFO zur Zwischenspeicherung vorgesehen werden. Dieser Speicher ließe sich zwar noch im FPGA unterbringen, erhöht aber den Entwicklungsaufwand der Schaltung beträchtlich. Eine Variante dieses Konzepts ist der Busmaster-Betrieb mit blockweiser Datenübertragung. Um das Problem mit der Buslatenz zu umgehen, könnte man einen größeren Speicher, beispielsweise mit Hilfe von externen SRAMs, vorsehen.

Unsere Schaltung ist jedoch nur als PCI-Target konzipiert. Der Verzicht auf Busmaster-Betrieb vereinfacht die Schaltung wesentlich und sollte auch zu keinen nennenswerten Geschwindigkeitseinbußen führen, da der Datentransfer im Burst-Modus vergleichsweise schnell abgewickelt wird. Auf spezielle FIFO-Bausteine als Zwischenspeicher wollten wir aus Kostengründen verzichten. Auf der Karte setzen wir statt dessen billige SRAMs ein. Der Speicher, der sich auf der Karte befindet, wird in den Adreßbereich des Rechners eingeblendet.

Die Details der PCI-Bus-Bridge

Die Datenübertragung auf dem PCI-Bus geschieht meist in sogenannten Bursts. Burst-Zugriffe sind sowohl im I/O-Bereich als auch auf den Speicher vorgesehen. Die hier vorgestellte Audiokarte benötigt jedoch keine I/O-Adressen. Die Beendigung der Datenübertragung auf dem PCI-Bus kann sowohl vom Master als auch vom Target eingeleitet werden. Dieser kann den Datentransfer stoppen, indem er das Stopp-Signal auf Low-Pegel treibt. Für den Abbruch der Transferoperation kann es mehrere Gründe geben: In unserer PCI-Audiokarte haben wir das STOP-Signal eingespart, um die PCI-Ablaufsteuerung möglichst einfach zu halten. Dieser Ansatz gewährleistet höchsten Datendurchsatz, da Burst-Zugriffe auf die Schaltung nie vom Target abgebrochen werden, erfordert aber andererseits einen schnellen ladbaren Burst-Zähler, der den gesamten Speicher auf der Karte adressieren kann. Ein komplexer Adreßzähler ist aber auch schon für den Audioteil notwendig, um fortlaufend Daten aus dem SRAM über den Digitalausgang auszugeben oder über den Digitaleingang ins SRAM zu transferieren. Dieser Zähler übernimmt gleichzeitig die Funktion des Burst-Zählers.

Ein PCI-Target zeigt durch Erzeugen des DEVSEL-Signals an, daß es einen Zugriff auf eine Adresse registriert hat, die sich in dem ihm durch das Basisadreßregister zugewiesenen Adreßbereich befindet. Das DEVSEL-Signal kann nach einem (fast), zwei (medium) oder drei (slow) Taktzyklen nach der Adreßphase von High auf Low wechseln. Unsere Karte arbeitet in der Slow- Betriebsart, weil die Timing-Vorgaben des verwendeten FPGAs keine schnellere Dekodierung erlauben.

Übertragung von Nutzdaten

Daten werden übertragen, falls zu einem Zeitpunkt einer steigenden Taktflanke IRDY und TRDY auf Low-Pegel liegen (Signale sind low-aktiv). Target oder Master können auch Wartezyklen einlegen, indem sie TRDY oder IRDY zurücknehmen.

Um die PCI-Ablaufsteuerung zu vereinfachen, wird auf die Erzeugung von Wartezyklen während eines Burst durch die Audiokarte verzichtet. Initiator-Wartezyklen können selbstverständlich abgearbeitet werden.

Die maximale Transferrate von 132 MBytes/s ergibt sich aus der Überlegung, daß maximal während eines Burst-Zugriffes alle 30 ns ein 32-Bit-Wort übertragen wird. Die geplante Erweiterung auf 64 Bit und 66 MHz PCI-Takt, die in der Version 2.1 der PCI-Spezifikation bereits beschrieben sind, erhöht die Transferrate noch einmal.

Die maximal mögliche Spitzenbandbreite wird von vielen Anbietern werbewirksam angepriesen, ist aber mit Vorsicht zu genießen. Die effektive Bandbreite beispielsweise bei Festplattenkontrollern oder Netzwerkkarten liegt meist deutlich unter diesen Werten. Bei Performance-Überlegungen spielen auch andere Einflüsse wie die Güte der PCI-Host-Bridge oder das Host-Memory-Subsystem eine Rolle. Unsere Karte erreicht eine durchschnittliche REP-STOSD-Transferrate von 87 MByte/s (Intel HX Board mit Pentium-100-MHz-Prozessor) und ist damit in dieser Disziplin schneller als jede bisher in ELRADs Schwesterzeitschrift c't getestete PCI-Karte. Die guten Werte führen wir auf den unbeschränkten linearen Burst zurück. Daß der erste Zugriff nur verhältnismäßig langsam ausdekodiert wird, spielt in diesem Fall keine Rolle. Der STOSD-Befehl wird nur zum Löschen des Speichers auf der Karte verwendet. Beim Kopieren (Speicher zu PCI, REP MOVSD) ergaben erste Messungen eine immer noch gute Datenrate von 52 MByte/s.

Die Schaltungsbeschreibung

Die Schaltung läßt sich gut in drei Funktionsblöcke unterteilen: die PCI-Lokal-Bus-Bridge (PLBB), die SRAMs und die Audiologik (Bild 2). PLBB, SRAMs und Audioschaltung sind über einen internen lokalen 32-Bit-Bus verbunden. Die PLBB blendet den Speicher transparent im Adreßbereich des Rechners ein. Ein Arbiter stellt die faire Zuteilung des lokalen Busses unter Audio- und PCI-Teil sicher. Die Audiokomponente enthält Schieberegister zur Seriell-Parallel- und zur Parallel-Seriell- Wandlung und einen Audioausgang inklusive Schaltungen zur Biphasenkodierung, Paritätsberechnung und Erzeugung der Präambel und den Kanalstatusdaten. Extern untergebracht wurden die SRAMs für die Zwischenspeicherung der Audiodaten und eine Empfängerschaltung für digitale Audiodaten (Crystal CS8412) (Bild 3). Auf den Crystal-Chip wollten wir nicht verzichten, da er eine analoge PLL-Synchronisationsschaltung enthält, die nicht einfach rein digital realisiert werden kann.
 

Bild 2. Die drei Funktionsblöcke der Karte PLBB, SRAMs und Audiologik sind über einen internen lokalen 32-Bit-Bus verbunden.

 

Bild 3. Im FPGA wurde die PLBB und der Audiosender untergebracht. Extern verblieben SRAMs und Audioempfänger.

Die PCI-Audiokarte wurde mit Hilfe der Hardwarebeschreibungssprache VHDL entwickelt, diese ermöglicht Struktur- und Verhaltensbeschreibung. Anfangs möchten wir einen kurzen Überblick über die Struktur der Schaltung geben und dann in einigen uns wichtig erscheinenden Fällen im einzelnen auf die genaue Verhaltensbeschreibung eingehen. Das Abdrucken der VHDL- Listings würde den Rahmen des Artikels sprengen.

Das Design ist nicht streng hierachisch aufgebaut, das heißt, auch die oberste Komponente der Strukturbeschreibung enthält teilweise Fragmente, die in Verhaltensbeschreibung formuliert sind. Für komplexe Schaltungsdesigns sind effiziente Testmethoden erforderlich. Daher existiert zum Simulieren der Schaltung eine ganz einfache Testbench (test_pci_top in Bild 4). Die Testbench ermöglicht das Erzeugen von simulierten Schreib- und Lesezugriffen auf dem PCI-Bus und erzeugt zu Simulationszwecken einen seriellen Datenstrom, wie ihn der Crystal-Empfänger bereitstellen würde.
 

Bild 4. Die Testbench 'test_pci_top' verdrahtet 'pci_top'- und SRAM-Komponente.

Die Testbench 'test_pci_top' steht in der Hierarchie ganz oben, da in ihr die Komponenten der SRAMs und die Komponente pci_top, die die eigentliche Schaltung enthält, miteinander verdrahtet sind. Die SRAM-Komponenten wurden zu Simulationszwecken eingeführt und werden später nicht mit synthetisiert. Nur die Komponente 'pci_top' enthält ausschließlich synthetisierbaren Code. Das Ergebnis der Synthese wird in das FPGA programmiert.

Die Testbench simuliert einen PCI-Master, indem sie die Leitungen des PCI-Bus ansteuert und die Reaktion des Target analysiert. Die einzelnen Phasen der Datenübertragung, die der Master einleiten soll, werden in einer Textdatei vorgegeben. Die Software FPGA-Express von Synopsys ist ein reines Syntheseprogramm und beinhaltet keinen VHDL-Simulator. Aus diesem Grund muß zum Ausführen der Testbench auf andere Produkte zurückgegriffen werden (z. B. Synopsys VHDL System Simulator). Die Xilinx-Foundation-Standard-Systemsoftware beinhaltet keinen vollwertigen VHDL-Simulator, erlaubt es jedoch, mit wenigen Mausklicken Testsignale zu erzeugen und diese auf die Schaltung loszulassen. Die Ergebnisse werden in grafischer Form aufbereitet und angezeigt. Erste Tests sind daher einfach und komfortabel möglich; ein automatisches Reagieren auf Signale des zu testenden Designs kann jedoch nicht erfolgen.

Daten- und Adreßpfade

Die Komponente 'pci_top' enthält alle Daten- und Adreßpfade und verdrahtet weitere Unterkomponenten (arbiter, pipecon, audio, prescaler, critpath, parity, cfgblock, in Bild 5). Zum grundsätzlichen Verständnis der Audiokarte betrachtet man am besten ein Diagramm, in dem alle Daten- und Adreßpfade eingezeichnet sind (Bild 6). Um die Übersicht zu wahren, haben wir die Steuersignale und die PCI-Ablaufsteuerung nicht ins gleiche Diagramm eingezeichnet. Die Unterkomponenten 'cfgblock' und 'audio' sind in dieser Darstellung durch Kästen markiert.
 

Bild 5. Der synthetisierbare Quellcode: die Komponente 'pci_top' und deren Unterkomponenten.

 

Bild 6. Die Daten- und Adreßpfade.

Zwei 32 Bit breite Datenpfade verbinden den PCI-Bus und die Datenleitungen der SRAMs miteinander. Der eine Pfad ist für Hin-, der andere für Rückfluß verantwortlich. Auf dem Weg vom PCI-Bus zu den SRAMs passieren die Daten zwei Registerstufen, die in den I/O-Zellen des FPGA untergebracht sind, und jeweils einen Multiplexer pro Richtung. Daten könne daher schnellstens in drei PCI-Taktzyklen vom PCI-Bus zum SRAM gelangen. Die Datenpipeline, die durch die I/O-Flip-Flops an beiden Ports des Chips gebildet wird, macht die Timing-Anforderungen an die Datenpfade unkritisch.

Zwei Quellen können das SRAM mit Daten beliefern: der PCI-Bus und das Audio-Schieberegister; ein Multiplexer nimmt die Umschaltung vor. Bei PCI-Lesezugriffen steuert ein zweiter Multiplexer, ob zwischengespeicherte Audiodaten vom SRAM oder Konfigurationsdaten zurückgegeben werden. Das intern erzeugte Request-Signal PCI_REQ in der 'pci_top'-Komponente zeigt einen PCI-Zugriff auf den Speicher beziehungsweise den Konfigurationsbereich an. In der Adreßphase müssen folgende Bedingungen zur Erzeugung des Signals erfüllt sein:

Ein weiterer Aspekt der Implementierung ist die Adressierung der SRAMs, die im oberen Teil von Bild 5 dargestellt ist. Der SRAM-Speicher ist, von der Audiologik aus gesehen, als Ringbuffer organisiert und wird kontinuierlich mit hereinkommenden Daten gefüllt und gleichzeitig um die Ausgabedaten erleichtert. Der in Bild 5 oben wiedergegebene Schaltungsteil zeigt sich sowohl für die Inkrementierung des Audiozählers als auch für das Hochzählen der PCI-Adresse während eines Burst-Zugriffes verantwortlich. Eine während der Adreßphase eingespeiste PCI-Adresse gelangt über das Register ADDR_REG und die I/O-Flip- Flops zu den Adreßleitungen SR_ADDR der SRAMs. Das I/O-Register wird intern in einem weiteren Register gespiegelt, um Timing- Probleme zu umgehen. Der Burst-Zähler muß mit 33 MHz hochzählen können. Die kurze Takt- zu Ausgangsverzögerung der I/O- Register wird benötigt, um die Zugriffszeit der SRAMs zu maximieren. Würde man die SRAM-Ausgänge zurückführen, würde die Verzögerung in der Schleife, in der der Inkrementierer untergebracht ist, die Zykluszeit des Taktes übersteigen. Bei ausschließlicher Verwendung von internen Registern leidet hingegen die 'Clock to Pad'-Verzögerung, es müßten noch schnellere SRAMs zum Einsatz kommen. Die Kodierung des Zählers als Multiplexer-Flip-Flop-Struktur erlaubt die Einhaltung beider Forderungen. Die Ausgänge des Multiplexers treiben sowohl die internen CLB-Flip-Flops als auch die Register in den I/O- Zellen.

Der gleiche Inkrementierer wird auch zur Erhöhung der Audioadresse herangezogen. Da die Audioadresse nur alle 1/44100 s erhöht werden muß, ist das Timing wesentlich entspannter. Es ist eine zusätzliche äußere Schleife mit Register und Multiplexer vorgesehen. Dieser Multiplexer wurde mit Absicht noch vor den Burst-Multiplexer in den Adreßpfad eingefügt, um die Schleifenverzögerung des Burst-Zählers nicht weiter zu vergrößern.

Zur Erhöhung der Audioadresse sind zwei Taktzyklen notwendig, da zwei Register durchlaufen werden. Das Register hinter dem Inkrementierer dient als Zwischenspeicher der Audioadresse, falls gerade ein PCI-Transfer stattfindet und der Zähler als Burst-Zähler verwendet wird. (roe)

Dieser Artikel wird fortgesetzt.

Martin Kirst

studiert Elektrotechnik an der TU-Braunschweig im 5. Semester; sein Bruder

Uwe Kirst

hat sein Physik-Studium an der Uni Kiel erfolgreich beendet (und ist jetzt auf Stellensuche).