Jeg har lest dette innlegget og det svarer ikke på spørsmålet mitt i sin helhet:
Jeg tenker på en mikrokontroller som alt som har noe minne, registrerer og kan behandle et sett med instruksjoner som LOAD, STORE og ADD. Den inneholder logiske porter og slikt for å utføre sin rolle, men hovedoppgaven er å være en universell prosessor av biter. Jeg tenker på en Microntroller som et system av sammenkoblede ASIC-design for å skape muligheten til å lagre og behandle instruksjoner.
Jeg tenker på en ASIC-enhet som en krets som er spesielt konstruert ved hjelp av logiske og elektriske komponenter for å utføre en enkelt oppgave, uten noen annen oppgave i tankene eller ekstra maskinvare inkludert.
Jeg tenker på en FPGA-enhet som en ASIC-enhet (en enhet på lavt nivå) + en haug ubrukt ting til overs, pleide å implementere en bestemt sannhetstabell.
Til tross for navnet sitt, føles en FGPA veldig «applikasjonsspesifikk», siden den må kobles om for å utføre en ny og annen oppgave. Dette fører til forvirring med ASIC. Selv om det er nødvendig å koble til en FPGA, bør all nødvendig maskinvare være til stede. Også, FPGA er ment å være programmerbar, men er ikke det det en mikrokontroller er ment for?
Innlegget ovenfor jeg refererte til, nevner også HDL som jeg er kjent med. Kan «t HDL brukes til både ASIC og FPGA, og ved proxy for å designe en hel mikrokontroller?
Kommentarer
- Det ‘ er ikke veldig klart hva spørsmålet ditt er. Har du lest relaterte spørsmål om FPGA vs ASIC? HDL brukes faktisk til å designe ASIC og FPGA-implementeringer, og du kan designe en mikrokontroller i HDL.
- Altera tilbyr en gratis eBok kalt FPGAs for Dummies , som forklarer forskjellen mellom FPGAs, ASIC og microcontrollers godt.
- @kkrambo Du kaller ‘ meg en dummy? 🙂 Beklager, kunne ikke ‘ ikke motstå … Jeg vil sjekke det ut.
- Jeg la til ordet ‘ likheter ‘ til spørsmålstittelen, fordi det ser ut til at det er små tekniske sjargongdetaljer som kan forvirre hvordan de tre forskjellige enhetene forholder seg: for eksempel kan en enhet inneholde en av de to andre enhetene, eller det kan inneholde mange lignende komponenter, men avviker i noen viktige aspekter. Dette har allerede blitt berørt av noen av de eksisterende svarene. Takk.
Svar
ASIC vs FPGA
En feltprogrammerbar gateoppstilling kan sees på som prototypetrinnet i applikasjonsspesifikke integrerte kretser: ASIC er veldig dyre å produsere, og når den først er laget der er ingen vei tilbake (ettersom den dyreste faste kostnaden er maskene [slags produksjon av «sjablong»] og deres utvikling). FPGAer kan omprogrammeres mange ganger, men på grunn av det faktum at et generisk utvalg av porter er koblet for å oppnå målet ditt , det er ikke optimalisert som ASIC. Dessuten er FPGA-er naturlig dynamiske enheter ved at hvis du slår den av, mister du ikke bare den nåværende tilstanden, men også konfigurasjonen. Det finnes nå brett som legger til en FLASH-brikke og / eller en mikrokontroller til last konfigurasjonen ved oppstart, slik at dette pleier å være et mindre viktig argument. Både ASIC og FPGA kan konfigureres med maskinvarebeskrivelsesspråk, og noen ganger er FPGAer brukt til sluttproduktet. Men generelt sparker ASIC inn når designet er løst.
FPGA vs microcontroller
Når det gjelder forskjellen mellom en mikrokontroller og en FPGA, du kan vurdere at en mikrokontroller er en ASIC som i utgangspunktet behandler kode i FLASH / ROM sekvensielt. Du kan lage mikrokontrollere med FPGA, selv om det ikke er optimalisert, men ikke motsatt. FPGA er koblet til akkurat som elektroniske kretser, slik at du kan ha virkelig parallelle kretser, ikke som i en mikrokontroller der prosessoren hopper fra et stykke kode til et annet. for å simulere god nok parallellitet. Men fordi FPGA-er er designet for parallelle oppgaver, er det ikke så lett å skrive sekvensiell kode som i en mikrokontroller.
For eksempel, vanligvis hvis du skriver i pseudokode «la C være A XOR B», på en FPGA som vil bli oversatt til «bygg en XOR-gate med legoklossene inneholdt (oppslagstabeller og sperrer), og koble A / B som innganger og C som utgang «som vil bli oppdatert hver klokkesyklus uavhengig av om C brukes eller ikke. Mens det på en mikrokontroller som vil bli oversatt til «leseinstruksjon – det» er en XOR av variabler ved adresse A og adresse B til RAM, resulterer i lagring på adresse C. Last aritmetiske logiske enhetsregistre, og be ALU om å gjøre en XOR, kopier deretter utgangsregisteret på RAM-adresse C «. På brukersiden var begge instruksjonene imidlertid 1 kodelinje.Hvis vi skulle gjøre dette, SÅ noe annet, i HDL måtte vi definere det som kalles en prosess for å kunstig gjøre sekvenser – atskilt fra parallellkoden. Mens det ikke er noe å gjøre i en mikrokontroller. På den annen side, for å få «parallellisme» (tuning inn og ut egentlig) ut av en mikrokontroller, må du sjonglere med tråder som ikke er trivielt. Ulike arbeidsmåter, forskjellige formål.
Oppsummert:
ASIC vs FPGA: fast, dyrere for lite antall produkter (billigere for store volumer), men mer optimalisert.
ASIC vs microcontroller: absolutt som å sammenligne et verktøy med en hammer.
FPGA vs microcontroller: ikke optimalisert for sekvensiell kodebehandling, men kan også gjøre virkelig parallelle oppgaver. Generelt FPGAer er programmert i HDL, mikrokontrollere i C / montering
Når hastigheten på parallelle oppgaver er et problem, ta en FPGA, utvikle designet ditt og til slutt gjør det til et ASIC hvis det «er billigere for deg i det lange løp (masseproduksjon). Hvis sekvensielle oppgaver er i orden, ta en mikrokontroller. Jeg antar at du kan gjøre en enda mer applikasjonsspesifikk IC fra dette hvis det også er billigere i det lange løp . Den beste løsningen vil sannsynligvis være litt av begge deler.
For et raskt søk etter å ha skrevet dette ga meg:
Svar
FPGAer kan «kobles om» ved omprogrammering. En FPGA laster konfigurasjonen inn i de konfigurerbare logiske cellene når den får strøm . Dette betyr at den kan programmeres på nytt uten endringer i maskinvaren.
ASIC-er kan bare kobles om ved å modifisere fotolitografiske masker på silisiumstøperiet.
En mikrokontroller er en type av ASIC, som utfører et program og kan gjøre generiske ting som et resultat. Men hvis du vil endre instruksjonssettet, eller gjøre noe lignende, må du endre den faktiske IC-utformingen av silisium.
Forskjellen mellom en FPGA og en MCU er mer uklar. I utgangspunktet er hva en FPGA er, på maskinvarenivå, mange små SRAM-celler, alle koblet til en tett matrise av multipleksere. I utgangspunktet er en FPGA en hel haug med diskret logikk som kan elektronisk «kobles om» ** ganske enkelt ved å omprogrammere multipleksere og SRAM-celler.
Som sådan kan du faktisk implementere en MCU innen en FPGA, siden en MCU bare er en viss konfigurasjon av logiske celler. Faktisk brukes FPGAer veldig ofte i designprosessen til MCUer.
En mikrokontroller er en implementering av en viss logisk konfigurasjon. Årsaken til at vi har dem er at ved å implementere en MCU direkte i silisiumet, kan den totale mengden av silisiumdyseplass som kreves optimaliseres betraktelig, og visse ytelsesoptimaliseringer kan gjøres som den nødvendige «generikken» til en FPGA forbyder. Dette gjør at produksjonskostnadene til en MCU kan reduseres dramatisk, og som et resultat er den vanlige MCU mye billigere enn en FPGA som er i stand til å inneholde tilsvarende logikk.
FPGAs er nyttige i visse applikasjoner, fordi de kan implementere logiske strukturer på en måte som MCU-er ikke kan. Hvis du for eksempel trenger å legge til X1 + Y1, X2 + Y2, X3 + Y3 og X4 + Y4, MCU må utføre hver operasjon i rekkefølge *. En FPGA kan ganske enkelt ha 4 separate ALUer samtidig , slik at den kan utføre den samme operasjonen på et kvarter av tiden (forutsatt at de to enhetene er klokket i samme hastighet).
Dette er hvor FPGAer ( eller ASIC-er designet for samme oppgave) kan virkelig skinne, i det faktum at du kan gjøre mange, mange ting samtidig , som en enkelt prosess bare kan gjøre sekvensielt.
* (Merk: Jeg ignorerer noen ting som SIMD her)
Kommentarer
- Jeg har ikke ‘ t synes FPGA / ASIC-skillet er uklart; i en FPGA fungerer kretsene hvis » ledninger » kan endres samtidig og uavhengig. En MCU har en stor mengde kretser hvis ledninger ikke kan endres, hvis oppførsel styres gjennom informasjon som er tilgjengelig stykkevis fra et programmerbart minnesystem. Til enhver tid vil en CPU vanligvis bare kunne utføre en operasjon fra en liste over noen få tusen til noen få milliarder valg, men MCU vil være utformet slik at å sette slike operasjoner sammen i rekkefølge vil gjøre det mulig å gjøre nyttig arbeid.
- Takk. VELDIG nær å bli svaret … riktignok 10 måneder senere. +1 for å gjøre opp.
Svar
Dette er et godt spørsmål,
I utgangspunktet en mikrokontroller og en ASIC har maskinvare (ofte referert til som silisium) som er satt i stein og ikke kan endres. En FPGA kan konfigureres å representere mange forskjellige typer maskinvare (dette kan inkludere mikrokontroller).
Du tror kanskje at en mikrokontroller kan få mange forskjellige ting til å gjøre, men alt dette gjøres ved å kjøre forskjellige programmer – teknisk programvare men noen ganger referert til som firmware – selve maskinvaren endrer seg ikke, den gjør de samme operasjonene, men i en annen rekkefølge med forskjellige innganger.
FPGAer brukes vanligvis til å generere designene som er forpliktet til ASICs. Forskjellen mellom dem er at hvis du vil oppdatere den indre funksjonen til en FPGA eller legge til / fjerne funksjonelle blokker, er alt du trenger å gjøre å oppdatere firmware, dette kan ikke gjøres på ASIC-er som den indre konger har vært forpliktet til silisium, kan det ikke omkonfigureres.
Så kort sagt, med en mikroprosessor bruker du den samme maskinvaren til å kjøre forskjellige programmer, med en FPGA konfigurerer du om maskinvaren til å utføre forskjellige funksjoner, og ASIC er som en mikrokontroller ved at maskinvaren ikke kan være endret, men er vanligvis designet for å utføre en enkelt funksjon ekstremt effektivt.
Både ASIC og FPGA kan inneholde mikrokontroller, og hvis de gjør det, kan du skrive programmer for dem som du ville gjort en frittstående mikrokontroller, et eksempel på dette er Alteras NIOS II innebygde prosessor.
Hvis dette fremdeles er forvirrende, så gi meg beskjed om hva som er uklart, og jeg vil gjøre mitt beste for å avklare svaret mitt.
Gipsy
Svar
vel, nei en FPGA er programmert av elektriske signaler hvis den oppfører seg som en spesifikk samling porter, noen FPGAer inkluderer blits minne for å lagre denne konfigurasjonen, noen må ikke og må omprogrammeres etter hver strømtilbakestilling.
En ASIC kommer allerede fra produksjonslinjen c onfigured.
FPGA-feil kan løses med en fastvareoppgradering, ASIC-feil kan ikke repareres økonomisk.
Svar
Til tross for navnet føles en FGPA veldig» applikasjonsspesifikk «, siden den må kobles om for å utføre en ny og annen oppgave.
Det er det motsatte av hva «applikasjonsspesifikk» betyr. Du kan bruke en FPGA for mer enn ett program ved å koble den til. Du kan ikke endre en ASIC, så den kan bare brukes på en oppgave (den oppgaven kan implementere en mikrokontroller).
Riktignok, i tilfelle ved å koble til en FPGA, bør all nødvendig maskinvare være tilstede.
Ikke sikker på hva dette betyr. Vanligvis er det et programvaregrensesnitt for omprogrammering av en FPGA. Det er en ASIC som krever millioner av [valutaenheter] maskinvare.
FPGA «s er ment å være programmerbar, men er ikke det hva en mikrokontroller er ment for?
En mikrokontroller lar deg programmere sekvensiell programvare for fast maskinvare. Akkurat som en vanlig datamaskin, men veldig liten og ressursbegrenset. En FPGA lar deg programmere hvilken som helst maskinvare du vil bruke en HDL.