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