# VMEbus

Il bus VME o VMEbus è un bus standard per computer sviluppato originariamente da Motorola negli anni settanta, successivamente standardizzato e utilizzato ampiamente in informatica ed ingegneria per applicazioni comuni. VME è acronimo di VERSABUS Module Eurocard.

## Storia

Nel 1981 Motorola, nel corso dello sviluppo del microprocessore 68000, ideò un bus di comunicazione chiamato VERSAbus basato sullo standard Eurocard. Successivamente altre grandi compagnie quali Philips e Thompson adottarono queste specifiche. Infine venne standardizzato dalla IEC come IEC 821 VMEbus, dalla IEEE e ANSI come ANSI/IEEE 1014-1987. Nel corso degli anni il protocollo VME ha subito varie modifiche fino all'attuale VME64, che appunto gestisce fino a 64 bit di indirizzamento. Esso raggiunge una performance di 40 MB/s. Il protocollo più recente è il VME64x che è dotato anche di funzionalità hot swap.

## Caratteristiche tecniche

Il bus VME utilizza un protocollo di comunicazione con linee dati ed indirizzi separate. Il numero massimo di indirizzi raggiunge 32 bit (scalabile anche a 24, 16 o 8 bit). I dati invece raggiungono al massimo 32 bit riducibili anche a 4, 16 o 24 bit.
Il bus VME è dotato di due connettori separati, generalmente indicati con P1 e P2, entrambi dotati di 3 linee da 32 pin. P1 contiene i 24 bit di indirizzo ed i 16 di dato, più tutti i segnali di controllo, come i data_strobe (DS1 e DS0), gli address modifier (AM[5..0]), ed altri come in tabella:
| PIN | Linea A | Linea B | Linea C |
| 01 | D00 | /BBSY | D08 |
| 02 | D01 | /BCLR | D09 |
| 03 | D02 | /ACFAIL | D10 |
| 04 | D03 | /BG0IN | D11 |
| 05 | D04 | /BG0OUT | D12 |
| 06 | D05 | /BG1IN | D13 |
| 07 | D06 | /BG1OUT | D14 |
| 08 | D07 | /BG2IN | D15 |
| 09 | GND | /BG2OUT | GND |
| 10 | SYSCLK | /BG3IN | /SYSFAIL |
| 11 | GND | /BG3OUT | /BERR |
| 12 | DS1 | /BR0 | /SYSRESET |
| 13 | DS0 | /BR1 | /LWORD |
| 14 | /WRITE | /BR2 | AM5 |
| 15 | GND | /BR3 | A23 |
| 16 | /DTACK | AM0 | A22 |
| 17 | GND | AM1 | A21 |
| 18 | /AS | AM2 | A20 |
| 19 | /GND | AM3 | A19 |
| 20 | /IACK | GND | A18 |
| 21 | /IACKIN | SERCLK | A17 |
| 22 | /IACKOUT | SERDAT | A16 |
| 23 | AM4 | GND | A15 |
| 24 | A07 | /IRQ7 | A14 |
| 25 | A06 | /IRQ6 | A13 |
| 26 | A05 | /IRQ5 | A12 |
| 27 | A04 | /IRQ4 | A11 |
| 28 | A03 | /IRQ3 | A10 |
| 29 | A02 | /IRQ2 | A09 |
| 30 | A01 | /IRQ1 | A08 |
| 31 | -12V | +5V (Batt) | +12V |
| 32 | +5V | +5V | +5V |
Il connettore P2 invece contiene altri 8 bit di indirizzo e ulteriori 16 bit di dato.
Il VME bus è caratterizzato da una gestione di tipo master-slave, è dotato di gestione degli interrupt e di cicli speciali di lettura. Impostando ad esempio il valore del parametro address modifier caratterizzato da 6 bit AM[0..5] si impostano ad esempio le seguenti funzionalità:
| CODICE AM[0..5] | FUNZIONE | BIT INDIRIZZO | MODALITÀ DI ACCESSO |
| 0x3f | Standard Supervisory block transfer | 24 bit | Block transfer privileged |
| 0x3e | Standard Supervisory Program access | 24 bit | Instruction access privileged |
| 0x3d | Standard Supervisor Data Access | 24 bit | Data access privileged |
| 0x3b | Standard Non-privileged block transfer | 24 bit | Block transfer for normal programs |
| 0x3a | Standard Non-privileged Program access | 24 bit | Instruction access non-privileged |
| 0x39 | Standard non-privileged Data Access | 24 bit | Data access non-privileged |
| 0x2d | Short supervisory Access | 16 bit | Privileged access. |
| 0x29 | Short non-privileged Access | 16 bit | Non-privileged access. |
| 0x0f | Extended supervisory Block transfer | 32 bit | Privileged block transfer. |
| 0x0e | Extended supervisory Program access | 32 bit | Privileged instruction access. |
| 0x0d | Extended supervisory Data Access. | 32 bit | Privileged data access. |
| 0x0b | Extended Non-privileged Block transfer | 32 bit | Non-privileged block transfer. |
| 0x0a | Extended Non-privileged Program access | 32 bit | Non-privileged instruction access. |
| 0x09 | Extended non-privileged data access. | 32 bit | Non-privileged data access. |