Inom inbyggda system är det ofta nödvändigt att hitta kreativa lösningar för att hantera tekniska begränsningar, som brist på flyttalsstöd eller begränsade beräkningsresurser. Till exempel, i traditionell mjukvaruutveckling rekommenderas det generellt att undvika globala variabler. I inbyggda system, däremot, används globala variabler ofta som ett effektivt sätt att kommunicera mellan olika tillstånd i hierarkiska tillståndsmaskiner (FSM), vilket gör dem till ett snabbt och praktiskt verktyg för att möta realtidskrav. Samtidigt innebär detta att mjukvaran ofta blir mer komplex för att kunna hantera restriktioner som begränsad minneskapacitet eller frånvaron av flyttalsaritmetik, vilket är typiskt för enklare processorer i inbyggda system.
En av de vanligaste metoderna för att övervinna flyttalsbegränsningar i inbyggda system är användning av fastpunktarithmetic. Fastpunktarithmetic erbjuder en kompromiss mellan enkelheten i heltalsaritmetik och den komplexitet som krävs för att hantera bristande flyttalsstöd. För att kunna representera tal med decimaler används en fast mängd siffror för heltals- och decimaldelen av talet. Det är en effektiv lösning där hårdvarans begränsningar måste beaktas i designen av både mjukvara och hårdvara.
De flesta processorer som används i inbyggda system stöder inte flyttalsaritmetik, eller om de gör det, sker beräkningarna mycket långsammare än med motsvarande heltalsaritmetik. I dessa fall krävs det att designteamet noggrant väljer en fastpunktrepresentation som gör att systemet kan arbeta effektivt inom sina restriktioner, samtidigt som man får tillräcklig precision.
En fastpunktrepresentation definieras av två parametrar: den totala antalet siffror (N) och antalet siffror för decimaldelen (F). Exempelvis om en representation är (4,2), innebär det att talet består av fyra siffror, varav två är decimaler. På detta sätt kan exempelvis värdet 95.37 representeras som 9537 i (4,2)-formatet, där decimalpunkten är implicit.
För att hantera stora tal som inte får plats i den tilldelade bitlängden, kan negativa värden på F användas för att approximera värdet. Till exempel kan ett tal som 289963 representeras som 2899 i (4,-2)-format, vilket innebär att det är en approximation.
Vid addition, subtraktion och skalärmultiplikation är hantering av decimaler särskilt viktig. I exempelvis en butik där priser anges i dollar och cent kan det räcka med att använda fast punkt för att addera och subtrahera prisvärden. När två priser läggs samman, som t.ex. 99.99 och 99.99, om antalet tillgängliga siffror är fyra, kommer resultatet inte att kunna representeras korrekt eftersom summan blir 199.98, vilket inte får plats i fyra siffror. I sådana fall måste systemet hantera overflow och underflow noggrant för att förhindra fel i beräkningarna.
Vid multiplicering av två tal där båda har decimaler, t.ex. vid beräkning av den totala kostnaden för en varukorg med flera likadana artiklar, kommer resultatet att innehålla ett större antal decimaler än de ursprungliga. Här måste både antalet totala siffror och antalet decimaler beaktas för att den slutliga produkten inte ska överskrida tilldelad bitlängd.
För att förstå och korrekt implementera fastpunktarithmetic i inbyggda system är det avgörande att designteamet inte bara beaktar systemets fysiska och tekniska begränsningar, utan också noggrant planerar hur dessa begränsningar påverkar precisionen och exekveringstiden för de algoritmer som används. Ofta innebär denna process att teamet måste väga noggrant mellan extra mjukvarukomplexitet och hårdvarans begränsningar som kostnad, energi, minnesanvändning och storlek på kretsarna.
För att undvika problem med överflöd eller förlust av precision är det viktigt att när man arbetar med fastpunktarithmetic i inbyggda system också överväga hur siffrorna skiftas för att justera decimalpunkten mellan operationer. För exempelvis addering och subtraktion av två tal med olika antal decimaler, måste det tal med flest decimaler justeras för att få rätt resultat. På samma sätt kan felaktiga omvandlingar av decimalpunkten leda till att kritisk information går förlorad.
När man designar inbyggda system är det också viktigt att inte bara tänka på den aktuella applikationen utan också överväga framtida behov och potentiella förändringar i systemet. Fastpunktarithmetic kan verka enkel, men det kräver noggrant övervägande för att säkerställa att den valda lösningen är hållbar på lång sikt, särskilt när systemets krav förändras eller växer.
Hur FPGAs Används i Inbäddade System: Effektiv Implementering och Testning
FPGAs, eller Field-Programmable Gate Arrays, är kraftfulla verktyg som används för att implementera och testa inbäddade system. Deras flexibilitet gör det möjligt för ingenjörer att snabbt utveckla och testa prototyper av komplexa system utan att behöva åta sig den höga kostnaden och de långsamma processerna som är förknippade med traditionella ASICs (Application-Specific Integrated Circuits). FPGAs används ofta i tillämpningar som kräver snabb utveckling, hög anpassningsbarhet och låg produktionskostnad vid små till medelstora volymer.
FPGAs tillåter användning av en hierarkisk finitet tillståndsmaskin (FSM), där varje tillstånd beskriver en specifik operation i systemet. Ett exempel på detta är den kombinerade användningen av tillstånden "NOT-SENSING" och "SENSING", där "SENSING" är ett supertillstånd som kan innehålla deltillstånd som hanterar både normal drift och felhantering. Användningen av FSM-modellen gör det möjligt att organisera och visualisera komplexa system på ett mer överskådligt sätt, vilket underlättar både design och felsökning.
Ett typiskt användningsområde för FPGA i inbäddade system är att testa en design eller en del av en design innan mer kostsamma tillvägagångssätt som ASICs tas i bruk. Till exempel, i fallet med en autopilot som ska följa en vit linje på vägen, kan FPGA användas för att testa olika aspekter av systemet, såsom klockhastigheter, sensorer eller olika specifikationer för okända förhållanden. FPGA:s flexibilitet gör det möjligt för ingenjörer att snabbt ändra parametrar och testa designen under verkliga förhållanden, vilket ger värdefulla insikter som kan leda till förbättringar i det slutgiltiga systemet.
Förutom fördelarna med testning, kan FPGA även användas för att implementera delar av ett inbäddat system som inte kräver den fulla kapaciteten hos en ASIC. Genom att använda FPGA för att implementera enkla logiska funktioner, som AND/OR/NOT-gater, kan ingenjörer skapa effektiva lösningar som både sparar på kostnader och energi. När man däremot implementerar mer komplexa algoritmer kan FPGA bidra till att undvika användning av dyrare och strömkrävande processorer.
FPGAs används också i system där man förväntar sig att en produktionsvolym kommer att vara relativt låg, som i fallet med de brorelaterade system som beskrivs i vissa exempel. För dessa typer av problem är utveckling av ASICs ofta inte ekonomiskt försvarbart, och ingenjörerna väljer istället att specificera FPGA för att implementera lösningen. Även om FPGA:s kostnad kan vara högre per enhet jämfört med en ASIC, kan den totala utvecklingskostnaden fortfarande vara lägre om produktionen är liten.
En viktig fördel med FPGA:er är möjligheten att omprogrammera dem. Detta innebär att en ingenjör kan testa och modifiera en design snabbt, vilket är en ovärderlig funktion när designkraven förändras under utvecklingens gång. Efter att ha genomfört tester och utvärderat den bästa lösningen kan den slutliga designen skickas för produktion som en ASIC, om det skulle visa sig att den är mer kostnadseffektiv vid högre volymer.
Det är också viktigt att förstå att användningen av FPGA i det slutgiltiga systemet inte enbart handlar om kostnaden för FPGA:n, utan också om kostnaden för att programmera den. Detta kan vara en avgörande faktor när man överväger om man ska använda FPGA eller utveckla en mer permanent lösning med en ASIC. Men vid små volymer, eller när snabb prototypframtagning är viktig, är FPGA oftast den mest kostnadseffektiva lösningen.
När man arbetar med FPGA i inbäddade system måste man också beakta specifika detaljer i systemets funktion, som hur olika signaler ska bearbetas och vad olika tillstånd innebär för systemets drift. För att underlätta detta kan man använda sig av detaljerade tillståndstabeller som beskriver hur systemet ska reagera på olika ingångsvärden, och därigenom definiera systemets beteende genom en kombination av in- och utgångar samt interna tillstånd.
I slutändan ger FPGA ett kraftfullt verktyg för både prototyputveckling och implementation av inbäddade system. Det tillåter ingenjörer att snabbt testa och optimera sina designlösningar och anpassa sina system till förändrade krav och förutsättningar, vilket gör det till en ovärderlig del av utvecklingsprocessen inom många tekniska områden.
Hur man modellerar hårdvara och mjukvara för inbäddade system med heltalsprogrammering
I de flesta inbäddade system är det nödvändigt att fatta beslut om vilka hårdvaru- och mjukvarukomponenter som ska implementera olika uppgifter. Detta beslut kan modelleras genom hjälp av heltalsprogrammering (ILP), vilket möjliggör en systematisk och optimerad metod för att välja de bästa komponenterna baserat på ett uppsatt mål, till exempel kostnad eller prestanda.
När en uppgift har flera lösningar är det viktigt att analysera varje lösning för att hitta den bästa designen. Detta görs genom att först utveckla en uppgiftsgraf, där varje nod representerar en uppgift som systemet ska utföra. Designteamet kan sedan föreslå olika kandidater för att implementera varje nod, där hårdvarukomponenter som mikroprocessorer, FPGA:er eller andra specialiserade kretsar beaktas.
Valet av hårdvara för varje uppgift baseras på vad som är tillgängligt, vilket kan vara standardkretsar som företaget redan har på lager, eller specialkomponenter som designteamet känner till. I vissa fall kan även mikroprocessorer som 8051 övervägas för att implementera vissa delar av uppgiftsgrafen. Om uppgifterna är geografiskt spridda – till exempel om sensorer finns på olika delar av en bro – kan flera mikroprocessorer krävas snarare än en enda med kablage som förbinder dem.
En viktig aspekt av modellen är att den tillåter flera kopior av samma hårdvarukomponent. På detta sätt kan man ta hänsyn till lösningar där vissa komponenter används mer än en gång beroende på hur uppgifterna är fördelade i systemet.
Vidare kan vissa uppgifter, även om de specificeras separat i uppgiftsgrafen, ha samma funktionalitet. Ett exempel är när en controller ska avgöra om det finns biltrafik eller fotgängare på en bro. Även om dessa två uppgifter kanske definieras som separata noder, kan de slås samman om systemet som används har möjlighet att känna igen båda typer av aktivitet. Detta innebär att uppgiftsgrafen inte alltid behöver vara en exakt avbildning av systemets verkliga funktionalitet, utan kan anpassas för att optimera lösningen.
När det gäller modellering med ILP måste vi definiera ett antal matematiska variabler och villkor. Först och främst behöver modellen referera till varje nod i uppgiftsgrafen. Låt vara mängden av namn eller index för dessa noder. Varje uppgiftsnod har en funktionalitet, vilket representeras av en mängd som beskriver vad noden gör, t.ex. att känna av objekt i ett visst område eller att styra en barriär.
För varje nod måste vi välja en lämplig hårdvarukomponent. Låt vara mängden av hårdvarukomponenttyper som övervägs. Varje komponenttyp kan förekomma flera gånger i lösningen, beroende på uppgifternas krav och hur de är distribuerade.
Förutom hårdvara måste vi också överväga processorer för att köra de mjukvarufunktioner som krävs för varje uppgift. Här introduceras mängderna , som representerar processortyper, och , som är indexet för de individuella processorernas komponenter. På samma sätt som för hårdvarukomponenterna kan det finnas ett övre gränsvärde för hur många av varje processor som behövs i lösningen.
De beslutande variablerna i modellen kommer att vara binära: de kan vara antingen 0 eller 1. Exempel på sådana variabler är:
-
: Denna variabel är 1 om uppgift är tilldelad hårdvarukomponent av typ , och 0 annars.
-
: Denna variabel är 1 om uppgift är tilldelad processor av typ , och 0 annars.
-
: Denna variabel är 1 om mjukvara finns för att implementera funktionen på processor av typ , och 0 annars.
Därefter behöver vi matematiska ekvationer som specificerar villkoren för lösningarna. För varje uppgift måste det finnas exakt en komponent som den tilldelas, antingen en hårdvarukomponent eller en processor. Det här uppnås genom en uppsättning ekvationer som säkerställer att varje uppgift endast är tilldelad en komponent.
Om en uppgift är tilldelad en processor måste mjukvara för denna processor finnas som implementerar den funktion som uppgiften kräver. Detta representeras av en uppsättning olikheter som styr hur mjukvara kan tilldelas processorernas funktioner.
Slutligen, för att optimera lösningen, kan en objektiv funktion införas, som kan representera olika mål som behöver minimeras eller maximeras, exempelvis kostnaden för de använda komponenterna, strömförbrukning, eller processorns bearbetningstid. Om målet är att minimera kostnaden för systemet kan vi använda ekvationen:
Där är kostnaden för en enskild komponent eller processor, och och är de beslutande variablerna som anger om en viss komponent är vald i lösningen. Budgeten för systemet kan också tas i beaktande som en begränsning, vilket innebär att den totala kostnaden inte får överskrida ett visst belopp.
För att lösa sådana problem används ILP-tekniker, som genom att analysera de binära variablerna och villkoren kan identifiera den bästa lösningen baserat på de specificerade målen. Dessa tekniker gör det möjligt att hitta den mest effektiva designen, både vad gäller kostnad, prestanda och andra viktiga faktorer.
Hur designar man effektiva byggnadsintegrerade solcellsanläggningar (BIPV) i Oman?
Hur man väljer rätt kontakter och kablar för högkvalitativa elektroniska enheter
Hur säkerställs korrekt funktion i säkerhetskritiska system?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский