PROCESSORER I FPGA Komponenter Integrera RTOS med FPGA-processorer Konfigurerbara kärnor blir allt vanligare i inbyggda system. Aaron Spear och Phillip Walker från Mentor Graphics visar här hur man med en kombination av automatiskt konfiguration av operativsystemet Nucleus och avancerad debuggning med EDGE kan ge fullt stöd för både PowerPC- och MicroBlaze-baserade FPGAsystem. Fig 2. Komponenter från Nucleus kan konfigureras från EDK. Fig 3. Nucleus EDGE build-parametrar för MicroBlaze GNU. Fig 4. Fel i källkoden visas i konsollen. Fig 5. MicroBlaze-register 42 FPGA-baserade inbyggda system innebär många fördelar såväl som nya utmaningar för systemarkitekter. Den största fördelen är ett snabbare designflöde som gör det möjligt att gå från design till färdig produkt på kortare tid. Med ett snabbare flöde är det viktigare än någonsin att hårdvara och mjukvara är synkroniserade genom hela designcykeln. Mentor Graphics har utvecklat en version av ”Nucleus Embedded Software suite” som är integrerat med Xilinx Embedded Development Kit (EDK). Detta innebär en tät integration av mjukvarusystemen i FPGAdesignflödet. EDK är baserat på automatgenererad kod som är mycket flexibel. Genom att utnyttja den här funktionaliteten kan Nucleus integreras i FPGAdesignflödet på ett sätt som inte har varit möjligt tidigare. Nucleus embedded software suite för Xilinx FPGA system inkluderar ett komplett verktygsset för utveckling och debuggning av hela systemet med hjälp av den Eclipse-baserade EDGE miljön. Den underliggande Xilinx-teknologin är ”Microprocessor Library Definition” (MLD). Den gör det möjligt att automatiskt konfigurera och generera ”Board Support Packages” (BSPs). Denna unika metod möjliggör för ”Nucleus Embedded Software suite” att konfigurera sig för FPGA-systemet som är skapat med EDK. Detta eliminerar behovet av att manuellt göra om porteringen då minnesmap och periferienheter ändras i hårdvarudesignen. EDK använder sig av två strukturer för att lagra hård- och mjukvarurelaterade inställningar. Alla hårdvarurelaterade inställningar sparas i MHS- filen (mi- Fig 1. Dataflöde i Xilinx EDK. croprocessor hardware specification), medan mjukvarurelaterade inställningar sparas i MSS-filen (microprocessor software specification). Dessa filer bildar en databas som andra verktyg i Xilinx-systemet har tillgång till. Den genererade komponenten, definierad i en TCL-fil, tar hårdvaruinformation från MHS filen och användarinformation från MLD filen och genererar de nödvändiga filerna med korrekta parametrar. En del av TCL-filen är Nucleus-specifik och genererar information som används av Nucleuskärnan för att stödja en lång rad av hårdvarukonfigureringar. Nucleus Plus kärnan konfigureras med avseende på: • Antal och typ av periferienheter • Minnesmapinformation • Minnesmappade register • Konfigurering av timers • Konfigurering av interrupt controller Xilinx erbjuder två olika processorer till sina FPGA-kretsar: En ”hård” PowerPC 405 och en ”mjuk” MicroBlaze. Nucleus har stöd för båda dessa processorer. När processortyp valts och systemet konfigurerats väljs Nucleus i en rullgardinmeny. De olika komponenterna kan enkelt konfigureras från användargränssnittet. Se fig 2. När Nucleus är konfigurerat för systemet är det enkelt att generera ett BSP (Board Support Package). Välj ”Generate Libraries and BSPs” från Tool-menyn i EDK. Detta kommer att generera korrekta bibliotek som Nucleus behöver för det nydesignade systemet. Nu är hårdvaran definierad och Nucleus Plus konfigurerat för att köra på den nya plattformen. Men hur gör vi med mjukvaruutvecklingen? Mentor Graphics erbjuder den Eclipse-baserade EDGE-utvecklingsmiljön, som har stöd för JTAG-debuggning av både PowerPC- och MicroBlaze-processorerna. EDGE vidareutvecklar Eclipse-plattformen för multicore-, multi-process- och multithread-debuggning. Den kan installeras fristående eller integrerat med Platform Studio SDK för att tillhandahålla avancerad debuggning och projektstyrning. EDGE inkluderar finesser som: • Full multi-core/multi-process/ multithread-debuggning med stöd för synkroniserade händelser på flera kärnor samtidigt • Avancerat C-liknande skriptspråk (codelets) • Support för freeze-mode- och run-mode-debuggning (Beroende på OS och hårdvara) • ”Kernel awareness” * Stöd för ett stort antal anslutningsboxar • Stöd för stort antal processorer • Realtidstrace • Stöd för profilering EDGE tillhandahåller en kraftfull bygg- och projektmiljö. Det är en miljö som kan användas för vilket verktyg som helst som transformerar en eller flera filer från ett format till ett annat, exempelvis en kompilator som transformerar en C-fil till en objektfil eller en länkare som transformerar N st objektfiler till en exekverbar fil. Det går bra att integrera nya verktyg i EDGEmiljön genom att skriva en enkel XML-beskrivning. Idag stöds 32 olika verktyg, bl a Xilinx GNU för både PowerPC- och MicroBlazeprocessorerna. När EDGE används tillsammans med traditionella processorer är användaren ansvarig för att skapa och underhålla det BSP (Board Support Package) som skall användas. En stor fördel med Nucleus integration med EDK är att ett BSP genereras automatiskt, vilket gör det enkelt att underhålla. När hårdvarudesignen är färdig och ett BSP är genererat genereras också EDGE Target Support Package. Detta används sedan till att bestämma inställningar för verktyg som används för att skapa applikationer och för att hålla reda på minneslayout och typer av periferienheter vid debuggning. EDGE tillhandahåller också ett kraftfullt användargränssnitt för att ändra kompilatorinställningar för ett projekt eller specifika filer. Där kan alla inställningar ändras samt information om kommandon och tillåtna argument och flaggor erhållas. Denna information behöver då inte letas fram från svårbegriplig kompilatordokumentation. Givetvis kan traditionella argument på kommandoraden också användas. Se Figur 3. EDGE tillhandahåller en ”context-sensitive” editor för C/C++ och assembler. Den har följande egenskaper: * Konfigurerbar syntaxmarkering (färger kan ändras) • Högerklick för deklaration/ ELEKTRONIK I NORDEN 1/2007 PROCESSORER I FPGA Forts nästa sida definition av funktionsanrop • Variabelvärden visas när musen förs över dem under debuggning. Egna script som visar annan information kan även definieras. • ”Code completion” för både funktioner och makron Fel i källkoden visas i konsollen. Vid klick på dessa visar editorn var felet är. Editorn visar alla rader med fel i källkoden genom speciella ikoner. Se fig 4. För Nucleus PLUS-applikationer, kan EDGE stödja run-modedebuggning, där individuella processer kan debuggas, medan resten av systemet fortsätter att gå. Då används en serieport, Ethernet-anslutning eller Xilinx JTAG UART. För MicroBlaze stödjer EDGE debuggning genom XMD (Xilinx Microprocessor Debugger). Även för PowerPC stöds XMD men vid användning av en dedicerad JTAG-kedja kan även Abatrons BDI2000 och MacCraigor Systems On Chip Demon användas. Vid anslutning med hjälp av XMD kan en ChipScope Pro användas för att debugga hårdvaran samtidigt som mjukvaran debuggas med EDGE. I ChipScope Pro användargränssnitt kan signaler i hårdvaran studeras på samma sätt som i en logikanalysator. ChipScope kan konfigureras att stanna processorn när t ex ett tillstånd förändras i en periferienhet. När detta sker synkroniserar EDGE och det syns var i källkoden man befinner sig. EDGE innehåller många speciella egenskaper för debuggning av inbyggda system. I registerfönstret visar processorns register grupperade samt minnesmappade periferienheter. Bitar i register som är satta visas tydligt och kan kontrolleras individuellt. I fig 5 visas att ”Exception Enable” är bit 6 i MSR och att den för tillfället inte är satt. Bitar som förändras från tidigare steg är rödmarkerade. En annan fördel med EDGE är stödet för hårdvarubrytpunkter. I en MicroBlaze-design kan åtta stycken hårdvarubrytpunkter kopplas till programräknaren samt åtta stycken (fyra + fyra) kopplas till läsning och skrivning av minnesadresser. I EDGE kan dessa båda typer av brytpunkter sättas grafiskt samt hårdvarubrytpunkter användas för att stega i programvara som ligger i ROM. - Antalet MicroBlaze-kärnor som kan användas i en design är bara begränsat av storleken på FPGAkretsen. MicroBlaze debugmodul kan samtidigt stödja åtta stycken kärnor. I EDGE är det möjligt att skapa synkroniserade grupper av olika kärnor. När en av dessa kärnor stoppas stannar alla kärnor i gruppen. I dagsläget har inte Xilinx något IP block som stödjer konfiguration av synkron kontroll av flera kärnor. Dock är det relativt enkelt att implementera en sådan själv. Knyt ihop ett minnesmappat register med MUX-logik och MB_HALT pinnen (som indikerar att en kärna är i debugmode) och DBG_STOP pinnen (som kan tvinga en kärna till debugmode). När en kärna i gruppen endera når en brytpunkt eller får ett avbrott stannar den. I EDGE kan då en ”codelet” skapas som sätter det minnesmappade registret och detta leder till att resterande kärnor stannas. ⁄ EDGE stöder ett skriptspråk som kallas ”codelets”. Syntaxen är standard ISO/ANSI C, med några få undantag. Förenklat är codelets skript som exekverar i debuggern, men med full visibilitet och kontroll över målmiljön. Från en codelet kan register, minne och variabler nås såväl som funktioner. Filer och sockets kan läsa och skriva och ”channel viewers” kan öppnas i debuggern för att sedan exekveras. Dessa kan • Binär datavisare Kanaler kan också användas för att till exempel åskådliggöra data från profilering eller run-modedebuggning. EDGE kernel awareness gör det möjligt att se vilket tillstånd operativsystemet är i samt sätta brytpunkter i individuella processer. Exempelvis syns vilka processer som är ”waiting”, ”ready-to-run” och ”running”. Idag finns kernel awareness inbyggt för Nucleus PLUS. Dock finns det möjlighet för användare att själva konfigurera sin egen kernel awareness. Detta kan göras för ett tredjeparts RTOS eller ett egenutvecklat RTOS. , , , , Översatt och bearbetad av Jonas Norlander, Mentor Graphics (Scandinavia) Ab. Fig 6. Kernel awareness gör det möjligt att se operativsystemets startas från kommandoraden eller när en brytpunkt nås. Codelets är tänkt att vara en teknik som gör det möjligt att nå in i hårdvaran på ett sätt som annars är omöjligt. Några användningsområden där kunder har använt sig av codelets: • Debuggning av kortinitiering • Komplexa brytpunkter • Kundanpassad validering av HW/regressionstestning • Virtuella I/O konsoller • Enkel ”kernel awareness” • ”SmartWatch” - möjlighet att definiera en codelet som definierar vilken information som ska visas är man tittar på en datastruktur. EDGE innehåller en möjlighet att abstrahera kommunikation som kanaler. Vilken byteström som helst kan göras till en kanal. Filer, ”sockets” och serieportar kan alla modelleras som kanaler. Dessutom kan man i användargränssnitt skapa ”channel viewer plug-ins” som grafiskt kan presentera data som kommer från kanalerna. EDGE har följande kanaler inbyggda: • Textkonsoll I/O • VT-100-kompatibel I/O-konsoll • Diagramvisare som kan plotta värden över tiden. • Windows mediaspelar plug-in (spelar MP3, MPEG video) ELEKTRONIK I NORDEN 1/2007 43