Reguliere expressie houdt FPGA- en bordontwerp bij elkaar
8 juni 2010
FPGA’s hebben vandaag de dag zo veel aansluitpunten dat de verbinding met het PCB al snel onoverzichtelijk wordt. Als zowel de FPGA-toepassing als het PCB dan ook nog gelijktijdig worden ontwikkeld, ligt het gevaar voor aansluitfouten op de loer. HDL Works ontwikkelde hiervoor de IO Checker, een tool die de signaalnamen uit beide ontwerpen met elkaar vergelijkt. Jaap Mol van Thales Nederland deelt zijn ervaringen met het gereedschap.
Moderne FPGA’s hebben tot vijftienhonderd bruikbare pinnen, maximaal een millimeter ruimte tussen de aansluitingen en tientallen seriële interfaces met bitrates tot boven de 10 Gbit/s. Ze vereisen een scala aan nauwkeurige voedingsspanningen om überhaupt te kunnen functioneren. Dat maakt het er voor de designer niet makkelijker op. Ontwerpfouten met de huidige high density interconnect-PCB’s (HDI) en ball grid array-verpakkingen (BGA) zijn meestal niet meer met eenvoudige reparatiebedrading te corrigeren.
IO Checker vergelijkt de signaalnamen in de netlist van de PCB met de pintoewijzing van de FPGA en meldt afwijkingen. De waarschuwingen worden gesorteerd op volgorde van potentiële problemen. In dit voorbeeld is eenvoudig te zien dat gpio_fpga verkeerd om is aangesloten, signalen tcl_mcp1<5> en tcl_mcp9<5> niet zijn verbonden met het PCB en dat de signalen tx_disable_sfp0 en tx_fault_sfp0 zijn verwisseld.
Het is tijdens het ontwerp dus zaak dat de bord- en FPGA-designs met elkaar in overeenstemming zijn. Zaken als routing, timing-beperkingen en signaalintegriteit zorgen vaak later in de implementatiefase van het PCB voor wijzigingen van de initiële pintoewijzing. Ook kunnen in de FPGA timing-eisen niet haalbaar blijken tijdens de implementatie, waardoor een wijziging in de pintoewijzing nodig is. Deze veranderingen vanuit het PCB- of FPGA-ontwerp kunnen gemakkelijk leiden tot inconsistentie tussen de PCB en de FPGA’s.
Handmatige controle vereist echter het uitpluizen van schema’s en bestanden en is daardoor geestdodend, foutgevoelig en tijdrovend. Terwijl de controles bvendien eigenlijk in meerdere fasen van een project noodzakelijk zijn. De meest complexe PCB’s die we binnen de afdeling Processing van Thales Nederland ontwerpen, zijn opgebouwd uit achttien lagen en bevatten tot zesduizend componenten. Ze gebruiken enkele tientallen LVDS-paren op 500 Mbit/s en andere snelle seriële interfaces op 2,5 Gbit/s.
Specifiek voor dit probleem heeft HDL Works uit Ede een tool ontwikkeld: IO Checker. Het gereedschap kan worden ingezet om de overeenkomst tussen PCB- en FPGA-signalen eenvoudig en efficiënt te controleren.
FPGA-project | Verpakking | Fouten | IO Checker (uren) | Manuele controle (uren) |
QTRX | BGA 256 | 0 | 0,25 | 4 |
DRDX3 | BGA 484 | 3 | 0,5 | 9 |
RX32 | BGA 1148 | 4 | 1 | 24 |
Crisp | BGA 1152 | 4 | 1,5 | - |
Thales heeft IO Checker bij verschillende ontwikkelprojecten ingezet. Naarmate het aantal pinnen op een FPGA toeneemt, stijgt ook de controletijd. Het is echter duidelijk dat het inzetten van de tool deze tijd flink terugbrengt, ook bij de grotere pincounts.
Platte tekst
Doorgaans worden de FPGA-applicaties en het PCB parallel aan elkaar ontwikkeld. Als eerste stap in het FPGA-ontwerp maken we een zero design, een ontwerp waarin alleen alle I/O-signalen worden gedefinieerd. Hiermee kan de pintoewijzing worden vastgesteld en vervolgens getest in Altera Quartus II of Xilinx ISE. Deze ontwikkelpakketten van de FPGA-leveranciers zijn leidend, omdat er voldaan moet worden aan een groot aantal voorwaarden zoals I/O-type en -timing en bankspanningen.
Voor het bordontwerp geven we de FPGA’s ondertussen weer met generieke, applicatieonafhankelijke symbolen. We gebruiken maximaal twee FPGA-I/O-banken per symbool en aparte secties voor power, configuratie, JTag en eventuele multigigabit zendontvangers.
De kern van de IO Checker-verificatie is het vergelijken van twee lijsten met signaalnamen. De ene lijst bevat de signalen van het FPGA-ontwerp en wordt gegenereerd door de FPGA-place-en-route-software. De andere lijst bevat de namen van de PCB-signalen die zijn aangesloten op de FPGA en wordt geëxtraheerd uit de PCB-netlist. Afwijkingen tussen die twee duiden op een mogelijke fout.
Het zou ideaal zijn als beide lijstjes een-op-een overeenkomen. Dan is het een kwestie van afstrepen met bijvoorbeeld een spreadsheet of simpel TCL-script. Helaas lopen namen in beide ontwerpen uiteen. Er zijn immers twee databronnen doordat het PCB parallel wordt ontworpen aan de FPGA. Ook design rules kunnen verschillen introduceren. De praktijk leert dat daardoor slechts vijf tot vijftien procent van de signalen dezelfde naam heeft in beide designs.
PCB en FPGA-applicaties worden parallel aan elkaar ontworpen, waardoor de pintoewijzingen uiteen kunnen gaan lopen. Door dat via een tool te controleren, komen ontwerpfouten snel boven water.
Om die namen toch met elkaar te kunnen vergelijken, gebruikt IO Checker reguliere expressies, een populaire methode om patronen te vinden in platte tekst (zie kader). De tool heeft alleen de pinfile van het FPGA-pakket en de netlist van het schema-ontwerp nodig. Daardoor ondersteunt het zowel een brede reeks aan PCB-ontwerppakketen als een groot scala aan FPGA-devices. Bovendien is deze verificatieaanpak in te passen in elke designflow.
Wanneer een IO Checker-project eenmaal is gedefinieerd, kan eenvoudig een nieuwe versie van de FPGA-definitie of netlist worden ingelezen. Een check kost slechts enkele minuten. Na elke wijziging in het ontwerp kan er dus snel en eenvoudig een controle worden uitgevoerd.
FPGA-signaal | PCB-signaal | FPGA-rule | PCB-rule |
iEthernetInit | EthernetInit | i(\w+) | $1 |
AddressBus<0> | DRAM_ADR0 | AddressBus<(\d+)> | DRAM_ADR$1 |
GPIO_1<0> | GPIO_ONE_<1> | (\w+)_1<(\d+)> | $1_ONE_$2+1 |
IO Checker gebruikt twee reguliere expressies om de naam van het FPGA-signaal te vertalen naar de naam van het PCB-signaal. Wanneer beide expressies matchen, worden de twee signalen verondersteld gelijk te zijn.
Reguliere expressies zijn een veelgebruikte notatiemethode om patronen in platte tekst te vinden en eventueel te vervangen. De notatie bevat bijvoorbeeld methoden voor het matchen of juist uitsluiten van specifieke karakters en karaktergroepen en staat een variabel aantal hiervan toe. Ook is het mogelijk te refereren naar gevonden termen: $1 refereert naar de eerste expressie tussen haakjes, $2 naar de tweede, enzovoorts. Daardoor is het niet nodig om voor elk signaal een regel op te stellen, maar kunnen de generiek patronen worden gebruikt.
Hierboven staan drie voorbeelden om de FPGA-signalen volgens een reguliere expressie om te zetten naar een PCB-signaal.
Gemiddeld zijn er tien tot twintig regels nodig voor een verificatie. IO Checker is in staat regels voor veel voorkomende patronen automatisch te genereren. Zelfs bij gebruik van grote FPGA’s kan zo’n tachtig procent van de benodigde regels automatisch worden gegenereerd.
Voedingsspanningen
We hebben IO Checker binnen onze afdeling nu toegepast in verschillende projecten. In Tabel 1 zijn de resultaten hiervan weergegeven. De handmatige check werd aan het eind van elk project uitgevoerd als extra controle. Het valt direct op dat de tijd voor handmatige verificatie sterk toeneemt als de FPGA meer pinnen bevat.
Duidelijk is ook dat IO Checker een grote tijdsbesparing oplevert. Daarnaast zorgt de tool voor een grotere betrouwbaarheid en wordt het veel eenvoudiger om wijzigingen in de pintoewijzing op meerdere momenten te controleren. Als extraatje controleert de tool of de voedingsspanningen op de juiste waarden zijn aangesloten.
De ervaring leert dat minder dan tien procent van het aantal signalen een waarschuwing oplevert. In deze projecten zijn we geen fouten tegengekomen die een herontwerp van het PCB noodzakelijk hadden gemaakt. Het voordeel van de IO Checker zou dan nog groter zijn geweest. Daarom heeft Thales besloten om de tool op te nemen in de standaard toolflow.
Jaap Mol is technical authority electronics design bij de afdeling Processing van Thales Nederland.
Jaap Mol
Terug naar overzicht