• 16/05/2012

Automatisch genereren van programmacode uit simulatiemodellen - Artikel

Nieuwe manieren om automatisch gegenereerde programmacode voor vluchtsimulatie te verifiëren met behulp van Simulink en Embedded Coder voor de doelstellingen van de DO-178-norm.

Lees verder

Productnieuws

Het automatisch genereren van programmacode uit simulatiemodellen is een belangrijke ontwikkelactiviteit in modelgebaseerd ontwerpen waarmee tijd en moeite worden bespaard die teams normaal gesproken besteden aan handmatig programmeren. Voor een geslaagde implementatie in een krachtig embedded systeem moet extreem efficiënte programmacode worden geproduceerd. Het doel van dergelijke efficiënte programmacode is onder meer minimaal gebruik van het geheugen en maximale snelheid van de uitvoering. Voor een geslaagde implementatie in militaire en defensiesystemen moet de programmacode bovendien buitengewoon grondig kunnen worden geverifieerd. Bij de verificatie van programmacode wordt nagegaan of de code voldoet aan geldende eisen en normen.

In dit artikel wordt beschreven hoe de efficiëntie van code kan worden gemeten en hoe programmacode kan worden geverifieerd met behulp van de MATLAB- en Simulink-productserie Release 2011b, die is voorzien van Embedded Coder voor het genereren van programmacode voor vluchtsimulatie. De beschreven ontwikkelings- en verificatieactiviteiten moeten voldoen aan de DO-178B-norm en de toekomstige vereisten van DO-178C, met inbegrip van het supplement Model-Based Development and Verification dat volgens planning zal worden uitgegeven bij de update DO-178C. Niet alle software of DO-178-vereisten worden onder de loep genomen; de focus van dit artikel ligt op nieuwe technologie. Voor de beschreven verificatietools zijn Qualification Kits beschikbaar.

Broncodebeoordeling
Code-efficiëntie
De meting van code-efficiëntie kan ruwweg in twee categorieën worden ingedeeld. In de eerste categorie wordt het geheugengebruik gemeten in termen van RAM, ROM en stackgrootte; in de tweede categorie worden het aantal of de snelheden van de uitvoeringscycli gemeten. Met behulp van Embedded Coder kunnen softwareontwikkelaars de benodigde hoeveelheid geheugen voor de gegenereerde programmacode analyseren en optimaliseren door een rapport met codemeetwaarden op te stellen nadat de programmacode is gegenereerd. Dit rapport bevat het aantal coderegels en de globale RAM- en stackgrootte op basis van een statische analyse van de broncode en kennis van de kenmerken van de beoogde hardware, zoals de woordlengte van integers. De analyse is statisch, omdat er geen rekening wordt gehouden met de kruiscompilatie en uitvoering van de programmacode. Voor softwareontwikkelaars is dit een snelle methode om het geheugengebruik te optimaliseren op basis van de broncode, bijvoorbeeld door verschillende gegevenstypen uit te proberen of de logica in het model aan te passen. Maar voor de volgende analyse- en optimalisatiefase is de volledige reeks embedded tools nodig om het on-board geheugengebruik en de uitvoeringstijd te beoordelen, zoals hieronder wordt beschreven in Beoordeling van uitvoerbare objectcode.

Figuur 1: Static Code Metrics Report

Codeverificatie
Broncodeverificatie is sterk afhankelijk van codebeoordelingen en traceerbaarheidsanalyses van softwarevereisten. Met Simulink Code Inspector, een nieuw product van MathWorks, wordt automatisch een structurele analyse van de gegenereerde broncode uitgevoerd en wordt beoordeeld of deze voldoet aan het eisenmodel op lager niveau. Met de inspectie wordt nagegaan of elke coderegel een bijbehorend element of blok in het model heeft. Ook wordt gecontroleerd of elementen in het model qua structuur equivalent zijn aan de bewerkingen, operatoren en de gegevens in de gegenereerde code. Vervolgens wordt een gedetailleerd traceerbaarheidsanalyserapport voor model-naar-code en code-naar-model gemaakt.

Figuur 2: Simulink Code Inspector Report

Verder wordt bij de broncodeverificatie onder meer gecontroleerd of de code voldoet aan industrienormen voor programmacode, zoals MISRA AC AGC: Guidelines for the application of MISRA-C:2004 in the context of automatic code generation. Met release R2011a is in Embedded Coder een doelstelling voor het genereren van programmacode geïntroduceerd waarmee ontwikkelaars de resultaten van de codegenerator op basis van de MISRA-C-norm kunnen beïnvloeden. De analysetools van MISRA-C kunnen vervolgens worden toegepast om de code te controleren. Zo wordt bijvoorbeeld met de codeverificatieproducten van Polyspace code voor MISRA AC AGC en MISRA-C:2004 geanalyseerd. Polyspace kan tevens bepalen of de programmacode runtimefouten bevat, zoals delen door nul en array-out-of-bound-uitzonderingen. Simulink Code Inspector met Polyspace kan worden gebruikt voor alle codeverificatiedoelstellingen in Tabel A5 van DO-178 die betrekking hebben op broncodeanalyse. Voor doelstellingen zoals de slechtst denkbare uitvoeringstijd zouden de uitvoerbare objectcode en aanvullende technieken en tools zoals de onderstaande moeten worden gebruikt.

Figuur 3: MISRA-C:2004 Doelstellingen voor het genereren van programmacode opgeven

Beoordeling van uitvoerbare objectcode
Code-efficiëntie
Simulink ondersteunt de verificatie van uitvoerbare objectcode met profileringsanalyses door middel van SIL-tests (Software-In-the-Loop) en PIL-tests (Processor-In-the-Loop). Met een SIL-test wordt de gegenereerde programmacode gecompileerd en uitgevoerd op de hostcomputer voor een snelle beoordeling van de uitvoering van de code met testgegevens van Simulink, dat dienst doet als testharnas. Met een PIL-test wordt van de gegenereerde programmacode via een kruiscompilatie uitvoerbare objectcode (EOC) gemaakt die wordt uitgevoerd op de daadwerkelijke vluchtprocessor of instructiesetsimulator, ook weer met Simulink als testharnas in-the-loop.

Embedded Coder ondersteunt PIL-tests voor een bare-board- of RTOS-uitvoering op een willekeurige embedded processor met aanpasbare API’s en referentie-implementaties. In één voorbeeldimplementatie die beschikbaar is om te worden bekeken en gedownload wordt gebruikgemaakt van Green Hills MULTI IDE en Integrity RTOS met een Freescale MPC8620-processor.

Figuur 4: Uitvoerbare objectcode verifiëren met een PIL-test

Tijdens de PIL-test wordt een codeprofieluitvoeringsrapport gegenereerd om knelpunten te identificeren en het ontwerp te optimaliseren, bijvoorbeeld met technologieën voor codevervanging waarmee SIMD- (single instruction, multiple data) en IPP-optimalisaties (Intel Integrated Performance Primitives) worden vervangen door standaard gegenereerde ANSI/ISO C-code. MATLAB kan uit de uitvoeringsgegevens van het codeprofiel kaarten genereren voor nadere analyse. Volgens DO-178 en vergelijkbare normen is het vereist dat de complexe vluchtsoftware wordt geverifieerd op de complexe vluchthardware, waarbij PIL-tests een essentiële verificatiestap zijn voor systemen met een hoge integriteit.

Figuur 5: Profielen genereren van uitvoeringscycli met behulp van MATLAB

Codeverificatie
Met modelgebaseerd ontwerpen kunnen de op vereisten gebaseerde simulatietests voor verificatie van het model opnieuw worden gebruikt voor de SIL- en PIL-tests. Ontwikkelaars kunnen met de Simulink Simulation Data Inspector de invoergegevens van de modelsimulaties hergebruiken, en vervolgens de SIL- en PIL-testresultaten vergelijken met de modelsimulatieresultaten om te zien of deze numeriek equivalent zijn.

Figuur 6: Simulatie- en PIL-testresultaten vergelijken met Simulation Data Inspector

DO-178B vereist ook een structurele dekkingsanalyse van de software, inclusief een Modified Condition/Decision Coverage (MC/DC), om te beoordelen of alle code tijdens de tests wordt geadresseerd. Simulink Verification and Validation biedt een analoog concept op het niveau van het model, Model Coverage, waarmee kan worden beoordeeld of het model volledig is uitgevoerd. De analyses van het model en de codedekking leveren mogelijke fouten in het ontwerp, de implementatie en het testen op. Met Simulink Verification and Validation kan een modeldekkingsanalyse worden uitgevoerd. In release R2011b is Embedded Coder geïntegreerd met LDRA Testbed voor codedekking en extra ondersteuning voor de DO-178-workflow.

Figuur 7: Model- en codedekking meten met Simulink Model Coverage en LDRA Testbed

Kortom, met modelgebaseerd ontwerpen kan automatisch vluchtcode worden gegenereerd die zowel efficiënt als gemakkelijk te verifiëren is op de niveaus van model, broncode en uitvoerbare objectcode. Als de ontwikkeling en verificatie van Simulink-modellen en simulatietests zo wordt georganiseerd dat modellen en tests kunnen worden hergebruikt om te voldoen aan de softwaredoelstellingen van DO-178B en DO-178C, kunnen bedrijven fors besparen op hun kosten en producten sneller op de markt brengen. Integraties en gepubliceerde API’s maken totaaloplossingen mogelijk met programma’s van derden die worden gebruikt in DO-178-ontwikkelingsprojecten. Simulink biedt naast deze verbeteringen van het softwareontwikkelingsproces nog extra voordelen, zoals ondersteuning voor systeemengineering en vergelijkbare normen (bijvoorbeeld ARP 4754), hardwareontwikkeling en vergelijkbare normen (bijvoorbeeld DO-254) bij gebruik met MathWorks-producten voor het fysisch modelleren van systemen, HIL-tests (hardware-in-the-loop) en het genereren van HDL-code voor FPGA’s.


***
MATLAB en Simulink zijn gedeponeerde handelsmerken van The MathWorks, Inc. Raadpleeg www.mathworks.nl/trademarks voor een lijst met meer handelsmerken. Andere product- of merknamen kunnen handelsmerken of gedeponeerde handelsmerken zijn van hun respectieve eigenaren.

Over de auteur:
Tom Erkkinen is Embedded Application Manager bij MathWorks. Hij leidt het initiatief van het bedrijf om te streven naar branche-acceptatie van technologieën voor het genereren van embedded programmacode. Voordat hij bij MathWorks in dienst trad, werkte Erkkinen bij Lockheed-Martin, waar hij uiteenlopende controlealgoritmen en real-time software ontwikkelde, waaronder spaceshuttlerobotica voor NASA JSC. Hij heeft in meer dan vijftien jaar honderden bedrijven geholpen bij de implementatie van modelgebaseerd ontwerpen met het genereren van embedded code. Erkkinen heeft een Bachelor-graad in Aerospace Engineering van de Boston University en een Master-graad in Mechanical Engineering van de Santa Clara University.

Voor meer informatie:
Bezoek www.mathworks.nl
Mathworks BV
Dr Holtroplaan 5-2e verd.
5652 XR Eindhoven
+31 (0)40 2156700

Over MathWorks
MathWorks is een toonaangevende ontwikkelaar van wiskundige software. MATLAB, ‘the language of technical computing’, is een programmeeromgeving voor algoritmeontwikkeling, data-analyse, visualisatie en numerieke berekeningen. Simulink is een grafische omgeving voor simulaties en modelgebaseerd ontwerpen van multi-domein dynamische en embedded systemen. Ingenieurs en wetenschappers maken wereldwijd gebruik van deze producten om de ontwikkeling van onderzoek en innovatie te versnellen in de automobielindustrie, lucht- en ruimtevaart, elektronica, financiële dienstverlening, biotechnologie en farmaceutische industrie, en andere industrieën. De producten van MathWorks worden daarnaast wereldwijd gebruikt als onderwijs- en onderzoeksinstrument op hogescholen en universiteiten. MathWorks werd opgericht in 1984 en telt meer dan 2.200 medewerkers in 15 landen. Het hoofdkantoor is gevestigd in Natick, Massachusetts, Verenigde Staten. Het Beneluxkantoor van MathWorks is gevestigd in Eindhoven.

Dit gesponsorde tekstBERICHT is een realisatie van:
Text 100
www.text100.nl



Bericht van de redactie: dit is een ingezonden mededeling, die mogelijk niet vrij is van commerciële invloeden. De verantwoordelijkheid voor de verstrekte technische en andere gegevens berust volledig bij de vermelde leverancier of fabrikant.

Wenst u ook een nieuw product in de markt te zetten, uit te pakken met een succesverhaal bij een klant, te inviteren voor een cursus, seminarie of event?
Klik hier.