Privacy Policy Cookie Policy Terms and Conditions Architettura ARM - Wikipedia

Architettura ARM

Da Wikipedia, l'enciclopedia libera.

Sede principale ARM a Cambridge, Regno Unito
Ingrandisci
Sede principale ARM a Cambridge, Regno Unito

L'architettura ARM (precedentemente Advanced RISC Machine, prima ancora Acorn RISC Machine) indica una famiglia di microprocessori RISC a 32-bit utilizzata in una moltitudine di sistemi embedded. Grazie alle sue caratteristiche di basso consumo (rapportato alle prestazioni) l'architettura ARM domina il settore dei dispositivi mobili dove il risparmio energetico delle batterie è fondamentale.

Attualmente la famiglia ARM copre il 75% del mercato mondiale dei processori a 32 bit per applicazioni embedded [1], ed è una delle più diffuse architetture a 32 bit del mondo. I processori ARM vengono utilizzati in PDA, cellulari, lettori multimediali, videogiochi portatili e periferiche per computer (come router hard disk di rete etc.). Importanti rami della famiglia ARm sono i processori Intel XScale e i processori OMAP prodotti da Texas Instruments.

Indice

[modifica] Storia

Un processore ARM Conexant utilizzato da molti router
Ingrandisci
Un processore ARM Conexant utilizzato da molti router

Il progetto ARM è iniziato nel 1983 nella sezione ricerca e sviluppo della Acorn Computers Ltd.

Il team guidato da Roger Wilson e Steve Furber iniziò lo sviluppo puntando a realizzare una versione migliore del MOS Technology 6502. Acorn in quel periodo utilizzava il MOS 6502 per i suoi computer e i manager pensarono che poter utilizzare dei processori prodotti internamente dalla società avrebbe fornito un notevole vantaggio competitivo all'azienda.

Il team completo lo sviluppo del prototipo chiamato semplicemente ARM1 nel 1985 e il primo processore realmente prodotto l'ARM2 venne realizzato l'anno successivo. L'ARM2 era un processore con un bus dati a 32 bit, un bus di indirizzi a 26 bit (in modo da poter indirizzare fino a 64 Megabyte e dei registri a 16/32 bit. Uno dei registri serviva per definire l'allineamento del program counter datoi che i primi 6 bit e gli ultimi 2 erano utilizzati come flag dal processore per specificare il suo stato. L'ARM2 era probabilmente il più semplice processore a 32 bit con i suoi 30.000 transistor era significativamente più semplice del Motorola 68000 che pur avendo 68.000 transistor forniva prestazioni paragonabili. Il processore doveva la sua semplicità alla mancanza di microcodice (nel 68000 il microcodice occupa un quarto dei transistor) e come la maggior parte delle CPU dell'epoca non era dotata di cache. Il successore ARM3 invece venne dotato di 4KB di cache per migliorare le prestazioni.

Alla fine degli anni 80 Apple computer iniziò a lavorare con Acorn per sviluppare una nuova versione del core ARM. Il progetto era talmente importante da spingere Acorn a spostare il team di sviluppo in una nuova compagnia chiamata Advanced RISC Machines Ltd.. Per questo motivo spesso ARM viene espanso come Advanced RISC Machine invece che Acorn RISC Machine. Advanced RISC Machines divenne ARM Ltd quando la società madre ARM Holdings plc decise di quotarsi alla London Stock Exchange e al NASDAQ nel 1998.[1]

I lavori del team di sviluppo portarono alla realizzazione dell'ARM6. Il primo modello venne prodotto nel 1991 e Apple utilizzo il processore ARM 610 basato su core ARM6 per l'Apple Newton. Nel 1994 Acorn utilizzò ARm610 come processore centrale del suo computer RiscPC.

Il core era quasi immutato rispetto all'originale ARM2, difatti mentre l'ARM2 aveva 30.000 transistor l'ARM6 aveva 35.000 transistor solo 5000 in più. L'idea della società infatti era di permettere agli OEM di prendere il core ARM e combinarlo con vari componenti opzionali per ottenere una cpu completa economica ed a basso consumo dato che ottimizzata per i singoli compiti. Gli OEM poi avrebbero fatto produrre il processore a una delle varie fonderie di semiconduttori che lavorano su commissione.

L'implementazione di maggior successo è sicuramente l'ARM7TDMI che viene utilizzato in console portatili, telefoni cellulari, e periferiche varie. Il processore è stato prodotto in centinaia di milioni di esemplari.

La DEC licenzio la architettura ARM, (questo produsse molta confusione nel mercato dato che la stessa DEC dispone di una propria linea di processori i DEC Alpha) e produsse lo StrongARM. A 233 Megaherz il processore consuma solo 1 Watt (le versioni recenti anche di meno), Intel nel corso di una transazioni con DEC per una causa legale acquisì la linea StrongARm e la utilizzo in congiunzione con il suo processore i960 per realizzare la linea Intel XScale. Linea che in seguito decise di vendere durante una ristrutturazione aziendale.

Le architettura comunemente supportate da Windows Mobile (sistema operativo installato su PDA, smartphone e altri dispositivi portatili) è l'ARM4. I processori XScale e l'ARM926 sono basati su ARMv5TE mentre gli StrongARM, gli ARM925T e gli ARM7TDMI sono basati su ARM4.

[modifica] I core

Specifiche microprocessori SPARC
Famiglia Architettura Core Caratteristiche Cache (I/D)/MMU MIPS @ MHz Applicazioni
ARM7TDMI v4T ARM7TDMI(-S) 3-stage pipeline none 15 MIPS @ 16.8 MHz Game Boy Advance, Nintendo DS, iPod
ARM710T MMU 36 MIPS @ 40 MHz Psion 5 series, eMate 300
ARM720T 8KB unified, MMU 60 MIPS @ 59.8 MHz
ARM740T MPU
v5TEJ ARM7EJ-S Jazelle DBX none
ARM9TDMI v4T ARM9TDMI 5-stage pipeline none
ARM920T 16KB/16KB, MMU 200 MIPS @ 180 MHz Armadillo, GP32,GP2X (first core), Tapwave Zodiac (Motorola i. MX1)
ARM922T 8KB/8KB, MMU
ARM940T 4KB/4KB, MPU GP2X (second core)
ARM9E v5TE ARM946E-S variabile, strettamente accorpata, MPU Nintendo DS, Nokia N-Gage, Conexant 802.11 chips
ARM966E-S no cache, TCMs

ST Micro STR91xF, incluso Ethernet [2]

ARM968E-S no cache, TCMs
v5TEJ ARM926EJ-S Jazelle DBX variabile, TCMs, MMU 220 MIPS @ 200 MHz Mobile phones: Sony Ericsson (K, W series),Siemens and Benq (x65 series and newer)
v5TE ARM996HS no caches, TCMs, MPU
ARM10E v5TE ARM1020E (VFP) 32KB/32KB, MMU
ARM1022E (VFP) 16KB/16KB, MMU
v5TEJ ARM1026EJ-S Jazelle DBX variabile, MMU or MPU
ARM11 v6 ARM1136J(F)-S SIMD, Jazelle DBX, (VFP) variable, MMU ?? @ 532-665MHz (i.MX31 SoC) Omap2 Nokia N93(?)
v6T2 ARM1156T2(F)-S SIMD, Thumb-2, (VFP) variabile, MPU
v6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, (VFP) variabile, MMU+TrustZone
v6K ARM11 MPCore 1-4 core SMP, SIMD, Jazelle DBX, (VFP) variabile, MMU
Cortex v7-A Cortex-A8 NEON, Jazelle RCT, Thumb-2 variabile (L1+L2), MMU+TrustZone up to 2000 (2.0 DMIPS/MHz in speed from 600 MHz to greater than 1 GHz) Texas Instruments OMAP3
v7-R Cortex-R4 Embedded cache variabile, MMU opzionale 600 DMIPS Broadcom
v7-M Cortex-M3 Microcontroller no cache, (MPU) 120 DMIPS @ 100MHz Luminary Micro [3] microcontroller family
XScale v5TE 80200/IOP310/IOP315 I/O Processor
80219
IOP321 Iyonix
IOP33x
PXA210/PXA250 Zaurus SL-5600
PXA255 32KB/32KB, MMU 400 BogoMips @400 MHz Gumstix
PXA26x
PXA27x 800 MIPS @ 624 MHz HTC Universal, Zaurus SL-C1000,3000,3100,3200
PXA800(E)F
Monahans 1000 MIPS @ 1.25 GHz
PXA900 Blackberry 8700
IXC1100 Control Plane Processor
IXP2400/IXP2800
IXP2850
IXP2325/IXP2350
IXP42x NSLU2
IXP460/IXP465

[modifica] Note di progetto

Per mantenere il progetto pulito, semplice e veloce il processore non ha microcodice, come il processore MOS 6502, il processore utilizzato nei primi computer Acorn.

L'architettura ARM è un'architettura RISC che include:

  • Architettura load/store
  • Mancato supporto ad accessi alla memoria non allineati (supportati dal core v6)
  • Set di istruzioni ortogonale
  • Ampi registri a 16/32 bit
  • Opcode a lunghezza fissa per semplificare la decodifica e l'esecuzione a costo di diminuire la densità del codice
  • Esecuzione in un ciclo di clock per la maggior parte delle istruzioni

Per compensare il progetto semplice rispetto a processori della stessa epoca come l'Intel 80286 e il Motorola 68020 il processore comprendeva alcune caratteristiche uniche come:

  • Esecuzione condizionata di molte istruzioni per ridurre i salti e compensare gli stalli della pipeline
  • Le operazioni aritmetiche sono le uniche che possono alterare i registri delle esecuzioni condizionate
  • Shifter a 32 bit che può essere utilizzato in contemporanea con la maggior parte delle istruzioni senza penalizzazioni di tempo
  • Metodo di indirizzamento a indice molto potente.
  • Interrupt a 2 livelli molto veloce e semplice con un sottosistema di registi collegati che commutano

Una delle caratteristiche più interessante dei processori ARM sono 4 bit addizionali utilizzati per realizzare dei codici condizionali per ogni istruzione.

Questi codici hanno ridotto le possibilità di indirizzo dato che il processore non ha molti pit per poterli specificare ma il grande vantaggio è che questi codici permettono di evitare i salti nei caso di semplici if . Un esempio classico si ha nell'esecuzione dell'algoritmo di Euclide per la ricerca del maggior comune divisore.

In linguaggio C il codice è:

int gcd (int i, int j) 
{
   while (i != j) 
      if (i > j) 
          i -= j;
      else 
          j -= i;
   return i;
} 

In assembly ARM il ciclo diventa:

loop   CMP    Ri, Rj       ; set condition "NE" if (i != j)
                           ;               "GT" if (i > j), 
                           ;           or  "LT" if (i < j)           
       SUBGT  Ri, Ri, Rj   ; if "GT", i = i-j;  
       SUBLT  Rj, Rj, Ri   ; if "LT", j = j-i; 
       BNE    loop         ; if "NE", then loop

Questo evita i rami del then e dell' else.

Un'altra caratteristica unica del set di istruzioni è la capacità di shiftare i dati durante le normali operazioni sui dati (operazioni aritmetiche, logiche e di copia di registri). Per esempio il codice C seguente

a += (j << 2);

viene tradotto in questa unica istruzione assembly eseguita in un colo ciclo

ADD Ra, Ra, Rj, LSL #2

Queste caratteristiche rendono i programmi ARM normalmente più densi degli equivalenti programmi per altri processori RISC. Inoltre il processore fa meno accessi alla memoria e riesce a riempire meglio le pipeline. Quindi le CPU ARM possono utilizzare frequenze inferiori a quelle di altri processori consumando meno potenza per svolgere gli stessi compiti.

Un processore ARM inoltre a altre caratteristiche viste raramente nei processore RISC come l'indirizzamento relativo al PC (il PC negli ARm è un registro a 16 bit) , indirizzamento con il pre e post incremento.

Una caratteristica curiosa dei processori ARM è che con il tempo il set di istruzioni incrementa. I primi processori ARM (prima dell'ARM7TDMI) per esempio non avevano istruzioni per caricare quantità a due bit. E quindi non era in grado di gestire direttamente tipi corti in C.

I primi processori tipo gli ARM7 erano basati su un disegno con pipeline a 3 stadi, fetch, decode e execute. I processori più moderni come l'ARM9 per incrementare le prestazioni sono passati a pipeline a 5 stadi. Altri cambiamenti per incrementare le prestazioni includono un sommatore veloce e un sistema di predizione dei salti.

[modifica] Thumb

Gli ultimi processori ARM sono dotati di un set di istruzioni a 16 bit chiamato Thumb che utilizza quattro bit per ogni istruzione. Il codice Thumb è più leggero ma è dotato di meno funzionalità, per esempio solo i salti possono essere condizionati e alcuni opcode non possono essere utilizzati da tutte le istruzioni. Nonostante queste limitazioni Thumb nel caso di sistemi dotati di limitata larghezza di banda verso la memoria fornisce prestazioni migliori del set di istruzioni completo. Molti sistemi embedded sono dotati di un bus verso la memoria limitato, e sebbene il processore possa indirizzare a 32 bit spesso si utilizza indirizzamenti a 16 bit o simili, un esempio molto diffuso è il Game Boy Advance. In queste situazioni conviene creare codice Thumb per la maggior parte del programma e ottimizzare le parti di codice che richiedono molta potenza di calcolo utilizzando il set id istruzioni completo.

Il primo processore dotato di Thumb è stato l'ARM7TDMI. Tutti gli ARM9 e le famiglie successive (incluso gli Intel XScale) sono dotati di Thumb.

[modifica] Jazelle

ARM ha implementato in alcuni processori la tecnologia [4] per permettere al processore di eseguire nativamente il Java bytecode. Questa tecnologia è interoperabile con il codice ARM standard e Thumbt.

Il primo processore dotato di Jazella è stato l'ARM926J-S, la tecnologia Jazella è stata sottolineata dalla J nella sigla. Il processore viene utilizzato sui telefoni cellulari per velocizzare l'esecuzione dei giochi Java ME e delle applicazioni. L'idea di facilitare l'esecuzione di codice Java per queste applicazioni ha probabilmente spinto ARM a sviluppare questa tecnologia.

[modifica] Thumb-2

La tecnologia Thumb-2 ha fatto il suo debutto nell'ARM1156 core, presentato nel 2003. Thumb-2 estende le limitate istruzioni a 16 bit con delle addizionali istruzioni a 32 bit per fornire maggior potenza al processore. La tecnologia Thumb 2 fornisce codice con densità (e quindi occupazione di banda) simile a quello del codice Thumb ma con prestazioni più vicine a quello ARM a 32 bit.

Thumb-2 inoltre estende le istruzioni ARM e Thumb con delle nuove istruzioni che permettono la manipolazione dei singoli bit, l'esecuzione condizionata e la gestione di tabelle con salti.

[modifica] Thumb-2EE

Thumb-2EE, venduta come Jazelle RCT, è una tecnologia annunciata nel 2005 e chee è stata implementata per la prima volta nel processore Cortex-A8. Thumb-2EE è una estensione delle istruzioni Thumb-2, specificatamente progettato per gestire codice generato in tempo reale (per esempio durante la esecuzione di codice Just in time). La tecnologia Thumb 2EE è stata progetta per linguaggi come Java, C#, Perl e Phyton in modo da generare codice compilato di dimensioni ridotte ma senza impattare sulle prestazioni.

Le nuove istruzione fornite permettono di controllare automaticamente i puntatori nulli prima di ogni load o store, permettono di gestire l'eventuale sfondamento degli array, la gestione delle diramazioni e molte altre caratteristiche fornite da linguaggi ad alto livello come l'istanziamento di memoria per i nuovi oggetti.

[modifica] NEON

La tecnologia NEON è una combinazioni di istruzioni a 64 e 128 bit SIMD (Single Instruction Multiple Data) per accelerare e standardizzare il trattamento e l'elaborazione di segnali multimediali. NEON permette di eseguire la decodifica MP3 con una CPU a 10 Megahertz e permette di eseguire il codec GSM AMR (Adaptive Multi-Rate) con una CPU a 13 Megahertz. La tecnologia poggia su un set di istruzioni separato, registri indipendenti e esecuzione del codice separata. NEON gestisce dati a 8/16/32/64 bit di tipo intero, a singola precisione e in virgola mobile. La tecnologia SIMD è cruciale per l'esecuzione di operazioni vettoriali, operazioni che trattano molti dati con lo stesso programma. NEON permette di gestire fino a 16 operazioni contemporaneamente.

[modifica] VFP

La tecnologia VFP è un'estensione dell'architettura ARM che fornisce un coprocessore matematico. La tecnologia è nata per fornire operazioni in grado di trattare dati in virgola mobile a singola e doppia precisione in modo economico ma pienamente compatibile con la standard ANSI/IEEE Std 754-1985 Standard for Binary Floating-Point Arithmetic. VFP fornisce istruzioni per applicazioni tipo compressioni, decompressioni, grafica tridimensionale, analisi audio e altro. Questa estensione risulta utile per dispositivi tipo PDA, smartphone, set-top box e applicazioni di automazione e controllo. La tecnologia VFP gestisce anche brevi vettori di dati con tecnologia SIMD.

[modifica] Licenze ARM

ARM Ltd non produce realmente la proprie CPU e non vende dispositivi basati sulle sue CPU, ARM Ltd licenzia ad altre aziende la possibilità di realizzare CPU basate su core ARM. ARM offre una serie di licenze che variano a seconda del processore, delle personalizzazioni e del numero di pezzi prodotti. Tutte le licenze ARM prevedono una descrizione hardware dei core e il set completo di strumenti di sviluppo per la realizzazione del software per i processori. Le aziende dopo aver acquistato la licenza da ARM si rivolgono a una fonderia di silicio che provvede a realizza fisicamente il processore basandosi sulla descrizione fornita da ARM. Se l'acquirente lo richiede ARM fornisce anche i simulatori dell'hardware delle CPU in modo da permettere all'acquirente ddi modificare la CPU aggiungendovi funzionalità e poi di testarne l'effettiva funzionalità senza dover realizzare fisicamente il chip. Alcuni acquirenti acquistano direttamente la descrizione verilog dei processori in modo da poter ottimizzare anche il singolo copre migliorandone le prestazioni o riducendone i consumi per utilizzi particolari. Caso a parte sono le fonderie di silicio, queste possono effettuano delle modifiche per un cliente e le stesse modifiche possono essere venduta ad altri clienti.

Come le altre aziende ARM vende le licenze in base al loro valore percepito. Core lenti vengono venduti ad un presso inferiore a quello di core più moderni e veloci. Inoltre versioni ottimizzate hanno costi maggiori di versioni realizzate assemblando blocchi precostituiti. La situazione viene ulteriormente complicata dalla presenza di fonderie che rivendono versioni ridotte delle licenze ARM (Samsung e Fujitsu per esempio) avendo preso dei core base e avendoli customizzati innalzandone le prestazioni. Rispetto a fonderie che lavorano su progetti dedicati e quindi realizzati espressamente queste fonderie offrono prezzi inferiori (2 o 3 volte inferiori) con prestazioni spesso accettabili. Nel caso di bassi volumi di acquisto usualmente conviene rivolgersi alle fonderie per le licenze mentre in caso di alti volumi di vendita conviene contattare direttamente ARM per una licenza specifica e poi rivolgersi a fonderie dedicate, che lavorano solo per il committente e non come Samsung o Fujitsu che lavorando per più committenti contemporaneamente non possono seguire il prodotto allo stesso modo.

I maggiori gruppi di semiconduttori hanno licenza con ARM. Tra questi gruppi si segnalano: Atmel, Broadcom, Cirrus Logic, Freescale (società spin-off di Motorola dal 2003), Fujitsu, Intel (tramite un accordo con DEC), IBM, Infineon Technologies, Nintendo, OKI, Philips, Samsung, Sharp, STMicroelectronics, Texas Instruments e VLSI. I contratti di licenza sono regolati da clausole di non divulgazione quindi non si hanno cifre certe sul costo dei core ARm anche se si sa che sono tra i core più costosi del mercato a parità di prestazioni. Una singola licenza ARM per un prodotto con un processore ARM può costare fino a 200.000 dollari. Per quantità elevate e per modifiche significative all'architettura la licenza può superare i 10 milioni di dollari di costo.

[modifica] Voci correlate

[modifica] Collegamenti esterni

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu