Benchmarken van Programmable Logic Devices met Enhanced Parallel Port Implementaties

Vergelijkbare documenten
De seriële poort Jan Genoe KHLIM

Goedkope RS232. MSX Computer Magazine nummer 53- april Scanned, ocr ed and converted to PDF by HansO, 2001

Hoofdstuk 10. Datacommunicatie

Nederlandse versie. Inleiding. Inhoud van de verpakking. Specificaties. PU003 Sweex 1 Port Parallel & 2 Port Serial PCI Card

Hoofdstuk 7. Computerarchitectuur

Technisch ontwerp positiebepaling Smart Blocks

Wat is een busverbinding?

Centronics: IEEE 1284

SERIËLE/PARALLELLE I/O 2/1-POORT PCI UITBREIDINGSKAART

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

In- en uitgangssignalen van microprocessoren

Inhoud vandaag. Interrupts. Algemeen ARM7 AIC

versie: 1.0 status: vrijgegeven door: J.Eberson datum: 15 augustus 2005 aangepast: 19 februari 2006 concept beschrijving

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

MODBUS remote I/O-unit type MODBUS4S110

Geïntegreerde proef. Computer gestuurd domotica systeem

1-poorts RS232 seriële adapter kaart met UART

GIP. De computer gestuurde trein

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

De Arduino-microcontroller in de motorvoertuigentechniek (2)

DATACOMMUNICATIE. Serieel of parallel. Begrippen. Snelheid van een verbinding

Vaak zijn er twee interfaces: DTE (data terminal equipment) en DCE (data communication equipment) DCE en network

De Arduino-microcontroller in de motorvoertuigentechniek (3)

FORTH op de 80C535 processor met het ATS535 board.

Menu Serieel. Afdrukken. Papierverwerking. Onderhoud. Problemen oplossen. Beheer. Index

Voorblad tentamen ENG

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

MULTIMEDIABOX.nl Custom made solutions hardware & software. Advanced Menu

RAM geheugens. Jan Genoe KHLim. Situering RAM-geheugens. Geheugens. Halfgeleider Geheugens. Willekeurig toegankelijk geheugen

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

K2-Electronics. Project IB2 Mk-II Status Final Revisie 0.6 Datum okt P. C. Krom, F. W. Krom. Auteur(s)

De TRUST 2 PORT USB 2.0 PCI CARD werkt niet op MAC.

2 Algemene opbouw van een computersysteem

Sequentiële Logica. Processoren 24 november 2014

DATA SHEET C2-20. Besturing voor elektrische actuators. DATA SHEET C2-20 A&E Trading b.v. 1

Computer architecturen: Muis en toetsenbord

Scan-pad technieken. Zet elk register om in een scan-pad register (twee opeenvolgende D-latches: master-slave):

Tweede workshop Arduino

Hoofdstuk 4. Digitale techniek

IDAgeChecker BDX118T11xx Manual V02.00

Locobuffer Handleiding

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

Een intelligent DMX netwerk

PCI Ontwikkelplatformen

GEINTEGREERDE PROEF DE COMPUTER ALS TV AFSTANDSBEDIENING

PIC Callgever Door PA1RUM

WZ FS 2-2-FFSK 12.5kHz. Korte handleiding

Handleiding HCS VB5248

12.1 Input/output-kaart IOK. Informatieblad 12 input/output-kaart versie 1.0. Beperking aansprakelijkheid

Het koppelen van de Wago aan de AC500-eco via Modbus RTU. A quick start guide. Jaap Ruiten

2-poort USB naar RS232 RS422 RS485 Seriële Adapter met COM-behoud. StarTech ID: ICUSB

Inductiemeter via de parallelle poort

LocoServo Handleiding

Koppelen Centix Datacollecter aan RS-485 device d.m.v. de W&T 58631

Data communicatie RS 232, Indicator 3010/11/15Da

IEEE 1394 firewire. Jan Genoe KHLim. I-link DV (digital video)

INHOUD SPI : SERIAL PERIPHERAL INTERFACE ALGEMEEN. Videolessen Deel 3 DATACOMMUNICATIE SPI

Espa 443 Converter. Beschrijving van de Espa 444 naar Espa 443 Converter.

Arduino CURSUS. door Willy - 09-juni-2017

Handleiding HCS VB5224

De Arduino-microcontroller in de motorvoertuigentechniek (4)

Bouwbeschrijving UniSAI

Wireless PC Interface installatie handleiding

Modbuskoppeling Verdyn - Priva (engineering in Priva)

Programmeren van de Raspberry Pi.

Seriële kommunikatie via de universele l/o-bus

Voorblad tentamen

Netwerk Interfacing Data Logging.

Inleiding Digitale Techniek. Week 7 Schuifregisters Jesse op den Brouw INLDIG/

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (8)

Handleiding HCS VB5118

Advies, Productie, Reproductie, Faciliteiten, Presentatie, Verhuur, Verkoop

DATALOGGERS. Technolog - Cello 8-kanaals CELLO 8 KANAALS SMS/GPRS DATALOGGER

RUKRA REMOTE DIGIT IO_44_NL ARTIKELNUMMER: RK-3004

2-poorts industriële PCI Express (PCIe) RS232 seriële kaart met voedingsuitgang en ESDbeveiliging

Naam student: Studentnr: Klas: Cijfer:

EE1410: Digitale Systemen BSc. EE, 1e jaar, , 8e hoorcollege

Combinatorische schakelingen

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

RS232 Commands BrightSign players HD1010, HD1020, XD1030, XD , AU230

Snelle start instructie TXD(u) en RXD(u) voor CJ1/CS1-PLC Boards en Units

Hoofdstuk 6: Digitale signalen

TECHNISCHE UNIVERSITEIT EINDHOVEN FACULTEIT DER TECHNISCHE NATUURKUNDE

LocoServo Handleiding

EE1410: Digitale Systemen BSc. EE, 1e jaar, , 6e hoorcollege

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family)

DinaSys Turntable Controller

ADAM-4510/4510S/4520 RS-422/485 Repeater/Converter

Status Uitgebreid Werkst. paral. 1. INIT honoreren Werkst. paral. 2 Taakbuffer PCL SmartSwitch NPA-modus PS SmartSwitch Parallelbuffer Protocol

Modem en Codec. Telematica. Amplitude-modulatie. Frequentie-modulatie. Soorten modems. Fase-modulatie

Arduino Workshop 1 Zuid-Limburg

Beknopte informatie voor GBS leverancier t.b.v. NIBE warmtepomp 1145/1245/1155/1255/1345

Vraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset idem

Optilog-V5 System-91-log-V5

Handleiding HCS VB5238

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Installatie & Configuratiehandleiding. Socket Server. OpenAT applicatie

De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012

Transcriptie:

Benchmarken van Programmable Logic Devices met Enhanced Parallel Port Implementaties Het Ontwikkelen van een Interface tussen een Datalogger Systeem voor het Meten van Seismische Activiteit en een PC WFI-98-2 April 1998 Roel van de Kraats e-mail: R.C.vandeKraats@phys.uu.nl Begeleiders Instrumentele Groep Fysica: P.C. van Haren Fysische Informatica: A.J. Borgers

Samenvatting Bij de Instrumentele Groep Fysica wordt voor de faculteit Aardwetenschappen een datalogger voor het meten van seismische activiteit ontwikkeld. Aan deze datalogger moet een PC worden verbonden, die voor de dataverwerking zorgt. Er is gekozen voor een verbinding via de parallelle interface, ofwel de printerpoort, aangezien deze zowel qua software als qua hardware eenvoudig te gebruiken is. Er zijn tegenwoordig meerdere standaarden voor de parallelle poort: de Standard Parallel Port (SPP), de Enhanced Parallel Port (EPP) en de Extended Capabilities Port (ECP). De SPP is verouderd en te langzaam voor de benodigde datasnelheid. De EPP en de ECP zijn nieuwe standaarden, die een snelheid van rond de megabyte per seconde kunnen halen. Er is gekozen voor een EPP interface, aangezien deze eenvoudiger in hardware te implementeren is dan een ECP interface. Een nadeel van EPP is dat er geen goede software drivers zijn en de software dus rechtstreeks de EPP registers moet aanspreken. De parallelle interface van de datalogger wordt geïmplementeerd met een programmeerbaar IC. Er zijn twee typen programmeerbare IC s onderzocht: een CPLD van de firma Vantis en een FPGA van de firma Xilinx. Om een keuze te kunnen maken tussen deze twee typen en om de performance van de EPP interface te kunnen meten, is er voor beide typen een testboard gemaakt. Op de testborden zijn een parallelle poort en een seriële RS232 interface geplaatst. De IC s zijn zo geprogrammeerd dat vanuit de PC, via de EPP interface, data met de seriële interface uitgewisseld kan worden. Er blijkt dat de architectuur van de CPLD minder geschikt is voor dit doel. Daarom wordt de FPGA aanbevolen voor verdere ontwikkelingen. Tenslotte is onderzocht hoe snel de PC met Windows 95 kan reageren op de parallelle poort, ofwel wat de interrupt afhandelingssnelheid is. De eerder ontwikkelde hardware is, door het herprogrammeren van de FPGA, als testopstelling gebruikt, waarmee afhandelingssnelheden met een resolutie van 100 ns gemeten kunnen worden. Deze blijken gemiddeld tussen de 40 en 80? s te liggen, maar kunnen uitschieters tot bijna een seconde hebben. Dit betekent dat op de datalogger buffers aanwezig moeten zijn die minimaal een seconde de data kunnen vasthouden totdat de PC deze overneemt. Utrecht, 21 April 1998. Roel van de Kraats e-mail: R.C.vandeKraats@phys.uu.nl - 1 -

- 2 -

Inhoudsopgave 1. Inleiding... 5 2. De Standard Parallel Port (SPP)... 7 2.1. De Hardware... 7 2.2. SPP Handshaking... 7 2.3. Interrupts... 8 2.4. SPP Software... 8 2.5. De SPP gebruikt voor Input... 9 3. De Enhanced Parallel Port (EPP)... 11 3.1. Inleiding... 11 3.2. EPP Hardware... 12 3.3. EPP Software... 12 3.4. EPP Handshaking... 13 3.5. EPP Time-Out... 14 4. De Extended Capabilities Port (ECP)... 15 4.1. Inleiding... 15 4.2. ECP Hardware... 15 4.3. ECP Handshaking... 15 4.4. ECP Compressie... 17 4.5. Het FIFO Buffer... 17 4.6. ECP Software... 18 4.7. ECP Operation Modes... 19 4.8. De ECP Configuration Registers... 20 5. De Seriële Interface... 22 5.1. Inleiding... 22 5.2. RS232 Hardware Specificaties... 22 5.3. Serieel Data Formaat... 23 5.4. Null-Modem Kabel... 23 5.5. Flow Control... 24 6. Programmeerbare IC s, CPLD s versus FPGA s... 25 6.1. Inleiding... 25 6.2. De MACH5-128/68... 26 6.3. De XC4003E... 28 6.4. De Vergelijking... 29-3 -

7. De Software, DSL en VHDL... 30 7.1. Inleiding... 30 7.2. Een korte beschrijving van DSL... 30 7.3. Een korte beschrijving van VHDL... 32 7.4. DSL en VHDL vergeleken... 33 8. De DSL en VHDL Programma s... 34 8.1. Inleiding... 34 8.2. Het DSL Programma voor de MACH... 34 8.3. Het VHDL Programma voor de Xilinx... 36 9. Het PC Programma... 38 9.1. Inleiding... 38 9.2. De Werking... 38 10. Snelheidstests... 40 10.1. Inleiding... 40 10.2. Datasnelheid... 40 10.3. Interrupt Afhandelingssnelheid... 41 11. Conclusie... 45 Appendix A. Het DSL Programma... 46 Appendix B. Het VHDL Programma... 52 Appendix C. Het C Terminal Programma... 63 Referenties... 67-4 -

1. Inleiding Bij de faculteit Aardwetenschappen zijn datalogger systemen nodig voor het meten van seismische activiteit. De ontwikkeling van deze systemen wordt samen met de Instrumentele Groep Fysica gedaan 1. Een onderdeel van deze ontwikkeling is het ontwerpen van een interface tussen de data acquisitie module en de computer die voor de data opslag zorgt. Hierbij is gekozen voor een verbinding via de parallelle interface, ofwel de Centronix- of printerpoort. De voordelen van deze poort zijn de hoge datasnelheid, in de orde van een megabyte per seconde, en het feit dat het gebruik eenvoudig is, zowel qua hardware als qua software. Een ander voordeel is dat de parallelle poort nagenoeg standaard op elke PC aanwezig is en ook voor veel andere computersystemen te verkrijgen is. De Standard Parallel Port (SPP) is gedefinieerd door de implementatie op de IBM XT, ontwikkeld omstreeks 1980. Begin jaren negentig zijn er nieuwe protocollen ontwikkeld ten opzichte van de SPP. De belangrijkste nieuwe protocollen zijn de Enhanced Parallel Port (EPP) en de Extended Capabilities Port (ECP). Eerder zijn al de PS/2 mode en de nibble mode ontwikkeld. Al deze nieuwe protocollen hebben tot doel dezelfde connector en pin-aansluitingen beter te kunnen benutten. De SPP is namelijk slecht gedefinieerd, bedoeld voor éénrichtingsverkeer en niet zo snel (omstreeks 100 kilobyte per seconde). De belangrijkste voordelen van de EPP en ECP protocollen zijn dat deze goed gedefinieerd zijn, bi-directioneel dataverkeer mogelijk maken en een veel hogere datasnelheid kunnen halen (rond een megabyte per seconde). Dit laatste wordt bereikt door de hardware van de PC het grootste deel van de communicatie te laten verzorgen, in tegenstelling tot de SPP, waar de software dit moet doen. Bij het ECP protocol worden bovendien andere manieren toegepast om nog hogere datasnelheden te bereiken, zoals de mogelijkheid tot het gebruik van DMA (Direct Memory Access) en hardwarematige datacompressie. Omdat de datasnelheid bij de datalogger niet zo hoog hoeft te zijn, lijkt de EPP hier het meest geschikt. Voor het implementeren van een parallelle interface aan de kant van de data acquisitie module, is er gekozen voor een programmeerbaar IC. Er zijn twee typen onderzocht, een CPLD (Complex Programmable Logic Device) en een FPGA (Field- Programmable Gate Array). Om de mogelijkheden van deze twee typen en de parallelle interface te kunnen benchmarken, is er voor beide typen een testboard gemaakt met een parallelle interface. Om het systeem testbaar te maken is er ook een seriële interface toegevoegd. Behalve het IC en de parallelle en seriële poort is er nog een kristal aanwezig dat voor een 10 MHz klok voor het IC zorgt. De IC s zijn zo geprogrammeerd dat vanuit een PC via de parallelle interface data met de seriële poort uitgewisseld kan worden. In dit verslag wordt een aantal punten bekeken: 1. Welke problemen kunnen er optreden bij het ontwikkelen van een parallelle interface voor de datalogger? 2. Is EPP voor de datalogger wel het meest geschikt als parallelle interface? 3. Wat is het effect van de verschillende architecturen van de CPLD en de FPGA op het implementeren van de interface? 4. Wat is de snelheid van data overdracht en data afhandeling door de PC (die met het operating system Windows 95 werkt)? - 5 -

De data afhandelingssnelheid is van belang voor de uiteindelijke keuze van de grootte van de buffers voor tijdelijke data opslag op de data acquisitie module, maar heeft in principe niets met de performance van de parallelle poort te maken. - 6 -

2. De Standard Parallel Port (SPP) 2.1. De Hardware De parallelle poort is oorspronkelijk ontwikkeld voor de verbinding tussen een IBM PC en een printer. Hiervoor worden acht datalijnen, vier control- en vijf statuslijnen gebruikt 2. Een aantal control- en statuslijnen dragen typisch printer-gerelateerde namen als Paper-Out en Auto-Linefeed. De connector aan de PC zijde is een 25 pins D-Type connector, terwijl aan de printerkant een Centronics 36 pins connector wordt toegepast. De aansluitingen zijn te zien in Tabel 2.1. Hier is ook te zien via welke software-registers de signalen gelezen / geschreven kunnen worden. Pin No (D- Type 25) Pin No (Centronics) SPP Signaal Richting In/Out Register 1 1 nstrobe In/Out Control Ja 2 2 Data 0 Out Data 3 3 Data 1 Out Data 4 4 Data 2 Out Data 5 5 Data 3 Out Data 6 6 Data 4 Out Data 7 7 Data 5 Out Data 8 8 Data 6 Out Data 9 9 Data 7 Out Data 10 10 nack In Status 11 11 Busy In Status Ja In deze tabel is met n voor de signaalnamen aangegeven dat deze signalen active low zijn. Dus een TTL laag niveau op de nerror lijn duidt aan dat er een fout is opgetreden, terwijl bij de Busy lijn een TTL laag niveau aangeeft dat de printer klaar is om data te ontvangen. Met Hardware Inverted wordt aangeduid dat het signaal wordt geïnverteerd door de hardware van de parallelle interface. Wanneer de printer busy is, staat er een hoog niveau op de Busy lijn en de software leest dit dus als een 0 in het bijbehorende bit in het status register. 2.2. SPP Handshaking Hardware Inverted 12 12 Paper-Out / Paper- In Status End 13 13 Select In Status 14 14 nauto-linefeed In/Out Control Ja 15 32 nerror / nfault In Status 16 31 ninitialize In/Out Control 17 36 nselect-printer / In/Out Control Ja nselect-in 18-25 19-30 Ground Gnd Tabel 2.1 Signalen van de standaard parallelle interface. De handshaking voor het sturen van data bij de SPP gaat als in Figuur 2.1. Een printer die data kan ontvangen zet de Busy lijn laag. Wanneer de PC data naar de printer wil sturen, kijkt hij eerst of deze niet bezig. Vervolgens worden de volgende stappen uitgevoerd: 1. De PC zet de data op de datalijnen. 2. De PC maakt (na minimaal 0,75? s) de nstrobe lijn laag, dus active. De printer neemt de data over op deze negatieve flank. - 7 -

Figuur 2.1 Handshaking bij de SPP. 3. De printer geeft door de Busy lijn hoog te maken aan dat hij bezig is. 4. Minimaal 1? s na het laag maken van nstrobe zet de PC deze weer hoog. 5. Zodra de printer klaar is, maakt hij de Busy lijn weer laag. 6. De printer zet de nack lijn laag en houdt deze voor ongeveer 5? s laag. 7. Bij sommige printers wordt de Busy lijn pas laag als nack weer hoog wordt. In principe kan de nack lijn door de PC genegeerd worden en dit wordt dan ook meestal gedaan. Het probleem bij de SPP is dat al deze handshaking door de software moet worden gedaan. Dus kijken of de printer niet bezig is, data op de datalijnen zetten, enz., gebeurt door de software. Dit zorgt ervoor dat het sturen van één byte minimaal vier ISA bus I/O cycles duurt. Dit limiteert de snelheid van data overdracht op ongeveer 50 kbytes/sec tot maximaal 150 kbytes/sec, ook bij moderne, snelle processoren. 2.3. Interrupts Het is met de parallelle poort mogelijk om het aangesloten device interrupts te laten genereren op de PC 3. Op deze manier hoeft de software op de PC niet continu te kijken of het device klaar is om nieuwe data te sturen of te ontvangen, maar wordt automatisch de juiste routine uitgevoerd als dit het geval is. Voor het opwekken van interrupts wordt de nack lijn gebruikt. Om interrupts te kunnen gebruiken moet bit 4 van het control register worden gezet. De PC zal dan een interrupt (meestal IRQ5 of IRQ7) genereren op de stijgende flank van nack. Er moet wel rekening mee worden gehouden, dat bij het gebruik van de normale SPP handshaking er bij ieder byte een interrupt zal worden opgewekt. Dit zal de snelheid van data overdracht eerder verminderen dan verhogen. Daarom is het gebruik van interrupts alleen nuttig als de parallelle poort anders wordt gebruikt dan met de normale SPP handshaking. 2.4. SPP Software Om vanuit de software de hardware te kunnen aansturen en controleren, is in het geheugen van de PC een aantal locaties gereserveerd, de registers. Voor de SPP zijn dit het data register, het status register en het command register. Deze registers zijn voor LPT1 (printer poort 1) meestal te vinden vanaf adres 378h. (Het basisadres van LPT1 is te vinden op adres 40:08h, het adres van LPT2 op adres 40:0Ah en het adres van LPT3 op adres 40:0Ch.) Het data register is te vinden op het basisadres (Tabel 2.2), het status register op het basisadres + 1 (Tabel 2.3) en het command register op het basisadres + 2 (Tabel 2.4). - 8 -

Adres Naam Read/Write Bit No. Properties Base + 0 Data Port Write * Bit 7 Data 7 Bit 6 Data 6 Bit 5 Data 5 Bit 4 Data 4 Bit 3 Data 3 Bit 2 Data 2 Bit 1 Data 1 Bit 0 Data 0 Tabel 2.2 SPP Data Register. Adres Naam Read/Write Bit No. Properties Base + 1 Status Port Read Only Bit 7 Busy (Not) Bit 6 nack Bit 5 PaperEnd Bit 4 Select In Bit 3 nerror Bit 2 IRQ (Not) Bit 1 Gereserveerd Bit 0 Gereserveerd Tabel 2.3 SPP Status Register. Adres Naam Read/Write Bit No. Properties Base + 2 Control Port Read/Write Bit 7 Ongebruikt Bit 6 Ongebruikt Bit 5 Enable Bi-Directional Port Bit 4 Enable IRQ Via Ack Line Bit 3 nselect-printer (Not) Bit 2 ninitialize Bit 1 nauto-linefeed (Not) Bit 0 nstrobe (Not) In het status register zijn behalve vijf input lijnen nog twee gereserveerde bits te vinden en een bit dat aangeeft of er een interrupt heeft plaatsgevonden. Dit laatste bit (bit 2) is geïnverteerd, dus als dit bit 1 is, heeft er geen interrupt plaatsgevonden. 2.5. De SPP gebruikt voor Input Tabel 2.4 SPP Control Register. Oorspronkelijk werd de parallelle poort alleen gebruikt om data naar de printer te kunnen sturen. De printer kan status informatie aan de computer melden via vijf inputlijnen. Deze vijf lijnen zijn door de software uit te lezen als de bovenste vijf bits van het status register. In Tabel 2.1 is echter te zien dat er vier control lijnen zijn die ook als input gebruikt kunnen worden. Om ervoor te zorgen dat de in- en uitgangssignalen niet botsen, zijn deze lijnen open-collector uitgangen. Dit betekent dat een 0 wordt doorgegeven als een laag TTL niveau, maar dat een 1 wordt aangegeven met een hoge impedantie. Daarom moeten er aan de printerkant altijd pull-up weerstanden worden opgenomen (van bijvoorbeeld 4.7 k? ) om toch een hoog niveau te krijgen. Om data van de control lijnen te kunnen lezen, is het control * Bij bi-directionele mode kan het data register ook gelezen worden. - 9 -

register ook readable. Door nu eerst de uitgangen hoog-impedant te maken via het schrijven van xxxx0100 naar het control register, kan de status van de lijnen worden bekeken met het lezen van het control register. In totaal kunnen er op deze manier dus 9 ingangen tegelijk worden uitgelezen. Een groot nadeel van deze methode is dat de normale SPP handshaking dan niet meer mogelijk is. De handshaking zal dan dus op een andere, niet gedefinieerde manier moeten gebeuren. Er is nog een manier om data twee kanten op te kunnen sturen. Een aantal parallelle poorten kan als bi-directionele poort worden ingesteld (via bit 5 van het control register). Dit wordt de PS/2 mode of Byte mode genoemd. Het is dan mogelijk om de acht datalijnen als input te gebruiken. Er moet echter altijd voor worden gezorgd dat de poort niet nog als uitgang staat ingesteld als het aangesloten device data naar de PC probeert te sturen. Dit is trouwens ook bij het gebruik van de control lijnen als input van belang. Een probleem is dat de bi-directionele mode niet goed is gedefinieerd. Bij een aantal poorten wordt namelijk niet alleen bit 5 van het control register gebruikt, maar wordt bit 6 gebruikt om de bi-directionele mode aan te zetten en bit 5 om weer naar de standaard mode terug te keren. De meest betrouwbare manier om data van de parallelle poort in te lezen, is om slechts de status lijnen voor input te gebruiken. Een reden hiervoor is dat de control uitgangen niet altijd als high-impedance uitgangen, maar soms als gewone uitgangen zijn geïmplementeerd. In de zogenaamde nibble mode worden om een heel byte in te lezen het meest significante en het minst significante nibble achter elkaar ingelezen. Bij het gebruik van de nibble mode is er wel weer handshaking mogelijk, maar deze methode is trager dan het inlezen van een heel byte in één keer. Daarom is het gebruik van deze mode meestal geen optie wanneer enige datasnelheid nodig is en zal deze mode hier ook niet verder worden beschreven. Duidelijk is nu dat het SPP protocol minder geschikt is voor andere toepassingen dan printen. Vooral het in de PC kunnen inlezen van data via de SPP interface is niet goed mogelijk. - 10 -

3. De Enhanced Parallel Port (EPP) 3.1. Inleiding Vanwege het slecht gedefinieerde gedrag en de lage snelheid van de standaard parallelle poort zijn er in de loop der jaren een aantal nieuwe standaarden ontwikkeld, allemaal backwards compatible met de SPP 4. In 1994 werd de Enhanced Parallel Port (EPP), ontwikkeld door Intel, Xircom en Zenith Data Systems, als IEEE 1284 standaard geaccepteerd 5. Aangezien EPP hiervoor ook al werd gebruikt, zijn er twee EPP versies. De versie van vóór de standaard is versie 1.7; versie 1.9 is de standaard. Deze nieuwe interface is tegenwoordig op bijna elke nieuwe computer te vinden. Bij het ontwikkelen van het EPP protocol is men ervan uitgegaan dat een data transfer op de ISA bus rechtstreeks wordt gekoppeld aan een data transfer op de parallelle poort. Dit betekent dat in één ISA bus I/O cycle een byte kan worden verstuurd. De hardware zorgt hierbij voor de handshaking, wat een groot voordeel is vergeleken met de SPP, waar de software dit moet doen. Bij de SPP zijn minimaal vier I/O operaties nodig. Deze vermindering van het aantal I/O cycles zorgt ervoor dat bij de EPP data snelheden van 500 kbytes/sec tot 2 Mbytes/sec kunnen worden gehaald. De ISA bus werkt wel op 8 MHz, maar bij iedere clockcycle wordt er een aantal waitstates ingevoerd, zodat niet een nog hogere snelheid gehaald kan worden. Om te zorgen dat de ISA bus niet blijft wachten terwijl het device niet reageert, is er een time-out mechanisme ingevoerd dat ervoor zorgt dat er nooit langer dan 10? s wordt gewacht (zie paragraaf 3.5). Pin No SPP Signaal EPP Signaal Richting EPP Functie 1 nstrobe nwrite Out Low op deze lijn geeft een Write aan, High een Read 2 Data 0 Data 0 In/Out Data Bus. Bi-directioneel 3 Data 1 Data 1 In/Out 4 Data 2 Data 2 In/Out 5 Data 3 Data 3 In/Out 6 Data 4 Data 4 In/Out 7 Data 5 Data 5 In/Out 8 Data 6 Data 6 In/Out 9 Data 7 Data 7 In/Out 10 nack Interrupt In Interrupt Lijn. Interrupt vindt plaats op de stijgende flank. 11 Busy nwait In Voor handshaking. Een EPP cyclus kan gestart worden als deze lijn laag is, en beëindigd wanneer hoog. 12 Paper-Out / Paper-End Ongebruikt In Niet gebruikt bij EPP 13 Select Ongebruikt In Niet gebruikt bij EPP 14 nauto-linefeed ndata-strobe Out Low geeft een data transfer aan 15 nerror / nfault Ongebruikt In Niet gebruikt bij EPP 16 ninitialize nreset Out Reset Device Active Low 17 nselect-printer / naddress- Out Low geeft een adres transfer aan nselect-in Strobe 18-25 Ground Ground Gnd Ground Tabel 3.1 Signalen van de Enhanced Parallel Port. Om de EPP compatible te houden met de SPP, wordt gebruik gemaakt van dezelfde connector en dezelfde in- en uitgangen als bij de SPP. De command en status lijnen - 11 -

zijn nu anders gedefinieerd (Tabel 3.1). Er worden geen open-collector uitgangen meer gebruikt, maar normale harde uitgangen. Dit wordt gedaan om grotere datasnelheden te kunnen realiseren. 3.2. EPP Hardware Bij EPP is er uitgegaan van twee verschillende soorten gegevens, te weten data en adressen. Voor deze twee soorten gegevens worden verschillende strobes gebruikt. Deze scheiding in verschillende soorten gegevens maakt het mogelijk in het device verschillende registers te implementeren. Met een adres cycle kan in het device een register worden geselecteerd, waarmee vervolgens via data cycles data uitgewisseld kan worden. Behalve de data en adres strobes is er een strobe om aan te geven of er gelezen of geschreven moet worden. In tegenstelling tot de SPP is het lezen van data bij de EPP namelijk even simpel als het schrijven. 3.3. EPP Software De EPP gebruikt een aantal registers meer dan de SPP (Tabel 3.2). Behalve de drie SPP registers zijn er nog een EPP adres register en een EPP data register. De SPP registers gedragen zich hetzelfde als bij een standaard parallelle poort, alleen bit 0 van het status register wordt nu gebruikt om aan te geven of er een time-out is opgetreden. Wanneer de SPP registers worden gebruikt, moet ook de handshaking softwarematig gebeuren. Indien het EPP adres of EPP data register wordt gebruikt, wordt de handshaking door de hardware geregeld. Adres Register Read/Write Base + 0 Data Register (SPP) Write Base + 1 Status Register (SPP) Read Base + 2 Control Register (SPP) Write Base + 3 Adres Register (EPP) Read/Write Base + 4 Data Register (EPP) Read/Write Base + 5 Ongedefinieerd (16/32 bit Transfers) - Base + 6 Ongedefinieerd (32 bit Transfers) - Base + 7 Ongedefinieerd (32 bit Transfers) - Tabel 3.2 EPP Registers. Bij de meeste PC s zijn er drie EPP registers op het basisadres + 5, basisadres + 6 en basisadres + 7, die kunnen worden gebruikt voor 16 en 32 bit lees- en schrijfoperaties. De parallelle interface kan slechts acht bits tegelijk versturen, maar de 16 of 32 bit brede words worden door de hardware in blokken van 8 bit gedeeld. Bij het lezen van een 16 of 32 bit word worden er eerst 2 resp. 4 bytes opgehaald van het device, waarna deze bytes door de hardware als één word worden doorgegeven aan de software. De volgorde waarin dit gebeurt, is dat het eerste byte op de laagste geheugenplaats terecht komt en het laatste byte op de hoogste geheugenplaats. Bij een (IBM compatible) PC betekent dit, dat het eerste byte dat is opgehaald het laagste byte van het word vormt en het laatste byte het hoogste byte van het word. Deze hele operatie vindt plaats in een enkele I/O cycle. Bij het schrijven van een 16 of 32 bit word wordt deze in blokken van 8 bit verstuurd. Ook dit gebeurt in één I/O cycle. Om het EPP protocol te kunnen gebruiken, zal de parallelle poort in EPP mode gezet moeten worden. Het beste kan dit gedaan worden in de BIOS Setup, die bij het opstarten van de computer gestart kan worden. Hier kan dan gekozen worden tussen - 12 -

SPP en EPP en bij nog nieuwere computers ook ECP. Wanneer er hier geen mogelijkheid is voor EPP en wel voor ECP, kan het zijn dat de hardware EPP niet ondersteunt. Het kan echter ook zo zijn dat ECP ingesteld moet worden, waarna de software de ECP interface in EPP mode moet zetten. Een nadeel van EPP is dat de software ondersteuning slecht is. Er zijn namelijk geen standaard bibliotheken beschikbaar. Software die het EPP protocol wil gebruiken, zal rechtstreeks de EPP registers moeten aanspreken. Dit is bij DOS en Windows 95 geen probleem, maar bij bijvoorbeeld Windows NT is dit niet toegestaan en zal er bijvoorbeeld zelf een device driver moeten worden geschreven. Bij SPP en ECP is dit beter geregeld en zijn er wel bibliotheken beschikbaar. 3.4. EPP Handshaking Door een byte naar het EPP Data register of het EPP Adres register te schrijven wordt dit byte automatisch naar het device gestuurd. De handshaking bij het sturen van een databyte of een adresbyte gaat als volgt (Figuur 3.1): Figuur 3.1 EPP Write Cycle. Als het device klaar staat voor data transfer zet hij nwait laag. Wanneer de PC gegevens wil versturen kijkt hij of nwait laag is. Als het device klaar is worden de volgende stappen uitgevoerd: 1 De PC zet nwrite laag om aan te geven dat er geschreven gaat worden. 2 De PC zet de data op de data lijnen. 3 De PC zet, afhankelijk van of er een databyte of een adresbyte verstuurd moet worden, ndata-strobe of naddres-strobe laag. 4 Het device reageert met het hoog maken van nwait om aan te geven dat het gegevens kan ontvangen. 5 De PC maakt vervolgens ndata-strobe of naddres-strobe weer hoog. Het device leest gewoonlijk de data in bij deze opgaande flank. 6 Als het device klaar is met het verwerken van de data maakt hij nwait weer laag en is de cycle afgelopen. Als de software het EPP Data register of het EPP Adres register uitleest, zal de PC hardware een leesactie starten (Figuur 3.2). 1. Zodra nwait laag is, zet de PC nwrite hoog om aan te geven dat er gelezen moet worden. De acht datapoorten worden als input geschakeld. 2. De PC maakt, afhankelijk van of er een databyte of een adresbyte gelezen moet worden, ndata-strobe of naddress-strobe laag. 3. Het device reageert door zijn datapoorten als uitgang te schakelen en data op de datalijnen te zetten. - 13 -

Figuur 3.2 EPP Read Cycle. 4. Het device maakt de nwait lijn hoog om aan te geven dat er geldige gegevens op de datalijnen staan. 5. De PC neemt de data over van de datalijnen en maakt ndata-strobe of naddress- Strobe weer hoog om het device te laten weten dat de data gelezen is. 6. Uiteindelijk schakelt het device zijn datapoorten weer als ingang en zet nwait weer laag. Hiermee is de read cycle afgelopen. Zoals bij de handshaking te zien is, heeft de PC de leiding over de communicatie. Het device kan niet zelfstandig data naar de PC sturen, wat bij ECP wel kan (zie hoofdstuk 4). Deze aanpak zorgt er wel voor dat de handshaking zo eenvoudig mogelijk blijft. Om te voorkomen dat er hardware beschadigd wordt, moet het device zijn datapoorten direct als ingang schakelen als nwrite laag is. Net zo moet de PC zijn datapoorten direct als ingang schakelen wanneer nwrite hoog is. Het verschil tussen EPP 1.7 en EPP 1.9 is dat bij versie 1.7 de host (de PC) niet wacht tot nwait laag is, voordat ndata-strobe of naddress-strobe laag wordt gemaakt. Dit betekent dat als nwait nog hoog was, de PC denkt dat de lees-/schrijfactie al afgelopen is. Om dit te voorkomen moet het device zorgen dat nwait al laag is voordat een nieuwe lees- of schrijfactie wordt begonnen. Als het device hier niet snel genoeg voor is, moet de software op de PC controleren of nwait wel laag is. Bij EPP 1.9 is dit niet nodig. 3.5. EPP Time-Out Als nwait niet hoog wordt binnen 10? s nadat de schrijf- of leesactie is gestart (door ndata-strobe of naddress-strobe laag te maken), zal het time-out bit (bit 0) van het status register gezet worden en wordt de lees- of schrijfoperatie afgebroken. De reden voor deze time-out is dat de hele operatie in één I/O cycle wordt gedaan en de computer dus niet verder kan voordat deze cycle is afgelopen. Er zal pas een nieuwe leesof schrijfactie gestart kunnen worden nadat het time-out bit door de software weer is gewist. Er moet dus regelmatig worden gekeken of er een time-out is opgetreden. Het wissen van het time-out bit gaat niet altijd hetzelfde. Bij sommige hardware wordt het bit gewist door er een 1 naar toe te schrijven (dus geen 0 ). Bij andere implementaties wordt het bit gewist door het status register nog een keer te lezen. Wanneer software zo universeel mogelijk moet zijn en op zo veel mogelijk verschillende computers moet kunnen werken, moet beiden worden gedaan om dit bit te wissen. Dit zorgt er echter wel voor dat het wissen iets meer tijd kost. Maar als het goed is, treedt er nooit een time-out op, dus is het niet erg als het wissen van dit bit niet efficiënt gebeurt. - 14 -

4. De Extended Capabilities Port (ECP) 4.1. Inleiding De Extended Capabilities Port (ECP) is ontwikkeld door Hewlett Packard en Microsoft 6. Net als bij de EPP wordt de handshaking door de hardware geregeld. Ook is hier weer het verschil tussen data en adressen (command s genoemd bij ECP) ingevoerd. De ECP is uitgebreider dan de EPP. Zo is er de mogelijkheid om DMA (Direct Memory Access) te gebruiken, wat de snelheid ten goede komt. Deze komt zo nog iets hoger te liggen dan bij EPP. Ook wordt er een FIFO (First In, First Out) buffer gebruikt voor het zenden en ontvangen van data. Het derde grote verschil met EPP is dat er real time datacompressie kan worden gebruikt. Op deze manier hoeft bij een reeks dezelfde bytes slechts één keer dat byte te worden verstuurd en een byte om aan te geven hoe vaak de data herhaald moet worden. Deze manier van comprimeren wordt Run Length Encoding (RLE) genoemd. Er kan bij ECP op deze manier een data compressie ratio van maximaal 64:1 gehaald worden. De ECP interface is iets nieuwer dan de EPP, maar is wel op bijna iedere nieuwe computer aanwezig. 4.2. ECP Hardware Net als bij EPP wordt bij ECP dezelfde connector gebruikt als bij de originele parallelle poort, maar ook hier zijn de pinnen anders gedefinieerd dan bij SPP. De ECP is backwards compatible met SPP en meestal ook met EPP, dus met een Extended Capabilities Port kan een Standard of een Enhanced Parallel Port gesimuleerd worden. De aansluitingen van de ECP zijn te zien in Tabel 4.1. 4.3. ECP Handshaking De handshaking bij ECP is iets ingewikkelder dan bij EPP en SPP. De handshaking voor het sturen van een databyte is te zien in Figuur 4.1: Figuur 4.1 ECP Data Write Cycle. 1. Wanneer de host (de PC) een byte naar het device wil sturen, zet hij eerst de data op de datalijnen. 2. De PC maakt HostAck hoog om aan te geven dat er data wordt verstuurd. Als er een commandbyte verstuurd moet worden, wordt HostAck laag gezet. 3. De PC zet HostClk laag om aan te geven dat er geldige data op de datalijnen staat. 4. Het device reageert hierop door PeriphAck hoog te maken wanneer het data kan ontvangen. 5. De host maakt HostClk weer hoog. Bij deze flank wordt gewoonlijk de data door het device overgenomen. 6. Als het device klaar is met het binnenhalen van de data zet hij PeriphAck weer laag en is de cycle afgelopen. - 15 -

Pin No SPP Signaal ECP Signaal Richting ECP Functie In/Out 1 nstrobe HostClk Out Low op deze lijn geeft aan dat er geldige data bij de host staat. 2 Data 0 Data 0 In/Out Data Bus. Bi-directioneel 3 Data 1 Data 1 In/Out 4 Data 2 Data 2 In/Out 5 Data 3 Data 3 In/Out 6 Data 4 Data 4 In/Out 7 Data 5 Data 5 In/Out 8 Data 6 Data 6 In/Out 9 Data 7 Data 7 In/Out 10 nack PeriphClk In Low geeft aan dat er geldige data bij het device staat. 11 Busy PeriphAck In High geeft aan dat het device data kan ontvangen. 12 Paper-Out / Paper- End AckReverse In Low als nreverserequest geaccepteerd wordt. 13 Select X-Flag In Extensibility flag 14 nauto-linefeed HostAck Out High geeft aan dat de host data kan ontvangen. 15 nerror / nfault nperiphrequest In Low geeft aan dat het device data klaar heeft staan om te versturen. 16 ninitialize nreverserequest Out Low geeft aan dat de host data wil ontvangen. 17 nselect-printer / nselect-in 1284 Active Out High als de host in 1284 transfer mode staat. 18-25 Ground Ground Gnd Ground Tabel 4.1 Signalen van de Enhanced Capabilities Port. Het inlezen van data vanuit het device gaat iets ingewikkelder dan bij EPP. De handshaking hiervan is te zien in Figuur 4.2: Figuur 4.2 ECP Data Read Operatie. 1. De host moet, door nreverserequest laag te maken, eerst aangeven dat hij data wil ontvangen. 2. Het device reageert hierop met het laag zetten van nackreverse. Vanaf dit moment staan de datalijnen in omgekeerde richting. Het nadeel van deze methode is dat het heen en weer sturen van kleine datablokken trager is dan bij EPP, waar niet specifiek van richting hoeft te worden gewisseld. - 16 -

Nadat de poort in omgekeerde richting is gezet, kan het device data naar de host sturen. 3. Het device zet de te versturen data op de datalijnen. 4. Met een high op PeriphAck geeft het device aan dat het data wil sturen (een low geeft een command aan). 5. PeriphClk wordt laag gezet om aan te geven dat er geldige data op de datalijnen staat. 6. De host geeft aan dat hij data kan ontvangen door HostAck hoog te maken. 7. Het device zet PeriphClk weer hoog. Op deze flank kan de host de data overnemen. 8. Als de host klaar is, maakt hij HostAck weer laag. Om de poort weer in de normale richting te zetten, worden de volgende stappen uitgevoerd: 9. De host zet nreverserequest weer hoog. 10. Het device reageert hierop door zijn data uitgangen weer als ingang te schakelen en PeriphClk hoog te zetten, als deze nog niet hoog was. 11. Het device zet PeriphAck hoog als hij nog bezig is en anders laag en zet nackreverse hoog om aan te geven dat de richting omgekeerd is. Een nadeel van deze implementatie is dat het device een stuk ingewikkelder moet zijn dan bij EPP, aangezien een groter deel van de handshaking door het device moet worden geregeld. Zo moet het device zelfstandig data en command s sturen, terwijl bij EPP deze worden opgevraagd door de host. 4.4. ECP Compressie Zoals al eerder opgemerkt kan bij het ECP protocol data gecomprimeerd worden volgens de zogenaamde Run Length Encoding. Dit kan alleen gedaan worden als host en device dit allebei ondersteunen. Indien er meerdere dezelfde bytes moeten worden verstuurd, wordt eerst een commandbyte gestuurd en dan het databyte. Het commandbyte geeft aan hoe vaak het databyte herhaald moet worden, een zogenaamde Run Length Count. Dus als er n dezelfde databytes moeten worden verstuurd, wordt een commandbyte gestuurd met de waarde n-1. Om het verschil tussen een adres en een Run Length Count aan te geven, wordt het hoogste bit (bit 7) van een command gebruikt. Als dit bit gezet is, geven bits 0 t/m 6 een adres aan en anders een Run Length Count. Dus er kunnen maximaal 128 adressen worden gebruikt en een databyte kan maximaal 127 keer worden herhaald. Zo kan dus een datacompressie ratio van 64:1 gehaald worden, aangezien voor het sturen van 128 dezelfde bytes slechts één command- en één databyte verstuurd hoeven te worden. 4.5. Het FIFO Buffer Het FIFO (First In, First Out) buffer dat gebruikt wordt bij ECP zorgt voor efficiëntere data overdracht. Door dit buffer (wat meestal een grootte heeft van 16 bytes, maar bijvoorbeeld ook 64 bytes kan zijn) kan er eerst een datablok worden ingelezen van het device door de hardware, waarna de software dit in één keer uit het buffer uitleest. Andersom kan de software snel een datablok in het buffer zetten, wat dan door de hardware naar het (langzamere) device wordt gestuurd. Wanneer de - 17 -

richting van versturen wordt omgedraaid, wordt ook het buffer omgeschakeld naar de andere richting. 4.6. ECP Software Voor de besturing vanuit de software is er weer een aantal registers te vinden. Ten eerste zijn er weer de SPP registers. Deze hebben dezelfde werking als bij SPP, alleen wordt bit 5 in het SPP Control register (het Enable Bi-Directional Port bit) nu gebruikt om aan te geven in welke richting de ECP interface momenteel werkt. Ten tweede zijn er een aantal extra registers, specifiek voor de ECP (Tabel 4.2). Deze registers zijn al in het oorspronkelijke document van Microsoft beschreven, zodat er geen compatibiliteits-problemen zijn ontstaan, zoals met de SPP en EPP. Bij de SPP is er bijvoorbeeld geen eenduidigheid over het Enable Bi-Directional Port bit in het Control register en bij EPP moet het wissen van het Time-out bit in het Status register op verschillende manieren gebeuren. Adres Register Read/Write Base + 0 Data Port (SPP Mode) Write ECP Adres FIFO (ECP Mode) Read/Write Base + 1 Status Port (Alle Modes) Read/Write Base + 2 Control Port (Alle Modes) Read/Write Base + 400h Data FIFO (Parallel Port FIFO Mode) Read/Write Data FIFO (ECP Mode) Read/Write Test FIFO (Test Mode) Read/Write Configuration Register A (Configuration Mode) Read/Write Base + 401h Configuration Register B (Configuration Mode) Read/Write Base + 402h Extended Control Register (Alle modes) Read/Write Tabel 4.2 ECP Registers. Het belangrijkste ECP register is het Extended Control Register (ECR), te bereiken op het basisadres + 402h. Dit register ziet er als volgt uit (Tabel 4.3): Bit Functie 7:5 Selecteert de Operation Mode 000 Standard Mode 001 Byte Mode 010 Parallel Port FIFO Mode 011 ECP FIFO Mode 100 EPP Mode / Gereserveerd 101 Gereserveerd 110 FIFO Test Mode 111 Configuration Mode 4 ECP Interrupt 3 DMA Enable 2 ECP Service Bit 1 FIFO Full 0 FIFO Empty Tabel 4.3 Het ECP Extended Control Register (ECR). Met bit 4 (ECP Interrupt) kan worden opgegeven of interrupts gebruikt moeten worden. Met bit 3 (DMA Enable) wordt bepaald of Direct Memory Access moet worden gebruikt. Het ECP Service Bit (bit 2) geeft aan of er een interrupt is opgetreden. Als dit bit 1 is, zijn er geen interrupts mogelijk, dus nadat dit bit is gezet - 18 -

moet het softwarematig weer worden gewist. Dit bit wordt gezet in een aantal gevallen:?? Als het DMA Enable bit 1 is en er een DMA transfer plaatsvindt.?? Als het DMA Enable bit 0 is en er wordt data verstuurd en het FIFO buffer is leeg.?? Als het DMA Enable bit 0 is en er wordt data ontvangen en het FIFO buffer is vol. De twee onderste bits geven de status van het FIFO buffer aan. Als het buffer helemaal leeg is, is bit 0 (FIFO Empty) gezet. Als bit 1 is gezet, is het buffer helemaal vol. Dus als geen van beide bits 1 is, is het buffer nog niet vol, maar bevat het wel data. 4.7. ECP Operation Modes De drie hoogste bits in het ECR geven aan in welke mode de ECP werkt: ECP Operation Modes Standard Mode In deze mode simuleert de ECP een standaard, niet bidirectionele parallelle poort. Byte Mode In deze mode simuleert de ECP een bi-directionele SPP. Parallel Port FIFO Mode In deze mode wordt data volgens de SPP handshaking verstuurd. Zo kunnen dus wel de hardware handshaking en het buffer worden gebruikt, terwijl het device een SPP device kan zijn. ECP FIFO Mode Dit is de standaard ECP Mode. EPP Mode / Gereserveerd In deze mode wordt een EPP gesimuleerd. Niet bij alle ECP s mogelijk. FIFO Test Mode In deze mode wordt data niet naar de connector gestuurd, maar wordt het FIFO buffer wel gebruikt. Data die naar de poort wordt gestuurd komt in het buffer terecht, terwijl data die van de poort wordt gelezen uit het buffer wordt gelezen. Hierbij werken de FIFO Full en FIFO Empty bits zoals ze horen te werken. Op deze manier kan bijvoorbeeld de grootte van het FIFO buffer worden bepaald. Configuration Mode In deze mode kunnen de twee ECP registers Configuration Register A en B worden gebruikt. 4.8. De ECP Configuration Registers Het ECP Configuration Register A, dat te vinden is op het basisadres + 400h als de ECP in Configuration Mode staat, ziet er uit als in Tabel 4.4. De drie laagste bits zijn bedoeld om in het geval dat er een fout is opgetreden, de software de kans te geven deze fout te herstellen. Aangezien data in words naar de poort kan worden gestuurd, is het, in het geval dat er een fout optreedt, van belang om te weten hoeveel bytes van een word al verstuurd zijn. Dit is te zien op de twee laagste bits. Bit 2 geeft aan of het byte wat op het moment dat een fout is opgetreden in het uitgangsbuffer staat en nog niet verstuurd is, wordt meegeteld bij het FIFO buffer of niet. - 19 -

Bit Functie 7 1 Interrupts zijn level triggered 0 Interrupts zijn edge triggered 6:4 00 Max. 16 Bit brede words mogelijk 01 Max. 8 Bit brede words mogelijk 02 Max. 32 Bit brede words mogelijk 03:07 Gereserveerd 3 Gereserveerd 2 Host Recovery : Pipeline/Transmitter Byte onderdeel van FIFO? 0 Het byte in de send pipeline heeft geen invloed op het FIFO Full bit. 1 Het byte in de send pipeline heeft wel invloed op het FIFO Full bit. 1:0 Host Recovery : Onverstuurde bytes die nog in het FIFO buffer staan 00 Compleet Pword 01 1 Byte 10 2 Bytes 11 3 Bytes Tabel 4.4 ECP Configuration Register A. Het ECP Configuration Register B, te vinden op het basisadres + 401h als de ECP in Configuration Mode staat, heeft de volgende bitbezetting (Tabel 4.5): Bit Functie 7 1 Comprimeer te versturen data met RLE 0 Data niet comprimeren 6 Interrupt Status De huidige status van de IRQ pin 5:3 Selecteert of toont de status van de Interrupt Request Line. 000 Interrupt geselecteerd via jumper 001 IRQ 7 010 IRQ 9 011 IRQ 10 100 IRQ 11 101 IRQ 14 110 IRQ 15 111 IRQ 5 2:0 Selecteert of toont de status van het DMA Kanaal. 000 Gebruikt 8 Bit DMA kanaal geselecteerd met jumpers 001 DMA kanaal 1 010 DMA kanaal 2 011 DMA kanaal 3 100 Gebruikt 16 Bit DMA kanaal geselecteerd met jumpers 101 DMA kanaal 5 110 DMA kanaal 6 111 DMA kanaal 7 Tabel 4.5 ECP Configuration Register B. Sommige bits van dit register zijn bedoeld om te lezen, andere om te schrijven. Dit is verschillend voor de verschillende hardware implementaties. Bij poorten waar met jumpers de IRQ en het DMA kanaal ingesteld worden, zijn de overeenkomstige bits alleen te lezen. In dit geval kan de instelling van de jumpers met dit register te lezen zijn. Het kan ook zijn dat er alleen is weergegeven dat er jumpers worden gebruikt. Bij poorten die geen jumpers gebruiken, zijn de IRQ en het DMA kanaal met dit register in te stellen. - 20 -

Bit 6 geeft de huidige status van de IRQ pin aan. Dit is nuttig voor het zoeken naar fouten, aangezien dit bit niet alleen wordt gezet bij interrupts van de parallelle poort, maar ook bij andere interrupts met hetzelfde IRQ nummer. Uit het voorgaande blijkt dat de Extended Capabilities Port een stuk ingewikkelder is om te implementeren en te programmeren dan de SPP en de EPP. Voordelen zijn het gebruik van een FIFO buffer en Direct Memory Access en de gegarandeerde compatibiliteit van de software registers. Wanneer wat betreft de snelheid het onderste uit de kan moet worden gehaald, is de ECP de aangewezen poort. Als echter de datasnelheid geen belemmering vormt is het makkelijker EPP te gebruiken. Voor de implementatie van een parallelle interface op de datalogger is er dan ook voor gekozen om het EPP protocol toe te passen. - 21 -

5. De Seriële Interface 5.1. Inleiding Omdat op de testborden een seriële interface aanwezig is en uiteindelijk ook op de datalogger onderdelen met een seriële verbinding met het programmeerbare IC gekoppeld moeten worden, zullen hier kort de eigenschappen van de seriële poort worden beschreven. Op de testborden en de datalogger zullen alleen de instelmogelijkheden die nodig zijn, worden geïmplementeerd. 5.2. RS232 Hardware Specificaties Bij een seriële interface wordt de data, zoals de naam al zegt, serieel verstuurd. Een veel gebruikte seriële poort is de RS232 poort. Met deze poort kan data bi-directioneel worden verstuurd met minimaal drie draden, te weten twee signaaldraden voor de twee richtingen (TD en DR) en een ground draad (SG). Op deze manier kunnen apparaten op een goedkope manier over lange afstanden verbonden worden. Ook is een RS232 verbinding minder storingsgevoelig dan een parallelle verbinding, vanwege de hogere spanningen die worden gebruikt. Een logische 0 wordt, bij gebruik van het RS232/V24 protocol, aangegeven met een spanning van +12 Volt en een logische 1 met een spanning van 12 Volt. Op deze manier kan een spanningsverschil van 24 volt worden gebruikt, in tegenstelling tot de 5 Volt bij een parallelle interface. De datasnelheden bij een RS232 interface zijn echter een stuk lager dan bij de parallelle poort. Bij de meeste systemen wordt een snelheid van 9600 bits/sec gebruikt, hoewel bij moderne PC s een snelheid van 115200 bits/sec gehaald kan worden. De snelheidsaanduiding baud, die veel wordt gebruikt, is eigenlijk alleen van toepassing bij modems en is bij snelheden van meer dan 9600 bits/sec niet meer hetzelfde als bits/sec, vanwege de andere manier van moduleren. Tot 9600 bits/sec is het nog wel hetzelfde. Het omzetten van parallelle data (8 bits) in een serieel signaal en omgekeerd wordt gedaan door een zogenaamde UART (Universal Asynchronous Receiver/Transmitter). Het omzetten van TTL signalen in de spanningen die door de RS232 interface worden gebruikt, gebeurt echter meestal door een afzonderlijk IC. 25 Pins 9 Pins Afkorting Volledige Naam Functie connector connector Pin 2 Pin 3 TD Transmit Data Seriële Data Output Pin 3 Pin 2 RD Receive Data Seriële Data Input Pin 4 Pin 7 RTS Request To Send Hiermee vertelt de PC het modem dat hij data wil sturen. Pin 5 Pin 8 CTS Clear To Send Hiermee geeft het modem aan dat het klaar is om data te transporteren. Pin 6 Pin 6 DSR Data Set Ready Hiermee geeft het modem aan dat het klaar is om een verbinding te maken. Pin 7 Pin 5 SG Signal Ground Ground Pin 8 Pin 1 CD Carrier Detect Wordt active als het modem een carrier van het modem aan de andere kant van de lijn detecteert. Pin 20 Pin 4 DTR Data Terminal Ready Hiermee geeft de PC aan dat hij klaar is om een verbinding te maken. Pin 22 Pin 9 RI Ring Indicator Wordt active als het modem een bel signaal detecteert. Tabel 5.1 RS232 Connectoren. - 22 -

Momenteel worden er twee verschillende connectoren gebruikt bij de RS232 poort, een 9 pins en een 25 pins D-Type connector. Aangezien deze poort oorspronkelijk voornamelijk werd gebruikt voor het aansluiten van modems, zijn ook de aansluitingen daarop gericht. De aansluitingen zijn te zien in Tabel 5.1. Van deze aansluitingen zijn bij een simpele data verbinding, zoals gezegd, minimaal slechts TD, RD en SG nodig. Vaak worden ook RTS en CTS gebruikt voor de handshaking. Voor een verbinding met een modem moeten ook de overige lijnen gebruikt worden. 5.3. Serieel Data Formaat Het RS232 protocol kent veel instelmogelijkheden. Er zijn 5 tot 8 databits per datablok mogelijk, oneven, even of geen parity en 1, 1.5 of 2 stopbits. Voor de flow control is er een hardwarematige en een softwarematige mogelijkheid. Met parity check wordt bedoeld dat er een extra bit wordt meegestuurd, wat aangeeft of het aantal 1 databits even of oneven was. Op deze manier kan de ontvanger controleren of de data goed is overgekomen. Het nadeel van de flexibiliteit van dit protocol is, dat beide kanten hetzelfde moeten worden ingesteld om een goede data overdracht mogelijk te maken. Een datablok op de TD of RD lijn ziet er als volgt uit (Figuur 5.1): Figuur 5.1 RS232 Datablok. De data overdracht is asynchroon en alleen gedurende de lengte van een datablok synchroon. De ontvanger wacht op een startbit en zal dan met vaste tijdstappen de bits gaan inlezen. 5.4. Null-Modem Kabel Om twee apparaten die allebei als host zijn ontworpen serieel te verbinden, wordt vaak een zogenaamde null-modem kabel gebruikt. Dit is een simpele kabel waarbij de uitgangen van de ene kant kruiselings verbonden zijn met de ingangen van de andere kant, zoals te zien in Figuur 5.2: Figuur 5.2 Null-modem Kabel Verbindingsschema. - 23 -

5.5. Flow Control Om te voorkomen dat de zender sneller data stuurt dan de ontvanger kan verwerken, kan er flow control worden gebruikt. Hiervoor zijn twee mogelijkheden; softwarematig en hardwarematig. Bij de softwarematige methode worden twee tekens gebruikt, Xon (meestal ASCII 17) en Xoff (meestal ASCII 19). Als de zender data stuurt en het ingangsbuffer van de ontvanger dreigt vol te raken, dan stuurt de ontvanger een Xoff naar de zender om aan te geven dat hij moet stoppen met sturen. Zodra de data in het ingangsbuffer verwerkt is stuurt de ontvanger een Xon zodat de zender weer verder kan gaan met data sturen. Het voordeel van deze methode is dat er geen extra draden nodig zijn. Het nadeel is dat de verbinding langzamer kan worden omdat er extra tekens moeten worden verstuurd. Ook is niet duidelijk of de laatste characters wel goed zijn overgekomen en hoeveel ruimte er nog is in het ontvangstbuffer, dus hoeveel tekens er na een Xoff nog verwerkt kunnen worden. De hardwarematige methode maakt gebruik van de RTS en CTS lijnen. Als de zender data wil sturen maakt hij de RTS lijn active. Als de ontvanger de data kan ontvangen maakt hij de CTS lijn active, anders niet. Deze werkwijze heeft als voordeel dat er geen extra tekens hoeven te worden verstuurd. Er zijn echter wel twee extra draden nodig. - 24 -

6. Programmeerbare IC s, CPLD s versus FPGA s 6.1. Inleiding Tegenwoordig worden vaak zogenaamde PLD s (Programmable Logic Devices) gebruikt, in plaats van standaard poorten als AND en OR poorten en inverters. PLD s hebben als voordeel dat een logische bewerking niet hoeft te worden gedaan met verschillende standaard poorten, allemaal in verschillende IC s, maar dat een enkel programmeerbaar IC gebruikt kan worden 7. Dit zorgt voor een veel hogere pakkingsgraad op de printplaat. Ook kan door de PLD opnieuw te programmeren (bij gebruik van een herprogrammeerbare PLD), de werking worden veranderd zonder de printplaat te herontwerpen. Een PAL (Programmable Array Logic) is een type PLD, bestaande uit een programmeerbaar AND array en een niet programmeerbaar OR array. Vaak worden de uitgangen van deze OR poorten ingevoerd in flip-flops die met de uitgangen van het IC verbonden zijn. Een veel gebruikte PAL is de 22V10, die bestaat uit een AND array van 132 bij 44 gates en 10 macrocellen 8. Een macrocel bestaat uit een flip-flop en een aantal besturings-elementen. De 22V10 heeft in totaal tot 10 uitgangen en 22 ingangen (een aantal uitgangen kan als ingang gebruikt worden). De ingangen zijn verbonden met het AND array en de uitgangen met de uitgangen van de macrocellen. De uitgangen van de macrocellen kunnen weer worden teruggevoerd in het AND array. Het blokschema van een 22V10 is te zien in Figuur 6.1. Figuur 6.1 Blokschema van de Cypress PALC22V10. Om nog grotere logische structuren te maken, is het niet efficiënt om een device als de 22V10 op te schalen door een groter AND array en meer macrocellen te gebruiken. De oppervlakte van het IC neemt namelijk snel toe met het aantal in- en uitgangen van het AND array. Ook wordt de propagation delay steeds groter. Om deze problemen te vermijden is een aantal verschillende oplossingen bedacht 9. Eén van de oplossingen is de zogenaamde CPLD (Complex Programmable Logic Device). Hierbij worden meerdere PAL s samen op een IC gezet en onderling verbonden. Ook met deze methode is opschaling niet onbeperkt mogelijk, aangezien de structuur die nodig is om de verschillende blokken te verbinden dan te groot wordt. - 25 -

Een totaal andere aanpak is gebruikt bij de FPGA (Field-Programmable Gate Array). Deze is opgebouwd uit een groot aantal kleine elementen, logic blocks genoemd, die in een matrixstructuur met elkaar verbonden zijn (Figuur 6.2). Figuur 6.2 Structuur van een FPGA. Deze logic blocks zijn veel kleiner dan de blokken van een CPLD, maar door de matrixstructuur is het makkelijker veel van deze logic blocks met elkaar te verbinden, zodat een hogere capaciteit bereikt kan worden dan bij een CPLD. 6.2. De MACH5-128/68 De MACH5 van de firma Vantis, is een CPLD, opgebouwd uit PAL 34V16 blokken 10. Vier van deze blokken zijn samengevoegd tot een zogenaamd segment en het hele IC bestaat uit meerdere van deze segmenten (Figuur 6.3). Het enige verschil tussen de verschillende typen uit de MACH5 serie is het aantal segmenten. Het kleinste type is de MACH5-128 die uit 128 macrocellen, en dus 2 segmenten bestaat. Het grootste type is de MACH5-512, die uit 8 segmenten bestaat. Van deze verschillende typen zijn er ook weer verschillende uitvoeringen te verkrijgen met een verschillende aantallen I/O aansluitingen. Er zijn versies te krijgen van 68 tot 256 I/O pinnen. De MACH5-128/68 heeft 68 I/O pinnen. Figuur 6.3 MACH5 Blokschema. - 26 -

De verbindingen tussen de vier blokken in een segment worden Block Interconnect genoemd en de verbindingen tussen de verschillende segmenten Segment Interconnect. De MACH5 is gebaseerd op EEPROM technologie, wat betekent dat hij bij uitval van de voedingsspanning zijn programma bewaart en meerdere malen kan worden geprogrammeerd. De MACH5 is verkrijgbaar in versies met een maximum kloksnelheid van 125 MHz en wordt geprogrammeerd via een JTAG poort, zodat hij geprogrammeerd kan worden terwijl hij al in de schakeling ingebouwd is. De structuur van de PAL blokken is te zien in Figuur 6.4. De PAL s bestaan uit 16 macrocellen, een Logic Array, een Logic Allocator, I/O cellen, een Register Control Generator en een Output Enable Generator. Figuur 6.4 MACH5 PAL Blokschema. De I/O cellen hebben een terugkoppeling naar de ingangen van het Logic Array. De Block Feeder zorgt ervoor dat de vereiste I/O signalen een connectie toegewezen krijgen binnen een segment. De Interconnect Feeder doet hetzelfde voor connecties tussen de segmenten. De Logic Allocator verbindt het Logic Array op de juiste manier met de macrocellen. In tegenstelling tot een normale PAL kunnen de macrocellen namelijk op verschillende manieren met het AND array verbonden worden. De Control Generator zorgt voor de toevoer van de klok-, set- en resetsignalen naar de macrocellen. Er zijn vier kloklijnen en drie set/reset lijnen beschikbaar voor iedere macrocel. De Output Enable (OE) Generator regelt hoe de I/O cellen met de macrocellen verbonden zijn. Elke macrocel kan permanent enabled of disabled zijn, of wordt geregeld via de twee output-enable lijnen die in ieder PAL blok te vinden zijn. De macrocellen van de MACH5 bestaan uit een flip-flop, een control bus die voor de klok-, set- en reset-aansluitingen zorgt en verdere structuren die voor de juiste verbindingen met het Logic Array en de I/O cellen zorgen. Door de flexibele opbouw van de MACH5 is hij meer dan alleen een aantal losse PAL s op één IC. Toch zijn de voordelen van een PAL wat betreft de timing behouden. Deze is namelijk geheel te voorspellen doordat de signalen allemaal dezelfde weg volgen. - 27 -

6.3. De XC4003E De XC4003E is een FPGA uit de XC4000E/X reeks van de firma Xilinx met een structuur als in Figuur 6.2. Er zijn versies verkrijgbaar in grootte uiteenlopend van een 10?10 matrix van logic blocks (de XC4003E) tot een 56?56 matrix (de XC4085XL) 11. Om dit array van logic blocks liggen de I/O cellen, die de verbinding met de pinnen verzorgen. De XC4000 FPGA s zijn gebaseerd op SRAM technologie en verliezen dus hun programma zodra de voedingsspanning uitvalt. Dit betekent dat ze steeds opnieuw geprogrammeerd moeten worden. Dit kan via een apart EPROM dat bij de FPGA in het systeem gezet wordt, of bijvoorbeeld via een programmeeradapter die met een PC verbonden wordt. Door de op SRAM gebaseerde structuur kunnen de logic blocks ook als geheugen gebruikt worden. De geheugengrootte is dan maximaal 3200 bits bij de XC4003E tot 100 kbits bij de XC4085XL. De XC4000E/X FPGA s zijn te verkrijgen met kloksnelheden tot 80 MHz. Intern kunnen ze snelheden halen van 150 MHz. De XC4003E is verkrijgbaar in versies tot maximaal 80 user-i/o pinnen, de XC4085XL tot 448 user-i/o pinnen. De logic blocks (door Xilinx CLB s genoemd, Configurable Logic Blocks) van de XC4000 zijn gebaseerd op look-up tables (LUT s). Een LUT is een 1 bit breed geheugenblokje, waarbij de ingangen als adreslijnen werken. Een LUT met K ingangen heeft een geheugencapaciteit van 2 K? 1 bit en kan zijn uitgang voor iedere combinatie van zijn ingangen anders schakelen, afhankelijk van hoe hij geprogrammeerd is. De CLB s van de XC4000 bevatten twee LUT s met ieder vier ingangen (F1-F4 en G1-G4), waarvan de uitgangen weer als invoer dienen van een derde LUT, samen met een extra ingang (Figuur 6.5). Figuur 6.5 Xilinx XC4000 Configurable Logic Block. Verder bevat een CLB twee flip-flops, die afhankelijk van de control lijnen C1-C4 met de LUT s verbonden worden. In totaal heeft een CLB 13 ingangen en 4 uitgangen. Bij iedere user-i/o pin hoort een I/O cel. Deze I/O cellen kunnen geprogrammeerd worden voor input, output en bi-directionele signalen en hebben programmeerbare pull-up en pull-down weerstanden. Om de CLB s met elkaar te verbinden wordt een 2-dimensionale structuur van verticale en horizontale kanalen gebruikt, de interconnect structuur. Om het hele array - 28 -

ligt een connectie-ring om de logic blocks met de I/O cellen te verbinden. De kanalen van de interconnect structuur bestaan bij de XC4000E uit korte metalen verbindingen tussen naast elkaar liggende CLB s (single lines, 8 per kanaal), verbindingen met een dubbele lengte, die dus een CLB overslaan (double lines, 4 per kanaal) en verbindingen die de hele chip oversteken (long lines, 6 per kanaal). Deze verbindingen vormen tri-state bussen waar de CLB s mee verbonden zijn. De single en double lines worden op de kruispunten verbonden via een programmeerbare switch matrix. Het voordeel van deze methode is dat verschillende CLB s data op de bus kunnen zetten. Een nadeel is, dat in iedere matrix de data een kleine vertraging krijgt en dat dus signalen die over verschillende afstanden vervoerd moeten worden, een verschillende vertraging krijgen. De timing is hierdoor niet te voorspellen voordat het te implementeren programma door de compiler over het IC is verdeeld, hoewel deze verdeling wel enigszins te sturen is. 6.4. De Vergelijking Bij het programmeren van de IC s op de testborden is er uitgegaan van een implementatie met een aantal registers. Deze registers kunnen via de EPP interface met een adres cycle worden geselecteerd, waarna er met data cycles gegevens mee kunnen worden uitgewisseld. De registers zullen door de compiler op een bepaalde manier in de IC s geplaatst worden. Bijvoorbeeld zoals in Figuur 6.6 en Figuur 6.7. Figuur 6.6 Registers in FPGA. Figuur 6.7 Registers in CPLD. Vanuit de EPP interface zullen de verschillende registers uitgelezen moeten kunnen worden. Wanneer bij de FPGA een register uitgelezen moet worden, worden door de multiplexers de logic blocks van het juiste register met de interconnect bus verbonden. Bij het lezen van een ander register wordt het eerste register van de bus losgekoppeld en het andere register verbonden. Bij de CPLD is het lastiger om alle register met de EPP interface te verbinden. Bij een verdeling van de registers als in Figuur 6.7, moeten alle bits van alle registers via de verschillende connectie structuren verbonden worden. Hierbij vormt de capaciteit van de Block Interconnect en van de Segment Interconnect al snel een beperking. Er kan wel iets geoptimaliseerd worden door data via andere blokken te laten lopen, maar de capaciteit blijft een probleem. Bij het compileren bleek dan ook dat niet de capaciteit van de PAL blokken de beperking vormde, maar de capaciteit van de connectie structuren. Het heeft dan ook niet veel zin om grotere uitvoeringen van de MACH te gebruiken. - 29 -