PCI Ontwikkelplatformen Jan Genoe KHLim In dit deel bespreken we de verschillende ontwikkelplatformen die ter beschikking staan om een PCI kaart te ontwikkelen. 1
Ontwikkelplatformen van PCI kaarten Gebruik makende van Standard PCI Chipsets ASIC cores Fixed FPGA cores Modulaire FPGA cores met een open backend interface. 2
Gebruik makende van Standaard PCI Chipsets Origineel was dit de enige mogelijkheid Verschillende IC van verschillende fabrikanten op de markt AMCC, PLX, Tundra, V3, en andere Vendor ID ligt vaak al vast, Device ID kan aangevraagd worden bij deze fabrikant. We kunnen gebruik maken van een PCI IC die ontwikkeld is als een algemene interface naar de PCI bus. We zullen hierbij natuurlijk moeten werken volgens de normen en het protocol dat deze IC gebruikt voor zijn backend bus. 3
Ontwikkeling met PCI chipset devices: Processor Wanneer je schrijft naar een bepaald basisadres, wordt de data in een FIFO opgeslagen. De processor (of de bus op de kaart) kan deze aan zijn tempo eruit halen. Er is een FIFO voorzien in de 2 richtingen Wanneer je schrijft naar een ander basis adres wordt de data via DMA in een bepaald deel van het kaartgeheugen opgenomen. In de meeste gevallen zal deze backend bus geïmplementeerd zijn als een processor bus. Dit kan bijvoorbeeld een 8 bit of 16 bit brede data en adres bus zijn van een Motorola processor (68HC11), maar ook eender welke andere processor. Deze processor verwerkt dan de data van een naar de kaart aan zijn eigen snelheid, volgens zijn eigen code. Deze processor heeft natuurlijk ook geheugen beschikbaar. Vaak zal op een dergelijke IC ook nog een DMA unit voorzien zijn zodat de PCI interface rechtstreeks in het geheugen kan schrijven. 4
Hoe bepalen we de inhoud van de configuratie ruimte? De inhoud van de configuratieruimte kan bijvoorbeeld opgeslagen worden in een seriële nonvolatile RAM (EEPROM) geheugen dat geladen wordt bij het opstarten De configuratie ruimte van zo een standaard PCI IC kan natuurlijk niet op de juiste wijze door de IC fabrikant geïmplementeerd worden. Daarom is er meestal voorzien dat deze wordt opgeladen bij het opstarten vanuit een EEPROM. 5
Ontwikkeling met PCI chipset devices: PLD Diezelfde IC hoeft niet noodzakelijk met een processor gebruikt te worden. Er kan een CPLD of een FPGA geprogrammeerd worden die de aangeboden data van de backend bus afhaalt en de nieuwe data aan de backend bus doorgeeft. Deze component geeft deze data dan weer verder door aan de toepassing van de gebruiker. Dit heeft het voordeel dat deze PLD eenvoudig kan geprogrammeerd worden, en dus niet groot hoeft te zijn. Op de backend bus hoeft enkel maar het volgende voorzien te worden: Het gelijktijdig lezen van data en adres en deze doorgeven Het gelijktijdig schrijven van data en adres. De PCI chipset voorziet het gehele PCI protocol. Je moet je hierbij dan wel neerleggen bij de keuzes die door deze IC gemaakt werden. Er bestaan ook verschillende ASIC fabrikanten die een bouwblok met gelijkaardige functionaliteit als de PCI chip-set ter beschikking stellen aan diegenen die hun technologie wensen te gebruiken voor het maken van een ASIC. Dit bouwblok wordt dan als "black box" ter beschikking gesteld. Er worden geen details over de implementatie. De gebruiker kan dan de rest van zijn IC lay-outen en aansluiten op de back-end bus. Er kan dan een oplossing bekomen worden die volledig in een IC is opgenomen. 6
Vaste FPGA PCI core Als derde optie kan er gebruik gemaakt worden van een vaste PCI core. Deze core heeft dan dezelfde functionaliteit dan de eerste optie: zij voorziet een vaste backend interface. Meestal wordt deze door de IC fabrikant "post synthese" (gratis) ter beschikking gesteld. Vaak vullen zij ongeveer de helft (of minder) van een daartoe voorzien FPGA. Deze postsynthese vorm houdt rekening met de specifieke hardware en wordt ook in een vorm eigen aan de specifieke hardware ter beschikking gesteld. Hierdoor kan ze onmogelijk gebruikt worden op FPGA's van concurrenten of aangepast worden aan eigen eisen. Het overblijvende deel van de FPGA kan dan door de gebruiker ingevuld worden. Hierdoor kan er ook een compacte oplossing bekomen worden. 7
Xilinx PCI core De gebruiker heeft het krachtigste ontwikkelplatform indien hij de volledige code (in VHDL) van de PCI interface ter beschikking krijgt. Verschillende fabrikanten bieden een dergelijke core aan, tegen betaling. Deze code is dan grondig getest en wordt dan regelmatig ge-update. Een aantal universiteiten heeft ook een PCI core, maar deze is veel minder goed getest. Deze methode levert de efficiëntste en de krachtigste implementatie op. Hierboven tonen we de verschillende bouwblokken die in de Xilinx PCI core aanwezig zijn. De initiator state machine is natuurlijk alleen nodig indien het de implementatie van een PCI-master betreft. We overlopen hierna deze verschillende bouwblokken. 8
Bouwblokken: 1 pariteitsgenerator/controle Controlleert de even pariteit op de AD-bus (Address-data bus) CBE (Command/Byte enable) PAR Een fout wordt gerapporterd in PERR- (indien het een data pariteitsfout is) SERR- (indien het een address pariteitsfout is) Als er data binnenkomt wordt de pariteit gecontroleerd en indien er fouten zijn worden deze gerapporteerd. Data die naar buiten gaat krijgt een pariteitsbit mee. 9
Bouwblokken: 2 Target state machine Produceert de signalen TRDY STOP DEVSEL Hoge performantie nodig One hot encoding Continue bursting (zero wait state) Deze FSM moet zeer snel op inputs kunnen reageren, omdat anders de prestaties van de bus sterk gaan dalen. 10
Bouwblokken: 3. Initiators state machine Moet enkel voorzien worden als het een PCImaster betreft. Ook hier is een zeer snelle FSM nodig. De geproduceerde signalen zijn REQ FRAME IRDY 11
Bouwblokken: 4. PCI configuratie ruimte De gehele functionaliteit van de standaard PCI configuratieruimte wordt hierin voorzien en kan door de gebruiker naar zijn wensen aangepast worden. 12
Bouwblokken: 5. Gebruikers toepassing Hierin kan de toepassing van de gebruiker geïmplementeerd worden. 13