RISC-V
RISC-V és un conjunt d'instruccions o ISA de codi obert i de tipus RISC.[1][2] RISC-V fou creada el 2010 per investigadors de la Universitat de Berkeley a Califòrnia. L'any 2024 hi havia un conflicte obert per Estats Units per tal d'evitar l'ús de RISC-V per part de Xina.[3] MotivacióLes noves ISA acostumen a ser molt cares, pels costos en dissenyadors de computadors. A més, desenvolupar una CPU requereix coneixements en múltiples especialitats: lògica digital electrònica, compiladors i sistemes operatius. És difícil trobar un equip com aquest fora d'una organització d'enginyers professional. L'equip normalment és pagat amb els diners que cobren pels seus dissenys. Per tant, els venedors de dissenys de computadors, com ARM Holdings i MIPS Technologies cobren regalies per l'ús dels seus dissenys, patents i drets d'autor.[4][5] Sovint requereixen acords de confidencialitat abans d'entregar documents que descriuen els avantatges detallats dels seus dissenys i el joc d'instruccions. En molts casos, no es descriuen les raons les decisions de disseny. Tot aquests costos i secretisme fan que el desenvolupament de nou hardware i software sigui molt més difícil. També dificulta les auditories de seguretat. Un altre resultat és que els jocs d'instruccions moderns, d'alta qualitat i de propòsit general no s'han explicat ni han estat disponibles, excepte per motius acadèmics. RISC-V es va iniciar per donar solució a aquests problemes. L'objectiu era fer una ISA pràctica, de codi obert, utilitzable en qualsevol disseny de hardware o software sense càrrecs.[1][6] A més, s'expliquen les raons de cadascuna de les parts del projecte, com a mínim en termes generals. Els autors de RISC-V són acadèmics però amb una experiència considerable en el disseny de computadors. La ISA de RISC-V és un desenvolupament directe d'un conjunt de projectes acadèmics en l'àrea del disseny d'ordinadors. En part es va originar per ajudar aquests projectes.[1][6] Per fer front al cost de disseny, el projecte es va iniciar com una recerca acadèmica finançada per DARPA.[1] Per tal de construir una gran comunitat continuada d'usuaris i per tant acumular dissenys i programari, els dissenyadors de RISC-V ISA planegen donar suport a una àmplia varietat d'usos pràctics. Son petits, ràpids i redueixen el consum de les implementacions en el món real,[1][7] sense haver-se de dissenyar per cada micro-arquitectura en particular.[1][8][9] La necessitat d'una àmplia base de col·laboradors és part del motiu pel qual RISC-V ha estat dissenyat per adaptar-se a tants usos. Per aquesta raó, molts col·laboradors de RISC-V veuen el projecte com un esforç unificat de la comunitat. HistòriaPredecessorsEl terme RISC data del 1980.[10] Abans d'això, hi havia un cert coneixement que els ordinadors més simples podrien ser eficaços, però els principis de disseny no van ser descrits àmpliament. Els ordinadors simples i efectius sempre han estat d'interès acadèmic. Els acadèmics varen crear el joc d'instruccions DLX per la primera edició de Computer Architecture: A Quantitative Approach al 1990. David Patterson n'era un dels autors, i posteriorment va col·laborar en RISC-V. DLX va ser dissenyat amb propòsit educacional. Els acadèmics i aficionats l'implementaven utilitzant matrius de portes programables. Aquesta ISA no va tenir èxit comercial. Les versions 2 i anteriors dels processadors ARM tenien un joc d'instruccions de domini públic, i segueixen sent suportades per la GNU Compiler Collection (GCC), un compilador de codi obert. Per aquesta ISA existeixen 3 nuclis de codi obert, però no s'ha fabricat mai.[11] OpenRISC es una ISA de codi obert basada en DLX, associaciada amb dissens de RISC. Es troba completament suportada per implementacions de GCC i Linux. Tot i així, disposa de poques implementacions comercials. Ús acadèmicKrste Asanović de la Universitat de Califòrnia, Berkeley, va trobar múltiples usos per a un sistema basat en codi obert. Al 2010 va decidir desenvolupar i publicar en "short, three-month project over the summer". El pla era ajudar tant als usuaris acadèmics com industrials.[6] David Patterson a Berkeley també hi va contribuir. Originalment va identificar les propietats del Berkeley RISC.[10] RISC-V és una de les seves sèries cooperatives dels projectes de recerca RISC. En aquest punt, els estudiants varen proporcionar programari, simulacions i dissenys de CPUs econòmics. Originalment, els autors de RISC-V i la seva institució, oferien els documents de la ISA i diversos dissenys de CPU sota llicencies BSD, la qual permet treballs derivats—per exemple dissenys de xips RISC-V—per ser tant oberts i gratuïts, o bé tancats i propietaris. Inicialment es trobaven finançats per DARPA.[1] FundacióPer motius comercials, es requereix que una ISA sigui estable abans de poder utilitzar-lo en un producte que pot durar molt anys. Per abordar aquest problema, es va formar la fundació RISC-V per posseir, mantenir i publicar la propietat intel·lectual relacionada amb la definició de RISC-V. Els autors originals i els propietaris han cedit els seus drets a la fundació.[12] Al 2019 la fundació va publicar els documents que defineixen RISC-V i permeten la utilització sense restriccions de la ISA tant per disseny hardware com software. Tot i així, nomes els membres pagats de la fundació RISC-V poden botar per aprovar canvis o utilitzar el logotip de compatibilitat de marca registrada.[12] Premis
RequisitsEls dissenyadors diuen que el conjunt d'instruccions és la interfície principal d'un ordinador, ja que es troba entre el maquinari i el programari. Si un bon conjunt d'instruccions estigués obert, disponible per a tothom, hauria de reduir dràsticament el cost del programari permetent una reutilització molt més gran. També hauria d'incrementar la competència entre els proveïdors de maquinari, que poden utilitzar més recursos per al disseny i menys per al suport de programari.[14] Els dissenyadors afirmen també que les grans innovacions són poc freqüents en el disseny de conjunt d'instruccions, ja que els dissenys més exitosos dels últims quaranta anys s'han fet cada vegada més semblants. De les que van fallar, la majoria ho va fer perquè les seves empreses patrocinadores van fallar comercialment, no perquè els conjunts d'instruccions tècnicament fossin pobres. Per tant, un conjunt d'instruccions obertes ben dissenyat dissenyat amb principis ben establerts hauria d'atreure un suport a llarg termini per molts proveïdors.[14] La majoria de les ISA obertes anteriors van utilitzar la GNU General Public Licence (GPL), animant els usuaris a obrir les seves implementacions per copiar-les i utilitzar-les altres persones. A diferència d'altres dissenys acadèmics que només estan optimitzats per simplificar l'exposició, els dissenyadors afirmen que el conjunt d'instruccions RISC-V és per a ordinadors pràctics. Segons diuen, té funcions per augmentar la velocitat de l'ordinador tot i que redueix el cost i l'ús de l'energia. Aquests inclouen una arquitectura de load-store, patrons de bits per simplificar els multiplexors en una CPU, un punt flotant basat en estàndards simplificats, un disseny que és arquitectònicament neutre i que situa els bits més significatius en una ubicació fixa per accelerar la extensió de signes. Es diu que l'extensió de signes sovint es troba en la ruta crítica a lo que en temps respecte.[1] El conjunt d'instruccions està dissenyat per a una àmplia gamma d'usos. Admet tres amplades de paraules, 32, 64 i 128 bits, i una varietat de subconjunts. Les definicions de cada subconjunt varien lleugerament per a les tres amplades de paraules. Els subconjunts donen suport a petits sistemes encastats, ordinadors personals, supercomputadors amb processadors vectorials i computadores en paral·lel, muntades en rack, a escala de magatzem. El conjunt d'instruccions és molt varialbe i extensible, de manera que sempre es poden afegir més bits de codificació. L'espai per a la versió ampliada de l'ISA de 128 bits es va reservar perquè 60 anys d'experiència en la indústria han demostrat que l'error més irrecuperable en el disseny d'instruccions és la manca d'espai d'adreça de memòria. A partir de 2016, l'ISA de 128 bits no es defineix intencionadament, ja que encara hi ha poca experiència pràctica amb sistemes de memòria tan grans.[1] Hi ha propostes per implementar instruccions d'amplada variable fins a 864 bits.[1] [15] RISC-V també dona suport als usos acadèmics dels dissenyadors. La simplicitat del subconjunt sencer permet realitzar exercicis bàsics als estudiants. El subconjunt sencer és un programari ISA senzill que permet controlar les màquines d'investigació. L'ISA de longitud variable permet extensions tant per a estudis com per a investigació.[1] El conjunt d'instruccions privilegiat separades permet la investigació en el suport del sistema operatiu, sense redissenyar els compiladors.[16] La propietat intel·lectual oberta de RISC-V permet publicar, reutilitzar i modificar els seus dissenys.[1] InnovadorsComercials
En desenvolupament
ProgramariUn problema comú per un nou conjunt d'instruccions és la falta de dissenys de CPUs i programari. Aquests dos problemes limiten la usabilitat i redueixen l'adopció del conjunt.[6] La pàgina web de RISC-V té una especificació per les instruccions de mode usuari, i una especificació preliminar per un conjunt d'instruccions privilegiat de propòsit general per donar suport als sistemes operatius.[40] Hi ha varis dissenys oberts de CPUs RISC-V, incloent la 64-bit Berkeley Out of Order Machine (BOOM),[41] la 64-bit Rocket,[42] cinc dissenys 32-bit Sodor CPU de Berkeley,[43] la picorv32 de Clifford Wolf, la scr1 de Syntacore, la PULPino (Riscy i Zero-Riscy) de ETH Zürich / Univertitat de Bologna,[44] i d'altres. La Sodor CPU de tres escenaris sembla apta per a ser una petita CPU encastada. En canvi, la Rocket es pot utilitzar en computadors mitjans, compactes i baix consum, com poden ser dispositius personals. La BOOM utilitza gran part de la infrastructura creada per Rocket i es pot utilitzar per computadors personals, supercomputadors i servidors. A més, tant picorv com src1 son implementacions en Verilog de microcontroladors (MCU) de 32 bits de classe RV32IMC. Finalment, els nuclis en PULPino implementen una RV32IMC ISA simple per microcontroladors (Zero-Riscy) o una RV32IMFC ISA (més potent) amb extensions DSP personalitzades per processament de senyals encastat. El disseny del programari inclou un disseny de compilador, Chisel,[45] que pot reduir els altres dissenys a Verilog per l'ús en dispositius. La pàgina web inclou dades per verificar les implementacions bàsiques. Les eines de programari disponibles per a RISC-V inclouen una "toolchain" GNU Compiler Collection (GCC) amb GDB (el debugger), una altra de LLVM, el simulador OVPsim (juntament amb la llibreria RISC-V Fast Processor Models), el simulador Spike i un simulador en QEMU. A nivell de sistema operatiu, hi ha suport per al kernel de Linux, per FreeBSD i NetBSD. No obstant, les instruccions de mode supervisor estan desestandaritzades des del 14 de març de 2019,[46] el que fa que aquest suport sigui provisional. L'adaptació preliminar de FreeBSD a l'arquitectura RISC-V es va llençar al febrer de 2016, a la versió FreeBSD 11.0.[47] Les adaptacions de Debian i Fedora s'estan estabilitzant. Existeix una adaptació de Das U-Boot.[48] La especifiació UEFI v2.7 ha definit la vinculació RISC-V i uns enginyers d'HPE han fet una adaptació de TianoCore[49] que esta en espera de llençament. Hi ha una adaptació preliminar del microkernel seL4.[50] Existeix un simulador que executa un sistema Linux RISC-V en un navegador web utilitzant JavaScript.[51] Hex Five ha publicat el primer "Stack" de programació IoT segur per RISC-V amb suport per FreeRTOS.[52] DissenyBase i extensions ISARISC-V té un disseny modular, format per peces de base alternatives, amb extensions opcionals afegides. La base ISA i les seves extensions es desenvolupen en un esforç col·lectiu entre la indústria, la comunitat investigadora i les institucions educatives. La base especifica les instruccions (i la seva codificació), el flux de control, els registres (i les seves mides), la memòria i l'adreça, la manipulació lògica (és a dir, sencer) i accessoris. La base només pot implementar un equip simplificat d'ús general, amb suport de programari complet, incloent un compilador d'ús general. Les extensions estàndard s'especifiquen per treballar amb totes les bases estàndard i entre elles sense conflicte. Molts ordinadors RISC-V poden implementar l'extensió compacta per reduir el consum d'energia, la mida del codi i l'ús de memòria. També hi ha plans futurs per donar suport als hipervisors i la virtualització. Juntament amb una extensió del conjunt d'instruccions del supervisor, S, un RVGC defineix totes les instruccions necessàries per donar suport convenientment a un sistema operatiu de la interfície del sistema operatiu Portable (POSIX) a l'estil Unix. Es defineixen les següents regles de disseny:[53]
Per tal d'adreçar les combinacions de funcionalitats que poden ser implementades, s'ha definit una nomenclatura per especificar-les.[54] Primer s'especifica el conjunt d'instruccions base, el codi per RISC-V, la mida en bits dels registres i la variant (Per Exemple, RV64I o RV32E). Després s'assignen lletres especificant les extensions implementades en ordre canònic (com a la taula anterior). La base, les extensions de càlcul de nombres enters i amb punt flotant, les primitives de sincronització per la computació amb múltiples nuclis, i la base i les extensiosn MAFD són considerades necessàries pel còmput de propòsit general i, per tant, tenen la drecera "G". Un computador petit de 32 bits per sistemes encastats podria ser el RV32EC. Un computador gran de 64 bits podria ser el RV64GC (abreviació de RV64IMAFDC). S'ha proposat un esquema de nomenclatura amb Zxxx per les extensions estàndard i Yxxx per les que no ho són (específiques del fabricant). Per exemple, s'està discutint la extensió Ztso, una extensió que implementa una ordenació total d'emmagatzematge (una alternativa al model de consistència de memòria feble). Conjunt de registres
RISC-V té 32 registres per a nombres enters (o 16 en la versió embedded). Quan s'implementa l'extensió per a nombres amb punt flotant, també té 32 per aquests. Totes les instruccions llegeixen i escriuen dades només a registre (a excepció d'aquelles per accedir a memòria). El primer registre enter és el registre reservat pel zero, i la resta són de propòsit general. Un "store" al registre zero no té cap efecte, i una lectura sempre proporciona el nombre 0. Utilitzar aquest registre com a reserva permet tenir un conjunt d'instruccions més simple.
Els registres de control i estat existeixen, però els programes executats en mode usuari només tenen accés a aquells per a la mesura del rendiment i la gestió dels nombres en punt flotant. No hi ha instruccions per guardar i recuperar múltiples registres degut a que quan es va dissenyar l'arquitectura es va pensar que no eren necessaris, eren complexes i possiblement massa lents. Accés a memòriaCom altres dissenys RISC, RISC-V té una arquitectura load-store machine Arxivat 2016-12-20 a Wayback Machine., és a dir, que les instruccions operen només sobre registres i s'utilitzen els "load" i "store" per llegir i escriure a memòria. La major part de les instruccions "load" i "store" inclouen un "offset" de 12 bits i dos identificadors de registres: un està reservat pel registre base i l'altre per la font de dades en cas d'escriptura o pel destí d'aquestes en cas de lectura. L'offset s'afegeix al registre base per obtenir l'adreça d'on llegir o escriure. Això permet accedir a estructures de dades amb instruccions simples. Per exemple, si el registre base apunta al final d'una pila, es pot accedir a les variables locals d'aquesta amb instruccions simples. De la mateixa manera, les instruccions "load" i "store" poden accedir a estructures d'estil "record" en dispositius d'entrada i sortida. Utilitzant el registre zero com a adreça base permet a aquestes instruccions accedir a la memòria propera a aquesta adreça. La memòria està adreçada com a bytes de 8 bits, amb les "words" seguint l'ordre little-endian.[54] Aquestes words poden ser accedides amb operacions "load" i "store". Les adreces de memòria accedides no necessiten estar alineades amb la mida de les "word". No obstant, l'accés a direccions alineades pot arribar a ser més ràpid. Per exemple, les CPU senzilles podrien implementar accessos no alineats amb emulació software feta amb interrupcions de fallades d'alineació (una solució lenta).[54] RISC-V gestiona sistemes de memòria que es comparteixen entre CPUs o fils assegurant que el fil d'execució sempre veu les seves operacions de memòria en l'ordre programat. No obstant, entre els fils i els dispositius d'entrada i sortida, RISC-V és simplificat: no garanteix l'ordre de les operacions de memòria, excepte per instruccions específiques, com la Una instrucció De la mateixa manera que molts conjunts d'instruccions RISC (i alguns conjunts d'instruccions complexes (CISC), com ara les famílies x86 i IBM System/360), RISC-V no té modes d'adreçament que escriuen als registres. Per exemple, no té implementat l'autoincrement.[54] RISC-V és little-endian per assemblar-se a altres equips familiars i reeixits, per exemple, x86. Això també redueix la complexitat i els costos de les CPUs lleugerament, ja que llegeix totes les mides de paraules en el mateix ordre. Per exemple, el conjunt d'instruccions RISC-V descodifica començant en el byte més baix de la instrucció. L'especificació deixa oberta la possibilitat de sistemes no estàndard de big-endian o bi-endian.[54] Algunes CPUs RISC (com MIPS, PowerPC, DLX i RISC-I de Berkeley) situen 16 bits de "offset" en els "load" i "store". Aquests 16 bits superiors s'assignen amb una instrucció de "upper word load". Això permet establir fàcilment els valors de la "upper word", sense canvis de bits. No obstant, la major part dels usos d'aquesta instrucció genera constants de 32 bits, com ara les adreces. RISC-V utilitza una combinació similar a SPARC de desplaçaments de 12 bits i instruccions "set upper" de 20 bits. El menor desplaçament de 12 bits ajuda a les instruccions de "load" i "store" compactes (32 bits) a seleccionar dos dels 32 registres i encara tenen bastants bits per donar suport a la codificació d'instruccions de longitud variable de RISC-V.[54] ImmediatsRISC-V gestiona les constants de 32 bits i les direccions amb instrucvcions que assignen els 20 bits superiors d'un registre de 32 bits. La instrucció "load upper immediate" Aquest mètode s'ha estès per permetre codi independent de la posició afegint una instrucció, El registre base es pot utilitzar cm a tal amb els "offsets" de 12 bits en els "load" i "store". Si es necessari, es poden assignar els 12 bits inferiors d'un registre amb l'instrucció Algunes CPU ràpides poden interpretar combinacions d'instruccions en instruccions singulars fusionades. Crides a subrutines i saltsLa crida a subrutina La CPU fa el salt a la adreça calculada utilitzant una instrucció RISC-V recicla RISC-V també recicla L'ISA de RISC-V requereix prediccions predeterminades de les branques per a les CPU: s'haurien de predir les branques condicionades cap enrere. Les prediccions són fàcils de descodificar en una CPU pipelinada: les adreces de branques són números signats afegits al PC. Les branques posteriors tenen adreces complementàries de dos negatius i, per tant, tenen un en el bit més significatiu de l'adreça. Les branques cap endavant tenen un zero. El bit més significatiu es troba en una ubicació fixa del codi d'operació per accelerar el gasoducte. Les CPU complexes poden afegir predictors de branques per funcionar bé fins i tot amb dades o situacions inusuals. Per evitar la càrrega innecessària de l'electrònica de predicció de branques, (i, per tant, les parades de canonades innecessàries), la comparació de codis de branca no s'utilitzarà mai per a salts incondicionals.[53] RISC-V no suporta predicacions (l'execució condicional de les instruccions), ja que els seus dissenyadors afirmen que les CPU sense predicació són més fàcils de dissenyar i que l'optimització de compiladors és menys probable que utilitzi la predicació per error quan no s'utilitzi. Els dissenyadors afirmen que els dissenys de CPU fora de l'ordre, molt ràpids, fan predicació de totes maneres, fent la branca de comparació i el codi condicional en paral·lel, i després descarten els efectes de la ruta no utilitzada. També afirmen que fins i tot en les CPU més senzilles, la predicació és menys valuosa que la predicció de la branca, la qual cosa pot impedir que la majoria de parades estiguin associades a les branques condicionals. El codi sense predicació és més gran, amb més branques, però també afirmen que un conjunt d'instruccions comprimides (com el conjunt de RISC-V C) resol aquest problema en la majoria dels casos.[53] Molts dissenys de RISC han inclòs una ranura de retard de la branca, una posició després d'una instrucció de branca que es pot omplir amb una instrucció que s'executa tant si es pren o no la branca. Aquesta característica pot millorar el rendiment de les CPU pipelines absorbint part del temps que es perd si una CPU no valora el funcionament d'una branca condicional i el gasoducte de la CPU s'atura. RISC-V omet una ranura de retard de la branca perquè complica les CPU multicicletes, les CPU superescalares i els canonades llargues. Els predictors de branques dinàmiques han aconseguit prou bé com per reduir la necessitat de ramificacions retardades.[53] Conjunts aritmètic i lògicRISC-V segrega les operacions matemàtiques en mínim grup de instruccions d'enters en suma, resta, desplaça, bit-wise logic i comparació de braques. Això permet simular la majoria de instruccions establertes per programari de RISC-V. Les instruccions de multiplicació d'enters inclouen multiplicar i dividir. El document ISA recomana que els implementadors de CPU i compiladors fusionin una seqüència estandarditzada d'instruments de multiplicar i dividir (high and low) a una operació si és possible. Les instruccions de punt flotant (conjunt F) inclouen aritmètica de precisió única i també branques de comparació similars a l'aritmètica sencera. Requereix un conjunt addicional de 32 registres de punt flotant. Aquests són separats dels registres sencers. Les instruccions de punt flotant de doble precisió (conjunt D) generalment assumeixen que els registres de punt flotant són de 64 bits (és a dir, de doble amplada) i el subconjunt F es coordina amb el conjunt D. També es defineix un ISA (Q) de punt flotant de 128 bits de quatre precisions. Els equips RISC-V sense coma flotant poden utilitzar una biblioteca de programari de punt flotant. RISC-V no provoca excepcions sobre errors aritmètics, incloent desbordament, desbordament, subnormal i es divideix per zero. En comptes d'això, els dos sencers i l'aritmètica de coma flotant produeixen valors per defecte raonables i configura els bits d'estat. Una divisió per zero es pot descobrir per una branca després de la divisió. Els bits d'estat es poden provar mitjançant un sistema operatiu o una interrupció periòdica.[53] Operacions de memòria atòmiquesL'arquitectura RISC-V dona suport als ordinadors que utilitzen memòria compartida entre múltiples CPUs i fils d'execució. El model estàndard de consistència de memòria que utilitza és el model consistència d'alliberament. Consisteix en el fet que generalment les operaciones de lectura i escriptura es guarden, pero algunes lectures poden ser assignades com operacions d'adquisició que poden precedir accessos a memòria posteriors i algunes escriptures poden ser assignades com a operacions d'alliberament, les quals han de seguir accessos a memòria anteriors. El conjunt d'instruccions base, inclou un suport mínim en forma de instrucció de barrera, per assegurar l'ordenació de la memòria. Tot i que això es suficient ( La extensió de les operacions de memòria atòmiques dona suport a dos tipus de operacions per la consistència d'alliberament. La primera aporta les instruccions de lectura-reservada El segon grup d'operacions atòmiques realitza la seqüència llegir-modificar-escriure: Una escriptura (de manera opcional de adquisició) al registre de destí, aleshores l'operació entre el valor carregat i el registre d'origen, i finalment la escriptura (la qual pot ser escriptura-alliberació). Fent que les barreres de memòria siguin opcionals permet combinar les operacions. Les operacions opcionals s'habiliten amb els bits de alliberació i adquisició, els quals es troben presents en totes les instruccions atòmiques. RISC-V ofereix nou operacions possibles: intercanvi (utilitza el valor del registre d'origen directament); suma; and bit a bit, or i or-exclusiu; mínim i màxim amb signe i sense signe.[54] Un disseny de sistema ha d'optimitzar aquestes operacions combinades més que El sistema IBM System/370i els seus successors, incluint z/Architecture i x86, els dos implementant la instrucció de comparació i canvi ( L'alternativa La especificació dona exemples de com s'ha d'utilitzar el subconjunt per bloquejar una estructura de dades.[54] Conjunt d'instruccions comprimitL'estàndard RISC-V ISA especifica que totes les instruccions són de 32 bits. Això fa que es faci una implementació particularment senzilla, però igual que altres processadors RISC amb tal codificació d'instruccions, resulta en una mida de codi més gran que en altres conjunts d'instruccions.[55][56]Per compensar, les instruccions de 32 bits de RISC-V són en realitat de 30 bits; 3⁄4 de l'espai opcode està reservat per a un conjunt d'instruccions comprimit de longitud variable opcional (però recomanat), RVC, que inclou instruccions de 16 bits. Igual que ARM Thumb i el MIPS16, les instruccions comprimides són per a un subconjunt de les instruccions més grans. A diferència del polze ARM o del conjunt comprimit MIPS, l'espai es va reservar des del principi, de manera que no hi ha un mode de funcionament separat. Les instruccions estàndard i comprimides es poden barrejar lliurement. Com que (com Thumb-1 i MIPS16) les instruccions comprimides són simplement codificacions alternatives per a un subconjunt seleccionat d'instruccions més grans, la compressió es pot implementar en l'ensamblador i no és essencial que el compilador en sàpiga. El 2011 es va provar un prototip de RVC.[56] El codi del prototip era un 20% més petit que un PC x86 i un codi comprimit MIPS, i un 2% més gran que el codi ARM Thumb-2. També va reduir substancialment la memòria caché necessària i l'ús estimat de potència del sistema de memòria.[56] L'investigador pretenia reduir la grandària binària del codi per a ordinadors petits, especialment sistemes informàtics encastats. El prototip incloïa 33 de les instruccions més freqüentment utilitzades, recodificades com a formats compactes de 16 bits utilitzant codis d'operació prèviament reservats per al conjunt comprimit.[56] La compressió es va fer a l'assemblador, sense canvis al compilador. Les instruccions comprimides omeses de camps que sovint són zero, utilitzen petits valors immediats o subconjunts accedits (16 o 8) dels registres. addi és molt comú i sovint compressible.[56] Gran part de la diferència de mida en comparació amb el conjunt de Thumb de Arm va ocórrer perquè RISC-V i el prototip no tenen instruccions per guardar i restaurar diversos registres. En canvi, el compilador va generar instruccions convencionals que accedeixen a la pila. El prototip de l'assemblador RVC sovint els va convertir en formes comprimides que eren la meitat de la mida. Tanmateix, això encara necessitava més espai de codi que les instruccions ARM que guardaven i restauraven diversos registres. L'investigador va proposar modificar el compilador per trucar a rutines de biblioteca per guardar i restaurar registres. Aquestes rutines tendeixen a romandre en una memòria caché i, per tant, a córrer mes ràpid.[56] Conjunt d'instruccions embedded o incrustatEl conjunt d'instruccions per els sistemes incrustats més petits es redueix de les següents maneres: Només es suporten 16 dels 32 bits dels registres d'enters. No es suporten les instruccions amb nombres de punt flotant (l'especificació ho prohibeix per ser poc econòmic), per tant aquesta part s'ha de fer per software.[54] Es recomana utilitzar el conjunt C comprimit. A més, el conjunt d'instruccions amb privilegis només admet codi màquina, mode usuari i esquemes de memòria que utilitzen recolocació d'addreces de memòria "base-and-bound".[57] Hi ha discussions per als perfils de microcontroladors a RISC-V, per tal de facilitar el desenvolupament de sistemes profundament incrustats. Aquesta discussió se centra en el suport de interrupcions ràpides, simples en el llenguatge C; modes de seguretat simplificats i una interfície binària POSIX simplificada.[58] També s'han proposat ISAs de 16 bits (RV16E) més petites i no estàndards. Una proposta seria utilitzaria el conjunt d'instruccions "C" de 16 bits amb 8 registres. En la mateixa discussió, es va proposar la possibilitat d'un RV16EG complet amb un ISA recodificat per complet.[59] Una broma del dia dels innocents proposava un esquema molt pràctic: Utilitzar 16 registres de 16 bits amb les ISAs estàndard EIMC (incloent instruccions de 32 bits). La broma consistia en proposar canvis de registres quan una CPU de 32 bits seria superior en tots els casos).[60] Conjunt d'instruccions amb privilegisL'ISA de RISC-V inclou una especificació del conjunt d'instruccions privilegiat. A partir de juliol del 2017, és preliminar.[61] La versió 1.10 de l'especificació admet diversos tipus de sistemes informàtics: 1. Sistemes que només tenen mode de màquina, potser per a sistemes encastats, 2. Sistemes amb mode de màquina (per al supervisor) i amb mode d'usuari, potser per implementar Linux. 3. Sistemes amb mode de màquina, hipervisors, supervisors múltiples i modes d'usuari sota cada supervisor. Aquests corresponen aproximadament a sistemes amb fins a quatre anells de privilegi i seguretat, com a màxim: màquina, hipervisor, supervisor i usuari. S'espera que cada capa tingui una capa fina de programari de suport estandarditzat que es comuniqui amb una capa o maquinari més privilegiat.[61] El pla general d'aquesta ISA és fer que el mode d'hipervisor sigui ortogonal als modes d'usuari i supervisor.[62]La característica bàsica és un bit de configuració que permeti al codi del supervisor accedir als registres d'hipervisor o provocar una interrupció en els accessos. Aquest bit permet al mode supervisor gestionar directament el maquinari que necessita un hipervisor. Això simplifica un hipervisor de tipus 2, allotjat per un sistema operatiu. Aquest és un mode popular per executar ordinadors a escala de magatzem. Per donar suport als hipervisors de tipus 1, sense oposició, el bit pot fer que aquests accessos s'interrompen a un hipervisor. El bit simplifica l'annidament d'hipervisors, en què l'hipervisor s'executa sota un hipervisor. També es diu que simplifica el codi de supervisor deixant que el nucli utilitzi les seves pròpies funcions d'hipervisor amb el seu propi codi del nucli. Com a resultat, la forma d'hipervisor de l'ISA suporta cinc modes: màquina, supervisor, usuari, supervisor-hipervisor i usuari-hipervisor. L'especificació del conjunt d'instruccions privilegiat defineix explícitament els threads hardware o els harts. Diversos threads hardware són una pràctica habitual en ordinadors amb mes capacitats. Quan un thread està en ase de interrupció, esperant la memòria, els altres poden procedir. Els threads hardware poden ajudar a fer un millor ús del gran nombre de registres i unitats d'execució en un processador. Finalment, els threads hardware poden ser una manera senzilla i potent de gestionar les interrupcions: no es requereix cap estalvi o restauració de registres, simplement executant un thread hardare diferent. No obstant això, l'únic thread hardwarerequerit en una computadora RISC-V és el thread zero.[61] Les definicions de registres d'estat i de control existents donen suport a les excepcions d'error i memòria de RISC-V i a un nombre reduït d'interrupcions. Per als sistemes amb més interrupcions, l'especificació també defineix un controlador d'interrupcions. Les interrupcions sempre comencen en el nivell de màquina més privilegiat, i els registres de control de cada nivell tenen bits de reenviament explícits per encaminar les interrupcions a un codi menys privilegiat. Per exemple, l'hipervisor no necessita incloure programari que s'executa en cada interrupció per reenviar una interrupció a un sistema operatiu. En canvi, en la configuració, es poden establir bits per reenviar l'interrupció.[61] A l'especificació s'admeten diversos sistemes de memòria. la memoria física només s'adapta als sistemes encastats més senzills. També hi ha tres sistemes de memòria virtual d'estil UNIX per a memoria catcheada en sistemes d'emmagatzematge massiu. Els sistemes de memòria virtual tenen tres mides, amb adreces de 32, 39 i 48 bits. Tots els sistemes de memòria virtual admeten 4 pàgines de KiB, arbres de taules de diversos nivells i utilitzen algorismes molt similars per a recórrer els arbres de la taula de pàgines. Tots estan dissenyats per a la taula de pàgines de maquinari o programari.[61] Manipulació de bitsHi ha una quantitat substancial de feina feta per produir una ISA per a la manipulació de bits (B) per RISC-V (encara no està aprovada). Si es fa correctament, un subconjunt d'instruccions de manipulació de bits pot ajudar a les operacions matemàtiques, gràfiques i criptogràfiques. El criteri per a la inclusió documentat en l'esbòs és que es compleixi amb les filosofies RV5 i els formats de ISA. S'han fet millores en la densitat del codi o la velocitat (per exemple, almenys una reducció 3 a 1 en instruccions), i s'han implementat aplicacions reals, incloent suport per a compiladors preexistents. La versió 0.37 inclou[63] instruccions per a comptar zeros a l'inici del registre, comptar el nombre de bits amb valor 1, realitzar l'operació Empaquetament SIMDPer als sistemes RISC-V simples i de cost reduït, hi ha una proposta d'utilitzar els registres de nombres de punt flotant per implementar les operacions SIMD en paral·lel. Aquesta tècnica és àmpliament utilitzada per accelerar multimedia i altres processaments de senyal digital.[54] Avui en dia, aquesta ISA encara no està definida, però podria assemblar-se a les instruccions multimedia PA-RISC: Multimedia Acceleration eXtensions. A més de les operacions matemàtiques natives de 64 bits, la CPU PA-RISC MAX2 pot realitzar operacions aritmètiques en quatre "subwords" de 16 bits alhora, amb diferents mètodes de sobrecàrrega. També pot moure "subwords" a posicions diferents. Aquesta CPU s'ha simplificat de manera intencionada, i no té suport per "subwords" de 8 o 32 bits. La mida de 16 bits s'ha triat perquè permet la major part de les tasques de processament de senyal digital. Aquestes instruccions eren poc costoses de dissenyar i implementar. No obstant, han incrementat el rendiment d'aquestes CPU per a les tasques de processament de senyal digital 48 vegades o més, permetent que hi hagi còdecs de vídeo pràctics en temps real al 1995.[64][65] Conjunt d'instruccions vectorialEl conjunt d'instruccions de processament vectorial proposat pot fer que el paquet SIMD quedi obsolet. Els dissenyadors esperen tenir prou flexibilitat perquè una CPU pugui implementar instruccions vectorials en els registres d'un processador estàndard. Això permetria implementacions mínimes amb un rendiment similar a una ISA multimèdia. No obstant això, un veritable coprocessador vectorial podria executar el mateix codi amb un rendiment superior.[66] El 29 de juny de 2015, la proposta de processament de vectors és un disseny conservador i flexible d'un processador vectorial de precisió mixta d'ús general, adequat per executar nuclis de càlcul. El codi es portaria fàcilment a CPUs amb longituds vectorials diferents, idealment sense recompilar-les.[66] En canvi, les extensions SIMD de vector curt són menys convenients. S'utilitzen en x86, ARM i PA-RISC. En aquests casos, un canvi en l'amplada de paraules obliga a canviar el conjunt d'instruccions per ampliar els registres vectorials (en el cas de x86, des de registres MMX de 64 bits a Streaming SIMD Extensions (SSE) de 128 bits, a 256 bits Advanced Vector Extensions (AVX) i AVX-512). El resultat és un conjunt d'instruccions més gran i una necessitat de implementar nou codi per a les noves instruccions. Al vector ISA de RISC-V, en lloc de fixar la longitud del vector a l'arquitectura, hi ha disponible una instrucció (setvl) que pren la mida sol·licitada i estableix la longitud del vector al mínim del límit de maquinari i la mida sol·licitada. Així doncs, la proposta RISC-V s'assembla més aviat al disseny de llargmetratge de Cray. És a dir, cada vector de fins a 32 vectors té la mateixa longitud.[66] L'aplicació especifica l'amplada total del vector que requereix i el processador determina la longitud del vector que pot proporcionar amb els recursos disponibles al xip. Això pren la forma d'una instrucció (vsetcfg) amb quatre operands immediats, especificant el nombre de registres vectorials de cada amplada disponible necessària. El total no ha de ser superior al límit dirigible de 32, però pot ser menor si l'aplicació no els requereix tots. La longitud del vector està limitada per l'emmagatzematge disponible al xip dividit pel nombre de bytes d'emmagatzematge necessaris per a cada entrada.[66] Fora dels bucles vectorials, l'aplicació pot sol·licitar registres de vector zero, deixant al sistema operatiu la tasca de preservar-los en commutadors de context.[66] La longitud del vector no només és arquitectònicament variable, sinó que també està dissenyada per variar en temps d'execució. Per aconseguir aquesta flexibilitat, és probable que el conjunt d'instruccions utilitzi camins de dades d'amplada variable i operacions de tipus variable. El pla és que aquests poden reduir la mida i la complexitat de l'ISA i del compilador.[66] Els processadors de vectors experimentals recents amb camins de dades d'ample variable també mostren increments rendibles en les operacions per: segon (velocitat), àrea (menor cost) i watts (major durada de la bateria). A diferència de la unitat de processament de gràfics moderna típica, no hi ha plans per proporcionar maquinari especial per donar suport a la predicació de branques. En canvi, s'utilitzarà una predicació basada en compiladors de menor cost.[66] Sistema de depuració externHi ha una especificació preliminar per al depurador "Hardware-assisted" de RISC-V. El depurador utilitzarà un sistema de transport com Joint Test Action Group (JTAG) o Universal Serial Bus (USB) per accedir als registres de depuració. Una interfície estàndard de depuració de maquinari pot suportar una interfície abstracta normalitzada o una alimentació d'instruccions.[67][68] A partir de gener de 2017, la forma exacta de la interfície abstracta no es defineix, però les propostes inclouen un sistema de memòria amb adreces estandarditzades per als registres dels dispositius de depuració o un registre de comandes i un registre de dades accessible al sistema de comunicació. Els corresponsals afirmen que els sistemes similars són utilitzats per la interfície del mode de depuració de fons de Freescale (BDM) per a algunes CPUs, ARM, OpenRISC i LEON d'Aeroflex.[67] En el procés "d'alimentació" de instruccions, la CPU processarà una excepció de depuració per executar instruccions individuals escrites en un registre. Es pot complementar amb un registre de pas de dades i un mòdul per accedir directament a la memòria. "L'alimentació" d'instruccions permet al depurador accedir a l'ordinador exactament com ho faria el programari. Això també minimitza els canvis en la CPU i s'adapta a molts tipus de CPU la qual cosa és especialment idonia per a RISC-V, ja que està dissenyat explícitament per a molts tipus d'ordinadors. El registre de transmissió de dades permet que un depurador escrigui un bucle de moviment de dades a la memòria RAM, i després executeu el bucle per moure les dades cap a l'ordinador o sortir a una velocitat propera a la velocitat màxima del canal de dades del sistema de depuració. [69] Els corresponsals diuen que els sistemes similars són utilitzats per MIPS Technologies, Intel Quark, Tensilica's Xtensa i per a la interfície del mode de depuració en segon pla (BDM) de les Freescale Power ISA CPU's.[67] Implementacions
Entorn de programació SDK
Notes
Referències
Vegeu també |