mvbdump
Configurazione dei moduli smartIO MVB tramite USB
La descrizione di questo strumento è in fase di elaborazione. Al momento è riportata soltanto la guida integrata.
Nota: questo software in futuro non sarà più supportato. La funzionalità sarà integrata in futuro nello strumento smiohp.
Opzioni sulla riga di comando
usage: mvbdump <options>
recommended:
-i <inputBatchFile>
-c <c-sequence>
-s <inputDumpFile>
-o <dumpFile>
-f <format> (def = 0 [bin], 1, 2, ...)
-t <minutes> (def = 0: interactive mode)
-sl (synch to local time)
-sp <port> (synch to TIMEDATE48 in port)
-sw <offset> (synch to TIMEDATE48 at word offset)
optional:
-V print version
-u <usbDevice> (def = '', find by udev)
important: stty -F <usbDevice> raw -echo -echoe -echok
Comandi di esecuzione
entering interactive mode:
-q (terminate session)
-t <minutes> (end interactive mode)
-r (device txPreset)
-i <inputBatchFile>
-sl (synch to local time)
-sp <port> <offset> (synch to TIMEDATE48 in port / offset)
all other input will be send to the device.
Comandi di controllo FPGA
- La configurazione avviene dall'host tramite il canale di trasmissione (Tx) dell'interfaccia seriale USB attraverso cui viene indirizzato lo smartIO.
- L'FPGA dispone di una API minimale basata su caratteri ASCII e quindi facilmente comprensibile.
- Non viene fornito alcun riscontro di stato sui comandi eseguiti.
- Poiché il controllo avviene tipicamente da un codice di programma, essenzialmente non è integrato alcun controllo della sintassi.
- I comandi vengono interpretati ed eseguiti immediatamente durante la trasmissione.
- Ciononostante l'FPGA gestisce i seguenti tipici elementi di sintassi:
- tutti i caratteri dopo // vengono ignorati come commento fino alla fine della riga (LF e/o CR)
- i white space (0x09, 0x0A, 0x0D, 0x20) vengono in genere ignorati, le eccezioni sono indicate esplicitamente.
- la distinzione tra maiuscole e minuscole viene ignorata
Tramite la API possono essere gestite le seguenti funzioni:
Comandi diretti
| Comando | Descrizione |
|---|---|
| R | RESET, arresta la sequenza di test e disattiva le linee di ingresso A e B |
| RRRR | Enforce high level RESET |
| L | Avvia la sequenza di test con loopback nell'FPGA, la linea A e/o B deve essere attivata in precedenza |
| P | Avvia la sequenza di test con ritorno esterno, la linea A e/o B deve essere attivata in precedenza |
| { | Arresta la sequenza di test e disattiva le linee di ingresso A e B, immissione di una nuova sequenza di test (vedere sotto) |
| ? | Restituzione del numero di versione dell'FPGA |
| @ | Restituzione dei credits |
| # | Restituzione della hash key della versione DBOA |
| // | Commento, tutti i caratteri fino alla fine della riga vengono ignorati, funziona sempre |
Come interruttore
Come interruttore, costituito da una lettera seguita immediatamente (senza white space!) dal carattere '+' o '-' (i default sono "disattivato")
| Comando | Descrizione |
|---|---|
| A+, A- | Ricezione sulla linea MVB A, viene disattivata con RESET o con l'immissione/la fine del programma |
| B+, B- | Ricezione sulla linea MVB B, viene attivata con RESET o con l'immissione/la fine del programma |
| AB+, AB- | Commutare la ricezione sulle linee MVB A+B contemporaneamente, per il resto come sopra |
| C+, C- | Inserimento del CRC ricevuto nel flusso di dati, ad es. diagnostica di messa in servizio. Un bit di stato nel pacchetto MVB ricevuto indica se nel pacchetto sono contenuti CRC |
| E+, E- | I frame con condizioni di errore vengono trasmessi all'host per l'analisi |
| M+, M- | Attivare il filtro white list per i dati in tempo reale nelle porte |
| W+, W- | Inserimento del contatore di byte Tx nel data frame, ad es. verifica dell'implementazione del driver USB |
| N+, N- | No-Parity (ovvero parity-don't-care) nel byte CRC, non conforme a EN 91375-3-1§6.1.3: "The resulting 7-bit remainder shall be extended by an even parity bit." |
| X+, X- | Attivare il filtro white list per la comunicazione di messaggi |
| S+, S- | Attivare la modalità ESD, terminazione dopo Log-0 e EOF breve (solo simulazione MVB) |
Come comando con parametri
Come comando con parametri, costituito da una combinazione '=' e lettera (senza white space!), seguita da un interruttore +/- o da valori di parametri numerici. I valori devono essere sempre espressi in notazione esadecimale con esattamente il numero di cifre prescritto.
| Comando | Parametro | Descrizione | Esempio |
|---|---|---|---|
| =0 | Zero: cancella tutti i filtri white list | =0 | |
| =D ## § | ## = Device - ID § = Message Maske | Device Flags: filtro white list per la comunicazione di messaggi; per l'ID del dispositivo indicato vengono trasmessi all'host dati di comunicazione in base alla maschera. § è un nibble esadecimale a 4 bit con la seguente assegnazione: "trasmettere, se …" bit0 (1): single-cast con Device-ID come mittente E (*) bit1 (2): broadcast da Device-ID bit2 (4): single-cast con Device-ID come destinatario E (*) bit3 (8): single-cast con Device-ID (senza direzione) ad es. 'A' = bit1 + bit3, registrazione dell'intera comunicazione da/verso questo dispositivo | =D20 A |
| =P ###+, =P ###- | ### = Port - ID | Port Enable: filtro white list per le porte; con '+' la porta indicata viene trasmessa all'host | =P5B0+ |
| =T ### | ### = Slave Response Timeout/µs | Timeout: MVB lavora secondo lo standard con un timeout di 43 µs per la risposta dello slave. Questo tempo può essere impostato con questo comando nell'intervallo 0…1023 µs. | =T02B |
| =X5 0# | # = Mapping | X5-Header: Select pin mapping for pin header X5 #: indice di mapping per i pin C0 .. C1 | |
| =X7 # § | ## = Mapping | X7-Header: Select pin mapping for pin header X7 #: indice di mapping per i pin A0 .. A3 §: indice di mapping per i pin B0 .. B3 | |
| =R ### | ### = Tabelle | Report: emissione di un dump binario per la tabella indicata 1: FIFO - puntatore di scrittura/lettura, stati della state machine 2: Tx-Prog-RAM 3: FIFO - canale A 4: FIFO - canale B 5: DSO Line A-RAM (disattivare prima lo scope!) 6: DSO Line B-RAM (disattivare prima lo scope!) | |
| =S 00# | # = Enable-Mask | Scope: abilitazione del DSO interno per la registrazione dei segnali di ingresso @ 24MHz (=> 16 bit / MVB-bit). Lo scope necessita di 22us per armare i trigger per la cancellazione della memoria RAM; per i successivi 8 eventi di trigger vengono registrati rispettivamente 15 MVB-bit incl. 2 MVB-bit di pretrigger. La prima parola di dati contiene rispettivamente i trigger scatenanti, nonché ulteriori meta-informazioni e l'indice del frame corrente. bit0: (1) trigger con errore CRC dello slave bit1: (2) trigger con errore CRC del master bit2: (4) trigger con errore di simbolo bit3: (8) trigger con rilevamento di inizio frame | =S 00C |
Programma di simulazione
Come comando di programmazione per una sequenza di test, che inizia con {, seguito da più
parole di programma o di dati, separate tra loro da , e concluso con }. Per facilitare la creazione di una sequenza di test, l'FPGA può tradurre determinati mnemonici come comandi di controllo e valori costanti.
Esempio:
{ .w 064 // Warte 100 µs
, .r 00A // Wiederhole 10 mal …
, .x 7 02 // (*) erzeuge Frame mit 2 Datenworten mit HDR, CRC und EOF
, $M // fügt das Datenwort C715 als Master Header ein
, 0101 // Steuerbefehl vom Master, Lese 16-bit Port 257
, .w 0 04 // Warte 4 us
, .x 7 02 // erzeuge Frame mit 2 Datenworten mit HDR, CRC und EOF
, $S // fügt das Datenwort A8E3 als Slave Header ein
, 1234 // Simuliertes Antwort-Byte vom Slave
, .w 010 // Warte 16 us
, .l 0 02 // Wiederhole ab (*)
, .e 0 00 // Programm Ende
}
La memoria di programma comprende 256 parole, utilizzabili per comandi di controllo e dati. Un controllo della lunghezza programmata non viene effettuato né nell'FPGA né nella libreria driver!
| Parola di controllo | Mnemonic | Parametro | Descrizione | Esempio |
|---|---|---|---|---|
0000 | .e 0 00 | End: fine del programma | .e 0 00 | |
10## | .j 0 ## | ## = indice della parola di controllo di destinazione | Jump: salta alla parola di programma in posizione ##, il conteggio inizia da 0 | .j 0 02 |
2### | .r ### | ## = inizializzazione del contatore del ciclo | Repeat: consente di ripetere n volte una sezione del programma n = [1 .. 4095] = [0x001 .. 0xFFF]. Non annidabile! | .r 00A.… .l 0 |
30## | .l 0 ## | ## = indice della parola di controllo di destinazione | Loop: decrementa il contatore del ciclo e salta a ## se maggiore di zero | …. .l 0 nn |
40## | .w ### | ### = tempo in µs | Wait: attende per T = ### µs prima dell'esecuzione del comando successivo T = [1 .. 4095] = [0x001 .. 0xFFF] | .w 064 |
5§## | .f § ## | § = numero di 1/2 bit di disturbo## = inizio del disturbo in 1/2 bit | Failure: inverte per § mezzi bit dopo ## mezzi bit l'uscita MVB simulata. Il bit di controllo nel comando .X decide sulla linea A/B | .f 2 1E |
6§## | .g § ## | § = numero di parole## = a partire dalla parola di dati | Generator: inserisce nel flusso di dati, al posto delle parole di dati indicate, valori PRBS a 16 bit, a partire dalla parola ## per § parole per § = 0 vengono generate 16 parole di dati. | .g 8 01 |
7§## | .x § ## | § = flag di controllo ## = numero di parole | eXchange: trasmette le seguenti ## parole di dati nel programma come dati MVB, dove con i bit di controllo nel nibble § vengono attivate le seguenti funzioni: bit0 (1): la prima parola di dati è l'header MVB bit1 (2): genera byte CRC secondo la norma nel flusso di dati bit2 (4): aggiunge i bit EOF dopo l'ultima parola di dati al frame le seguenti ## parole vengono inviate come parole di dati all'uscita di simulazione. (normale § := 7) | .x 7 02 , $M , 20B3 |
C§0# | .s § 0# | § = delay line# = time index | Skewing: sfasamento temporale tra i frame delle linee A/B §: delay line B (0) or line A (1) 0:A first, B delayed 1: B: first, A: delayed #: time-index of delay, [0..7] 0: 0 .00 µs (perfect sync, never ever) 1: 0 .33 µs (1/2 bit time) 2: 1 .00 µs (3/2 bit times) 3: 7.65 µs 4: 7.99 µs (critical) 5: 8.30 µs 6: 9.67 µs 7: 10.34 µs Modificando lo sfasamento temporale, l'esecuzione del successivo comando .X viene ritardata finché entrambe le linee del bus sono nuovamente libere. | .S 0 04 |
D§$# | .d § $ # | § = Ctrl Line A$ = Ctrl Line B# = Debug out | Debug: §, $: controllo della simulazione Line A/B (normale §, $ := 3) bit0 (1): Enable line output bit1 (2): Enable line error bits bit2 (4): disturbo del bit di start #: controllo dei pin di debug e delle opzioni (i 2 bit inferiori sono portati su X5) bit0 (1): Header X5:Pin X0, (select mapping 4, =X504) bit1 (2): Header X5:Pin X1, (select mapping 4, =X504) | .D 3 3 3 |
E§## | .+§ ## | § = comando ## = parametro | Extended: riservato per un set di comandi esteso | .+N ## |
E4## | .+w ## | ## = time grid in ms | Wait on ms-grid point, which is ## ms since last .+w command ahead | .+w 01 |
E… | tbd | |||
EF00 | .+N 00 | NoOperation | ||
F000 | .N 0 00 | NoOperation | ||
C715 | $M | Come parola di dati: header MVB-MASTER | ||
A8E3 | $S | Come parola di dati: header MVB-SLAVE | ||
7EC3 | $C | Come parola di dati: norma EN (6.1.3), valore di esempio per il calcolo del CRC => CRC := 0xDD (con parity bit conforme alla norma) |