Moving Media Filtro Fpga
Alta definizione, basso ritardo, SDR-Based trasmissione video in applicazioni UAV integrato RF transceiver agili non solo sono ampiamente impiegati in software-defined radio (SDR) 1 architetture a stazioni base di telefonia cellulare, come il sistema multiservizio accesso distribuito (MDAS) e piccole delle cellule, ma anche per la trasmissione di video HD senza fili per applicazioni industriali, commerciali e militari, come i veicoli aerei senza equipaggio (UAV). Questo articolo esamina una implementazione catena del segnale video senza fili a larga banda utilizzando i AD9361 AD9364 2,3 IC per ricetrasmettitori integrati, la quantità di dati trasmessi, corrispondente RF occupata banda del segnale, la distanza di trasmissione, e la potenza transmitterrsquos. Sarà anche descrivere l'applicazione dello strato PHY OFDM di e presentare i risultati dei test tempo salti di frequenza per evitare interferenze RF. Infine, discuteremo i vantaggi e gli svantaggi tra Wi-Fi e il ricetrasmettitore RF agile nelle applicazioni wireless a larga banda. La Catena Figura segnale 1 illustra lo schema di trasmissione video wireless semplificata utilizzando il AD9361AD9364 e un BBIC. La fotocamera cattura l'immagine e trasmette i dati video ad un processore in banda base tramite Ethernet, HDMI reg. USB, o di un'altra interfaccia. Immagine codingdecoding può essere gestita da hardware o FPGA. La parte anteriore RF include lo switcher, LNA, e PA al ricetrasmettitore integrato programmabile. La quantità di dati deve essere trasmessa La tabella 1 mostra la differenza di dimensioni significative tra i tassi di dati non compressi e compressi. Utilizzando la codifica ad alta efficienza video (HEVC), noto anche come H.265 e MPEG-H Part 2, siamo in grado di ridurre la velocità di trasmissione dati e di risparmiare larghezza di banda. H.264 è attualmente uno dei formati più comunemente usati per la registrazione, la compressione e la distribuzione di contenuti video. Presenta un enorme passo avanti nella tecnologia di compressione video ed è uno dei diversi potenziali successori del ampiamente utilizzato AVC (H.264 o MPEG-4 Part 10). La tabella 1 riassume le velocità di trasmissione dati non compressi e compressi in diversi formati video. Ipotesi includono una profondità bit video di 24 bit e un frame rate di 60 fps. Nell'esempio 1080p, la velocità dei dati è 14,93 Mbps dopo la compressione, che poi possono essere facilmente gestite dal processore in banda base e lo strato PHY wireless. Tabella 1. compressi Data Rate banda del segnale L'AD9361AD9364 canale di supporto larghezze di banda da kHz a 56 MHz LT200 modificando la frequenza di campionamento, filtri digitali, e la decimazione. Il AD9361AD9364 sono zero se-ricetrasmettitori con canali I e Q per trasmettere i dati complessi. I dati complesso comprende parti reale e immaginaria, pari rispettivamente al I e Q, che individuano alla stessa banda di frequenza di raddoppiare l'efficienza dello spettro rispetto ad una singola parte. I dati video compressi possono essere mappati ai canali I e Q per creare punti di costellazione, che sono conosciuti come simboli. La figura 2 mostra un esempio 16 QAM in cui ogni simbolo rappresenta quattro bit. Per un sistema a singola portante, la forma d'onda digitali I e Q deve passare attraverso un filtro impulsi shaping prima del DAC per modellare il segnale trasmesso all'interno di una larghezza di banda limitata. Un filtro FIR può essere utilizzato per la sagomatura dell'impulso, e la risposta del filtro è illustrata in figura 4. Al fine di mantenere la fedeltà delle informazioni, c'è una banda minima segnale corrispondente alla velocità di simbolo. E il symbol rate è proporzionale alla velocità dei dati video compressi come mostrato nell'equazione seguente. Per il sistema OFDM, i dati complessi dovrebbero essere modulate in sottoportanti utilizzando IFFT, che trasmette anche il segnale in una larghezza di banda limitata. Il numero di bit trasmessi ad ogni simbolo dipende dall'ordine modulazione. In quali alpha è il parametro di larghezza di banda del filtro. Dalle formule precedenti si può dedurre questa equazione, così possiamo calcolare il RF occupata banda del segnale come riassunto nella tabella 2. Tabella 2. Occupati RF banda del segnale con i generi di modulazione dell'Ordine (alpha 0.25) Il AD9361AD9364, con segnale di fino a 56 MHz larghezza di banda, supportare tutte le Tabella 2 trasmissioni formato video e frame rate ancora più elevati. modulazione di ordine superiore occupa più piccolo della larghezza di banda e il simbolo rappresenta più informationbits, ma è necessario un SNR superiore per demodulare. La distanza di trasmissione e la potenza del trasmettitore In applicazioni come UAV, la distanza massima di trasmissione è un parametro critico. Tuttavia, è altrettanto importante che la comunicazione non sia cutoff anche a distanza limitata. L'ossigeno, acqua e altri ostacoli (ad eccezione di spazio libero attenuazione) possono attenuare il segnale. La figura 6 mostra il modello di canale di comunicazione perdita wireless. Sensibilità ricevitore è normalmente preso come segnale di ingresso minimo (S min) necessario per demodulare o recuperare le informazioni dal trasmettitore. Dopo aver ottenuto la sensibilità del ricevitore, la distanza massima di trasmissione può essere calcolato con alcune ipotesi, come mostrato di seguito: (SN) min è il minimo rapporto segnale-rumore necessario per elaborare un segnale NF è la figura di rumore del ricevitore k è Boltzmannrsquos costante 1,38 volte 10 ndash23 joulek T 0 è la temperatura assoluta all'ingresso del ricevitore (Kelvin) 290 KB è la banda del ricevitore (Hz) il parametro (SN) min dipende dall'ordine modulationdemodulation. Con lo stesso SNR, modulazione ordine inferiore ottiene un errore di simbolo inferiore, e con lo stesso errore simbolo, modulazione di ordine superiore deve alto SNR per la demodulazione. Così, quando il trasmettitore è lontano dal ricevitore, il segnale è più debole e il SNR non è in grado di supportare la demodulazione di ordine elevato. Per mantenere il trasmettitore in linea e mantenere un formato video con la stessa velocità dati video, la banda dovrebbe utilizzare modulazione ordine inferiore a spese di aumento di banda. Questo aiuta a garantire le immagini ricevute non sono sfocate. Fortunatamente, software-defined radio con modulazione digitale e demodulazione offre la possibilità di cambiare la modulazione. L'analisi precedente si basa sul presupposto che la potenza del trasmettitore RF è costante. Mentre una maggiore trasmissione di potenza RF con lo stesso guadagno antenna raggiungerà un ricevitore più distante con la stessa sensibilità del ricevitore, la potenza massima di trasmissione deve essere conforme alle norme di radiazioni FCCCE. Inoltre, la frequenza portante avrà un'influenza sulla distanza di trasmissione. Come un'onda si propaga attraverso lo spazio, vi è una perdita dovuta alla dispersione. La perdita spazio libero è determinata da In cui R è la distanza, lambda è la lunghezza d'onda, f è la frequenza, e C è la velocità della luce. Pertanto, la frequenza più grande avrà più economico lungo la stessa distanza di spazio libero. Ad esempio, la frequenza portante a 5,8 GHz verrà attenuato di oltre 7,66 dB rispetto a 2,4 GHz sulla stessa distanza di trasmissione. RF Frequenza e commutazione Il AD9361AD9364 hanno un range di frequenza programmabile da 70 MHz a 6 GHz. Questo in grado di soddisfare la maggior parte delle applicazioni di frequenza NLOS, tra cui vari tipi di frequenze licenza e senza licenza, come ad esempio 1,4 GHz, 2,4 GHz e 5,8 GHz. La frequenza di 2,4 GHz è ampiamente usato per il Wi-Fi, Bluetooth reg. e degli oggetti di comunicazione a corto-range, il che rende sempre più affollato. Usandolo per i segnali di trasmissione e di controllo video wireless aumenta le probabilità di interferenza del segnale e l'instabilità. Questo crea situazioni indesiderabili e spesso pericolosi per UAV. Utilizzando frequenza di commutazione di mantenere una frequenza pulita manterrà i dati e controllo di connessione più affidabile. Quando il trasmettitore rileva una frequenza affollato, si passa automaticamente a un altro gruppo. Ad esempio, due UAV che utilizzano la frequenza e che operano in prossimità interferiscono con ogni comunicazione otherrsquos. passando automaticamente la frequenza LO e riselezionare la band contribuirà a mantenere un collegamento wireless stabile. Adattivo selezione della frequenza portante o canale durante il periodo di accensione è una delle caratteristiche eccellenti in alta UAV end. Frequency Hopping frequenza veloce hopping, che è ampiamente usato in contromisure elettroniche (ECM), aiuta anche a evitare interferenze. Normalmente, se vogliamo saltare la frequenza, il PLL ha bisogno per richiudere dopo la procedura. Questo include la scrittura dei registri di frequenza, e passando attraverso il tempo di calibrazione VCO e tempo di blocco PLL in modo che l'intervallo del frequency hopping è approssimata a centinaia di microsecondi. La figura 7 mostra un esempio di salti trasmettitore frequenza LO da 816,69 MHz a 802,03 MHz. L'AD9361 è utilizzato in modo frequenza cambiando normale e la frequenza di uscita del trasmettitore RF salta da 814,69 MHz a 800,03 MHz con una frequenza di riferimento 10 MHz. Il tempo Frequency Hopping viene testata utilizzando il E5052B come mostrato in Figura 7. La calibrazione VCO e tempo di blocco PLL è di circa 500 micro secondo la Figura 7b. L'analizzatore E5052B sorgente del segnale può essere utilizzato per catturare la risposta transitoria PLL. Figura 7a mostra la modalità a banda larga di misura transitoria, mentre la figura 7b e 7d offrono una risoluzione notevolmente bene in frequenza e la misura transitoria fase con salto di frequenza. 6 Figura 7c mostra la risposta in potenza di uscita. 500 micros è un lungo intervallo di applicazione hopping. Tuttavia, il AD9361AD9364 includono una modalità di blocco veloce che rende possibile il raggiungimento più veloce del normale frequenza cambia per la memorizzazione di insiemi di informazioni di programmazione sintetizzatore (chiamati profili) nei registri devicersquos o lo spazio in banda processorrsquos memoria. La Figura 8 mostra il risultato del test utilizzando la modalità di blocco veloce da implementare frequency hopping da 882 MHz a 802 MHz. Il tempo è fino a meno di 20 micro, secondo la risposta di fase 8d Figura. La curva di fase viene disegnata con riferimento alla fase di 802 MHz. Il tempo di scrittura SPI e il tempo di taratura del VCO sono entrambi eliminati in quel modo a causa delle informazioni di frequenza e di taratura risultati essere salvati nei profili. Come possiamo vedere, figura 8b mostra la frequenza veloce salto di capacità del AD9361AD9364. Attuazione della divisione di frequenza ortogonale multiplexing PHY LayermdashOFDM (OFDM) è una forma di modulazione del segnale che divide un alto tasso di dati modulare flusso su molti banda stretta sottoportanti vicino distanziati lentamente modulati. Questo rende meno sensibili alla decolorazione frequenza selettiva. Gli svantaggi sono un alto picco di rapporto di potenza media e la sensibilità di vettore offset e la deriva. L'OFDM è ampiamente applicata nello strato di comunicazione senza fili a banda larga PHY. La tecnologia critica della OFDM comprende IFFTFFT, sincronizzazione della frequenza, la sincronizzazione tempo di campionamento e sincronizzazione symbolframe. Il IFFTFFT dovrebbe essere attuato tramite FPGA nel modo più veloce possibile. È inoltre molto importante selezionare l'intervallo delle sottoportanti. L'intervallo dovrebbe essere abbastanza grande per sopportare la comunicazione mobilità con spostamento di frequenza Doppler e abbastanza piccolo da portare più simboli all'interno della banda di frequenza limitata per aumentare l'efficienza dello spettro. COFDM riferisce a una combinazione di tecnologia di codifica e modulazione OFDM. COFDM con la sua elevata resistenza di attenuazione del segnale ed errori in avanti correzione (FEC) ai vantaggi in grado di inviare segnali video da qualsiasi oggetto in movimento. La codifica aumenterà la larghezza di banda del segnale, ma è di solito vale il trade-off. Combinando gli strumenti di progettazione e generazione automatica di codice basate su modelli da MathWorks con il potente Xilinx reg Zynq SoC e dispositivi integrati analogici ricetrasmettitori RF, la progettazione del sistema DSP, verifica, testing e implementazione può essere più efficace che mai, garantendo una maggiore performance radio sistemi e riducendo il time to market. 7 Quali sono i vantaggi su Wi-Fi Droni dotati di connessione Wi-Fi sono molto facili per la connessione a un telefono cellulare, laptop, e ad altri dispositivi mobili, che li rendono molto comodo da usare. Ma per la trasmissione video wireless nelle applicazioni UAV, l'FPGA più soluzione AD9361 offre molti vantaggi rispetto Wi-Fi. Prima di tutto, nello strato PHY, commutazione di frequenza agile e veloce Hopping dell'interferenza evitare AD9361AD9364 aiuto. La maggior parte integrati chip Wi-Fi operano anche sulla banda di frequenza a 2,4 GHz cantò con alcun meccanismo banda di frequenza riselezione per effettuare la connessione wireless più stabile. In secondo luogo, con l'FPGA più soluzione AD9361, protocollo di trasmissione può essere definito e sviluppato in modo flessibile dai progettisti. protocollo Wi-Fi è standard e basata su un handshake bidirezionale con ogni pacchetto di dati. Con Wi-Fi, ogni pacchetto di dati deve confermare che un pacchetto è stato ricevuto, e che tutti i 512 byte nel pacchetto sono stati ricevuti intatto. Se un byte viene perso, l'intero 512 byte pacchetto deve essere ritrasmesso. 8 Anche se questo protocollo garantisce l'affidabilità dei dati, è complesso e richiede tempo per ristabilire il collegamento dati wireless. Il protocollo TCPIP causerà latenza elevata che si traduce in video e di controllo non in tempo reale, che può portare a un crash UAV. La soluzione SDR (FPGA più AD9361) utilizza un flusso unidirezionale di dati, il che significa che il drone nel cielo trasmette il segnale video come una trasmissione televisiva. Non c'è tempo per il rinvio dei pacchetti quando il video in tempo reale è l'obiettivo. Inoltre, la connessione Wi-Fi non offre il giusto livello di sicurezza per molte applicazioni. Utilizzando l'algoritmo di crittografia e il protocollo definito dall'utente, l'FPGA più AD9361AD9364 soluzione è molto meno sensibili alle minacce alla sicurezza. Inoltre, il flusso di dati trasmesso in un modo offre trasmissione capacità di distanza da due a tre volte quella del Wi-Fi approcci. 8 La flessibilità della capacità radio definito dal software permette la regolazione modulationdemodulation digitale per soddisfare i requisiti di distanza o e regolazione per modificare SNR in ambienti radiazioni spazio complessi. Conclusioni Questo articolo illustrati i parametri critici di utilizzare una soluzione FPGA più AD9361AD9364 per l'attuazione di trasmissione video senza fili ad alta definizione. Con la commutazione banda di frequenza agile e veloce-frequency hopping, è possibile stabilire un collegamento senza fili più stabile e affidabile per resistere alla sempre più complesso radiazione nello spazio e diminuire la probabilità di un incidente. Nello strato di protocollo, la soluzione è più flessibile, utilizzando una trasmissione unidirezionale per ridurre stabilimento tempo wireless e creare una connessione minore latenza. Nelle applicazioni industriali e commerciali come l'agricoltura, l'ispezione power-line, e la sorveglianza, stabile, sicuro, e le trasmissioni affidabili sono di vitale importanza per il successo. Riferimenti 2 Scheda di AD9361. Analog Devices, Inc. scheda tecnica 3 AD9364. Analog Devices, Inc. 4 Ken Gentile. Application Note AN-922, Digital Pulse-Shaping filtro Basics. Analog Devices, Inc. 5 Scott R. Bullock. Transceiver e Design System per le comunicazioni digitali. 4 ° edizione. SciTech Publishing, Edison, NJ, 2014. Wei Zhou è un ingegnere applicazioni per Analog Devices, Inc. sostenere la progettazione e lo sviluppo di prodotti ricetrasmettitore RF e le applicazioni, in particolare nella trasmissione video wireless e campi di comunicazione wireless. Ha lavorato in ADI Centrale Applicazioni Centro si trova a Pechino, in Cina, per cinque anni di supporto vari prodotti, tra cui DDS, PLL, ad alta velocità DACADC e orologi. Prima di entrare in ADI, ha ricevuto il suo B. S. laurea da Wuhan University, Wuhan, Cina, nel 2006, e la sua M. S. laurea presso Istituto di Elettronica, Accademia Cinese delle Scienze (CAS), Pechino, Cina, nel 2009. Ha lavorato come ingegnere circuiti RF e microonde e sistema di progettazione per una compagnia tecnologia aerospaziale dal 2009 al 2011. Articoli relazionati Prodotti RF Agile TransceiverEmbedded Ingegneria in post. ho intenzione di mostrare come implementare la più semplice filtro digitale possibile quotmoving filterquot media. se è molto facile da implementare, ma ancora in molte applicazioni questo è più che sufficiente. per esempio riducendo il rumore casuale dalla segnale. naturalmente quando è molto semplice non hanno problemi simili. essa non l'ha risposta del filtro molto forte. Canale 1 ingresso. spazzare da 20Hz a 6Khz, Channel 4 uscite (verde) 15 punti filtrato, M (rosso) Uscita nel dominio freq Sabato 1 ottobre 2016 Questo progetto è la parte finale nel Fare una davvero potente luce solare. In questo progetto intigrate Philips Lumileds LTC3478 base driver e BQ24650 Based MPPT Solar Li-Ion carica Controller. Useremo totale 3 9 Watt ciascuno schede driver LED e un regolatore di carica per caricare 7.6V 20000mAh batteria a 6 celle Li-leone, vi è 4 display grafico a barre LED per mostrare il livello della batteria stima e un solo pulsante per controllare Onoff, diverso livello di luminosità. e selezionare uno. tutte o alcune delle schede LED a litup. non c'è molto da descrivere in termini di schmeatic e firmware come tutto il firmware e Schmeatic aer già sul mio pannello di interfaccia github account. User è fatto di PCB con 4 LED di stato della batteria di una porta per il connettore pannello solare e un interruttore di comando. quando la batteria è chargin LED di stato visualizzato di conseguenza e quando la batteria si scarica LED di stato aggiornato di conseguenza. In aggiunta al piccolo progetto di illuminazione solare che stavo lavorando ho creato questo piccolo regolatore di carica solare per caricare la batteria agli ioni di litio (Li-ion). Circuito Impiego del Texas Instrument BQ24650 nel cuore del circuito di controllo della carica. come circuito ha MOSFET esterno in modo corrente massima 160charge può essere regolato su valori molto alti. 160Circuit accettare i valori pannello solare da 5V a 28V. L'ho testato con 12V nominale (17Volts circuito aperto) 160. e 24 Volt nominale pannello solare in corrente di carica della batteria fino a 4A. Attualmente installato in casa mia da pochi mesi la carica di una batteria 20000 mAh. Circuito ha grande elevata capacità di corrente connettore a 4 pin Molex per il pannello solare. connettore a 6 pin per la batteria e l'interruttore di carico. è anche possibile collegare NTC per il monitoraggio temprature batteria. BQ24650 può automaticalley monitor di temprature della batteria. Microcontroller ha dedicato 3 uscita PWM per pin header oscuramento e 6 GPIO LED per lo stato bettery led e una chiave di interfaccia utente. Ciao zu Deutsch Leser. Das ist mein Erste Artikel auf Deutsch. I habe viel aufrufe aus Deutschland deshalb Jetzt ab, ich werde auch auf Deutsch publizieren weil ich Detusch lerne und ich mchte mehr bungen. Jedes Artikel wird auf Deutsch und wir English. wenn Widerspruch zwischen dem Artikel auf Deutsch und Englisch haben, die inglese berwiegt weil meine Erfahrungen auf deutsch Kurze ist.160 160 160 160So beginnen wir. Heutzutage arbeite ich un Projekt einem. quotMPPT Solar Li-ion Laderquot. bei diesem Projekt brauche ich eine160sehr160vollmacht 25W LED leicht. aber ist viel 25W pelliccia ein160LED-Triberg. Es erforden viele kentnisse ein 25 W LED-Triberg zu Entwerfen. Hauptsorge auf die Projket quotMPPT solare - lon Laderquot ist zu Lernen wie der MPPT Larder arbeitet und wie die software Algorithmus sind. Das Projekt ist ein Teil von ein Projekt era publiziere spter.160 ich 160 160 160 reticenza stavo lavorando ad un progetto di illuminazione solare 160little , ho bisogno di un folle davvero brillante illuminazione 25W 160LED. Ma problema è stato per 25W è un sacco di potenza per il LED e richiede alcune abilità per fare una così alta potenza LED driver. Obiettivo primario di questo progetto è quello di ottenere una conoscenza discesa di regolatore di carica MPPT e gli algoritmi di carica MPPT. questo progetto è parte del progetto. che posterò più tardi. 160160160 Questo post sarà 4 ° parte in serie di fare un capace BRACCIO Consiglio Linux a casa. fare clic su Primo. Secondo e terzo per andare a parti precedenti, così lascia iniziare. quello che è un Bootloader, Perché abbiamo bisogno di it160 un boot loader è un programma che è il primo ad essere eseguito dalla CPU. si recide uno scopo quotconfiguring poche cose molto essenziali molto specifiche prima di caricare il programma principale (può essere OS) in memoryquot principale. è per questo che si chiama boot loader. a seconda delle esigenze del boot loader può fare qualche altro compito (noi li coprire qui). ci sono varie forme e dimensioni del bootloader. tutti servono quasi lo stesso scopo. con microcontrollori. alcune volte in realtà non caricare il programma principale in memoria, ma passano il puntatore di esecuzione di programma principale in modo che il programma principale può essere eseguito direttamente formare la memoria in cui si trova. Bordo Con 4.3 pollici LCD in esecuzione l'applicazione QT5 per visualizzare immagini JPEG e TimeHomemade ricevitore GPS nella foto sopra è il front-end, il primo mixer e amplificatore IF di un ricevitore GPS sperimentale. La sinistra SMA è collegato ad un'antenna commerciale con LNA integrato e filtro SAW. Un primo oscillatore locale sintetizzato guida il fondo SMA. connettori maschio a destra sono potenza di ingresso e di uscita IF. Quest'ultimo è collegato ad un FPGA Xilinx che non solo svolge DSP, ma anche ospita un sintetizzatore di frequenza frazionaria-N. Più su questo più tardi. Mi hanno spinto a progettare questo ricevitore dopo aver letto il lavoro di 1 Matjax017E Vidmar, S53MV, che ha sviluppato un ricevitore GPS da zero, utilizzando componenti discreti principalmente, oltre 20 anni fa. Il suo uso del DSP a seguito di una dura IF-limitanti e 1-bit ADC mi interessava. Il ricevitore descritta qui funziona sullo stesso principio. La sua ADC 1-bit è il 6-pin IC vicino ai connettori maschio, un comparatore LVDS-uscita. Nascosto sotto il rumore, ma non cancellato nella poltiglia quantizzato bi-livello che emerge sono i segnali da ogni satellite in vista. Tutti i satelliti GPS trasmettono sulla stessa frequenza, 1575,42 MHz, utilizzando Direct Sequence Spread Spectrum (DSSS). Il vettore L1 si sviluppa su una larghezza di banda a 2 MHz e la sua forza alla superficie terrestre è -130 dBm. potenza del rumore termico nella stessa larghezza di banda è -111 dBm, quindi un segnale GPS al antenna ricevente è di 20 dB al di sotto della soglia del rumore. Che nessuno dei segnali presenti, sovrapposti uno sull'altro e sepolti nel rumore, sono recuperabili dopo bi-livello di quantizzazione sembra contro-intuitivo che ho scritto una simulazione di convincermi. GPS si basa sulle proprietà di correlazione di sequenze pseudo-casuali chiamati codici oro per separare i segnali dal rumore e l'altro. Ogni satellite trasmette una sequenza unica. Tutti i segnali non correlati sono rumori, compresi quelli di altri satelliti e gli errori di quantizzazione hard-limitatore. Mescolando con lo stesso codice nella corretta fase di de-diffonde il segnale utile e si diffonde ulteriormente tutto il resto. filtraggio a banda stretta, allora rimuove il rumore a banda larga senza influire sulla (ancora una volta stretto) segnale utile. Hard-limitante (1-bit ADC) degrada SNR di meno del 3 dB, un prezzo da pagare per evitare l'hardware AGC. Aprile 2013 Update Questo è ora una,, 12 canali Ricevitore GPS a batteria davvero portatile con il software chiavi in mano, che acquista e tiene traccia dei satelliti, e continuamente ricalcola la sua posizione, senza intervento dell'utente. Il sistema completo (sotto, a sinistra) è composto da: Display LCD 16x2, Raspberry Pi Modello Un computer, due schede di circuito stampato personalizzato, antenna patch commerciale e la batteria agli ioni di litio. Sistema totale consumo di corrente è 0.4A per una durata della batteria di 5 ore. Il Raspberry Pi è alimentata attraverso il cavo a nastro che collega la sua intestazione GPIO alla scheda Frac7 FPGA e non richiede altre connessioni. Attualmente, il Pi è in esecuzione Raspbian Linux. Una distro più piccolo sarebbe ridurre i tempi di primo fix. Dopo l'avvio da SD-Card, il software applicativo GPS si avvia automaticamente. In uscita, fornisce un mezzo per arrestare correttamente il Pi prima di alimentare-off. lo sviluppo del software Pi è stato fatto testa-less tramite SSH e FTP su un USB dongle Wi-Fi. Il codice sorgente e la documentazione si trovano verso il fondo a questa pagina. Entrambi i PCB personalizzati sono semplici schede PTH 2 strati, con aerei a terra continui sul fondo. Procedendo in senso orario intorno al Xilinx Spartan 3 sulla scheda di Frac7 FPGA: da ore 12 a ore 3 sono il filtro loop, VCO, divisore di potenza e prescaler della frequenza delle microonde sintetizzatore basso a destra sono il connettore joystick e JTAG e, alle 6 in punto, un pin header per il cavo a nastro Raspberry Pi. All'estrema sinistra è il connettore LCD. Vicino sinistra è un oscillatore compensato in temperatura tensione controllata cristallo (TCVCXO) che fornisce una frequenza di riferimento stabile, vitale per la ricezione GPS. Il TCVCXO è buona, ma non del tutto all'altezza degli standard GPS durante il funzionamento non-inscatolato in luoghi ventosi. Soffia su di esso sposta l'oscillatore a cristallo 10.000000 MHz di circa 1 parte su 10 milioni o 1 Hz, che è ingrandita 150 volte dal sintetizzatore PLL. Questo è sufficiente per sbloccare momentaneamente il tracking loop satellitari, se fatto improvvisamente. Il dispositivo è anche leggermente sensibile ad esempio infrarossi da lampade alogene e telecomandi TV La prima volta pubblicata nel 2011, questo è stato un ricevitore a quattro canali, il che significa che potrebbe seguire solo quattro satelliti contemporaneamente. Almeno quattro sono necessari per risolvere per la posizione dell'utente e pregiudizi orologio ricevitore, ma una maggiore precisione è possibile con altri. In tale versione originale, quattro istanze identiche del modulo inseguitore riempito il FPGA. Ma la maggior parte dei flop furono clock sola volta per millisecondo. Ora, una CPU personalizzata soft-core all'interno della FPGA serializza trattamento e viene richiesto solo 50 del tessuto FPGA per un ricevitore 8 canali o 67 per 12 canali. Numero di canali è un parametro nell'origine e potrebbe andare più in alto. La precisione della posizione è migliore quando l'antenna può vedere 360deg del cielo e ricevere segnali da tutte le direzioni. In generale, più satelliti in vista, meglio è. Due o più satelliti sulla stessa portante può portare alla cosiddetta geometria errata. La migliore soluzione finora è stato plusmn1 metri in una posizione molto aperta con 12 satelliti, ma la precisione è tipicamente metri plusmn5 in luoghi più poveri con un minor numero di satelliti. Settembre 2014 Aggiornamento Il codice sorgente per questo progetto è stato ri-rilasciato sotto GNU General Public License (GPL). Architettura di elaborazione è diviso tra FPGA e Pi di complessità e urgenza. Il Pi gestisce ad alta intensità di matematica pesante di sollevamento al proprio ritmo. L'FPGA sintetizza il primo oscillatore locale, servizi eventi ad alta priorità in tempo reale e le tracce dei satelliti in modo autonomo. Il Pi controlla l'FPGA tramite un'interfaccia SPI. Convenientemente, lo stesso SPI viene utilizzato per caricare il bitstream configurazione FPGA e codice eseguibile binario per la CPU incorporato. La FPGA può anche essere controllato tramite un cavo USB JTAG Xilinx Platform da un PC Windows e rileva automaticamente l'interfaccia è in uso. frequenze L1 sono down-convertiti in un 1 ° IF di 22,6 MHz mescolando con un oscillatore locale 1552,82 MHz sulla scheda di front-end GPS3. Tutti successiva elaborazione IF e del segnale in banda base è fatto in digitale in FPGA. Due proporzionale-integrale (PI) controller per satellite, vettore pista e la fase del codice. dati di navigazione trasmessi dai satelliti vengono raccolti nella memoria FPGA. Questo viene caricato alla Pi, che verifica la parità ed estrae effemeridi dal flusso di bit. Quando tutti i parametri orbitali necessari vengono raccolti, una fotografia è preso di alcuni contatori FPGA interni, da cui il tempo della trasmissione è calcolato per plusmn precisione 15ns. Gran parte del sintetizzatore 1552,82 MHz è implementato in FPGA. Ci si potrebbe aspettare problemi di jitter, co-ospitare un rivelatore di fase con altre logiche, ma funziona. uscita Sintetizzatore spettrale purezza è eccellente, anche se il nucleo FPGA si alterna furiosamente e non frequenze tutta armonicamente correlati. Questo approccio è stata presa perché una scheda simile a Frac7 esisteva già da un progetto di sintetizzatore in precedenza. Aggiunta di un front-end è il percorso più breve ad un ricevitore prototipo. Ma quella prima versione non era portatile: aveva i requisiti di alimentazione scomodi e non a bordo standard di frequenza. Elaborazione del segnale fino al disco-limitatore: Il comparatore LMH7220 presenta una tensione massima offset in ingresso di 9,5mV. rumore termico amplificato deve comodamente superare questo per tenerlo commutazione. segnali GPS deboli influenzano solo il comparatore vicino a zero crossing Essi sono campionati dal rumore Per stimare il livello di rumore in ingresso comparatore abbiamo tabulare i guadagni, perdite di inserzione e le figure di rumore: In-band rumore all'uscita mixer è -1740.828-1.5-3.920- 610log10 (2.5e6) -73 dBm o 52microV RMS. Il miscelatore è una terminazione resistiva in 50-Ohm e gli stadi successivi lavorare a più alto impedenza. La discreta IF striscia ha un guadagno complessivo di tensione 1000 in modo che il livello di ingresso del comparatore è 52mV RMS. L'LMH7220 aggiunge 59 dB di guadagno per un totale di 119 dB per tutta la IF. Distribuzione di tanto guadagno a una frequenza era un rischio. Per ridurre al minimo esso, un circuito equilibrato su un piano terreno solido è stato utilizzato e proiettato twisted-pair porta l'uscita al FPGA. La motivazione era semplicità, evitando una seconda conversione. In pratica, il circuito è stabile, in modo che il gioco pagato-off. Attivo disaccoppiatore Q1 alimenta 5V per la LNA a distanza. MMIC amplificatore U2 fornisce 20 dB di guadagno (non a IF) e garantisce una bassa rumorosità dato complessivo del sistema, anche se si usano cavi lunghi dell'antenna. L1 e L2 sono microonde carica manuale strozzatori ad altissima frequenza di auto-risonanza, montati perpendicolari tra loro e chiara del piano di massa. Vento 14 curve, avvolte in aria, 1 millimetro di diametro interno da 7cm lunghezze di filo di rame smaltato 32swg. Controllato con il generatore di tracking su un Marconi 2383 SA, questi erano buone a 4 GHz. Il Mini-Circuits MBA-15L DBM è stato scelto per il suo basso 6 dB perdita di conversione a 1,5 GHz e basso fabbisogno unità dBm LO 4. R9 termina la porta IF. Tre completamente differenziale IF stadi di amplificazione seguire il mixer. Low-Q parallelo sintonizzati circuiti infilate tra collezionisti impostare la larghezza di banda -3 dB circa 2,5 MHz e prevenire l'accumulo di offset DC. L4, L5 e L6 sono proiettati bobine 7mm Toko. Il BFS17 è stato scelto per la sua alta (ma non troppo alta) 1 GHz F T. Io e è 2 mA per basso rumore e ragionevole Betar e. Il 22,6 MHz 1 ° IF è digitale down-convertita a 2,6 MHz da sotto-campionamento a 10 MHz in FPGA. 2.6 MHz si trova vicino al centro della larghezza di banda di 5 MHz Nyquist. È meglio evitare il centro esatto, per ragioni che verranno spiegate più avanti. Molti altri prima IF frequenze sono possibili: 27,5 MHz, che produce lo spettro di inversione al 2 ° IF, è stato anche provato con successo. C'è un trade-off tra problemi di immagine in basso e disponibile guadagno BFS17 a frequenze più alte. rilevamento del segnale comporta risolvere tre incognite: quello che i satelliti sono in vista, i loro spostamenti Doppler e fasi di codice. Una ricerca sequenziale di questo spazio tridimensionale da un cosiddetto avvio a freddo potrebbe richiedere molti minuti. Un avvio a caldo utilizzando i dati almanacco per prevedere posizioni e velocità richiede ancora una ricerca di codice. Tutte le fasi di codice 1023 devono essere testati per trovare il picco massimo di correlazione. Calcolo 1023 integrali di correlazione nel dominio del tempo è molto costoso e ridondante. Questo ricevitore GPS utilizza un algoritmo FFT-based che mette alla prova tutte le fasi di codice in parallelo. Dal freddo, ci vogliono 2,5 secondi su un Pentium 1.7 GHz per misurare la potenza del segnale, spostamento Doppler e la fase del codice di ogni satellite visibile. Il Raspberry Pi è un po 'più lento. Con oltre bar denota coniugazione, la funzione di correlazione incrociata y (Tau) del segnale complesso s (t) e il codice c (t) spostato da offset Tau è: La correlazione Teorema afferma che la trasformata di Fourier di un integrale di correlazione è pari a il prodotto del complesso coniugato della trasformata di Fourier della prima funzione e la trasformata di Fourier della seconda funzione: FFT (y) cONIUGATO (FFT (s)) FFT (c) correlazione viene eseguita in banda. Il 1.023 Mbps codice CA è 1023 chip o 1ms lunghi. Forward FFT length must be a multiple of this. Sampling at 10 MHz for 4 ms results in an FFT bin size of 250 Hz. 41 Doppler shifts must be tested by rotating the frequency domain data, one bin at a time, up to plusmn20 bins plusmn5 KHz. Rotation can be applied to either function. The 22.6 MHz 1st IF from the 1-bit ADC is under-sampled by a 10 MHz clock in the FPGA, digitally down-converting it to a 2nd IF of 2.6 MHz. In software, the 2nd IF is down-converted to complex baseband (IQ) using quadrature local oscillators. For bi-level signals, the mixers are simple XOR gates. Although not shown above, the samples are temporarily buffered in FPGA memory. The Pi is not able to accept them at 10 Mbps. 1.023 Mbps and 2.6 MHz are generated by numerically-controlled-oscillator (NCO) phase accumulators. These frequencies are quite large compared to the sampling rate, and are not exact sub-harmonics of it. Consequently, the NCOs have fractional spurs. The number of samples per code chip dithers between 9 and 10. Fortunately, DSSS receivers are tolerant of narrow-band interferers, external or self-generated. Complex baseband is transformed to the frequency domain by a forward FFT which need only be computed once. An FFT of each satellites CA code is pre-computed. Processing time is dominated by the inner-most loop which performs shifting, conjugation, complex multiplication and one inverse-FFT per satellite-Doppler test. The Raspberry Pis Videocore GPU could be leveraged to speed things up. At 10 MHz sampling rate, code phase is resolved to the nearest 100ns. Typical CCF output is illustrated below: Calculating peak to average power over this data gives a good estimate of SNR and is used to find the strongest signals. The following were received at 20:14 GMT on 4 March 2011 in Cambridge, UK with the antenna on an outside North-facing window ledge: From northern latitudes, more GPS satellites will generally be found in the southern sky i. e. towards the equator. Taking longer samples increases SNR, revealing weaker signals but cancellation occurs when the capture spans NAV data transitions. Forward FFT length is an integral number of milliseconds however, the inverse FFT can be shortened, simply by throwing away data in higher frequency bins. SNR is preserved but code phase is not so sharply resolved. Nevertheless, a good estimate of peak position is obtained by weighted averaging the two strongest adjacent bins and off-air tests suggest this could work even down to quite short inverse FFT lengths. Having detected a signal, the next step is locking on, tracking it and demodulating the 50 bps NAV data. This requires two inter-dependent phase locked loops (PLLs) to track code and carrier phase. These PLLs must operate in real-time and are implemented as DSP functions in the FPGA. Pi software has a supervisory role: deciding which satellites to track, monitoring the lock status and processing the received NAV data. The tracking loops are good at maintaining lock, because they have very narrow bandwidths however, this same characteristic makes them poor at acquiring lock without help. They cannot see beyond loop bandwidth to capture anything further away. Initial phases and frequencies must be preset to the measured code phase and Doppler shift of the target satellite. This is orchestrated under Pi control. The loops should be in-lock from the outset and remain so. Code phase is measured relative to the FFT sample. The code NCO in the FPGA is reset at the start of sampling and accumulates phase at a fixed 1.023 MHz. It is later aligned with the received code by briefly pausing the phase accumulator. Doppler shift on the 1575.42 MHz carrier is plusmn5 KHz or plusmn3 ppm. It also affects the 1.023 Mbps code rate by plusmn3 chips per second. The length of the pause is adjusted for code creep in the time since the sample was taken. Fortunately, code Doppler is proportional to carrier Doppler for which we have a good estimate. Hardware software split In the diagram below, colour-coding shows how the implementation of the tracking DSP is now split between hardware and software. Previously, this was all done in hardware, with identical parallel instances repeated for each channel, making inefficient use of FPGA resources. Now, the slower 1 KHz processing is done by software, and twice as many channels can be accommodated in half the FPGA real-estate. The six integrate-and-dump accumulators (Sigma) are latched into a shift register on the code epoch. A service request flag signals the CPU, which reads the data bit-serially. With 8 channels active, 8 of CPU time is spent executing the oprdBit instruction But there is plenty of time, and serial IO uses FPGA fabric economically. Luxuries like RSSI and IQ logging (e. g. for scatter plots) can now be afforded. The F(z) loop filter transfer functions swallow 2 of CPU bandwidth per active channel. These are standard proportional-integral (PI) controllers: 64-bit precision is used and gain coefficients KI and KP, although restricted to powers of 2, are dynamically adjustable. Each channel having to wait its turn, NCO rate-updates can be delayed by tens or hundreds of microseconds after a code epoch but this introduces negligible phase shift at frequencies where phase margin is determined. Thin traces are 1-bit, notionally representing plusmn1. The 2.6 MHz carrier is first de-spread by mixing with early, late and punctual codes. I and Q complex baseband products from the second rank of XOR gate mixers are summed over 10000 samples or 1ms. This low-pass filtering dramatically reduces noise bandwidth and thereby raises SNR. Downsampling to 1 KHz necessitates wider onward data paths in the software domain. Code phase is tracked using a conventional delay-locked loop or early-late gate. Power in the early and late channels is calculated using P I 2 Q 2 which is insensitive to phase. Early and late codes are one chip apart i. e. frac12 chip ahead-of and behind punctual. This diagram helps to get the error sense correct: A Costas Loop is used for carrier tracking and NAV data recovery in the punctual channel. NAV data, m, is taken from the I-arm sign bit with 180deg phase uncertainty. k is received signal amplitude and theta is phase difference between received carrier (sans modulation) and the local NCO. k varies from around 400 for the weakest recoverable signals up to over 2000 for the strongest. Notice how the error term fed back to the F(z) plant controller in the Costas Loop is proportional to received signal power ksup2. Tracking slope, and therefore loop gain, also vary with signal power in the code loop. Below is a Bode plot of open-loop gain for the Costas Loop at k500: Costas Loop bandwidth is around 20 Hz, which is about optimal for carrier tracking. Code loop bandwidth is 1 Hz. Noise power in such bandwidths is small and the loops can track very weak signals. The above kI and kP work for most signals, but need dropping one notch for the very strongest. Scilab predicts, and scatter plots confirm, the onset of instability at kge1500. Parity errors do not occur unless samples stray into the opposite half of the IQ plane. (i) Instability at kge1500 The above are 2 consecutive frames of 5 subframes each. Subframes are 300-bits long and take 6 seconds to transmit. Column 1 is the preamble 10001011. This appears at the start of every subframe but can occur anywhere in the data. The 17-bit counter in column 5 is time-of-week (TOW) and resets to zero at midnight Sunday. The 3-bit counter in column 7 is the subframe ID 1 through 5. Subframes 4 and 5 are subcommutated into 25 pages each and a complete data message comprising 25 full frames takes 12.5 minutes to transmit. I am only using data in subframes 1, 2 and 3 at present. Solving for user position Every GPS satellite transmits its position and the time. Subtracting time sent from time received and multiplying by the speed of light is how a receiver measures distance between itself and the satellites. Doing so with three satellites would yield three simultaneous equations in three unknowns (user position: x, y, z) if the precise time was available. In practice, receiver clocks are not accurate enough, the exact time is a fourth unknown, four satellites are therefore required and four simultaneous equations must be solved: An iterative method is used because the equations are non-linear. Using earths centre (0, 0, 0) and the approximate time as a starting point, the algorithm converges in only five or six iterations. The solution is found even if user clock error is large. The satellites carry atomic clocks but these too have errors and correction coefficients in subframe 1 must be applied to the time of transmission. Typical adjustments can be hundreds of microseconds. The uncorrected time of transmission is formed by scaling and adding several counters. Time-of-week (TOW) in seconds since midnight Sunday is sent every subframe. Data edges mark out 20ms intervals within 300-bit subframes. The code repeats 20 times per data bit. Code length is 1023 chips and chip rate is 1.023 Mbps. Finally, the 6 most significant bits of the code NCO phase are appended, fixing time of transmission to plusmn 15ns. Satellite positions at the corrected transmission time are calculated using ephemeris in subframes 2 and 3. Orbital position at a reference time toe (time of ephemeris) is provided along with parameters allowing (x, y,z) position to be calculated up to a few hours before or after. Ephemerides are regularly updated and satellites only transmit their own. Long term orbits of the entire constellation can be predicted less accurately using Almanac data in subframes 4 and 5 however, this is not essential if a fast FFT-based search is used. Solutions are computed in earth-centred, earth-fixed (ECEF) coordinates. User location is converted to latitude, longitude and altitude with a correction for eccentricity of the earth, which bulges at the equator. The scatter diagrams below illustrate repeatability, the benefit of averaging and the effect of poor satellite choices. Grid squares are 0.001deg on each side. Blue dots mark 1000 fixes. Yellow triangles mark the centres of gravity: (i) North-facing window ledge (ii) Rooftop antenna (iii) East-facing window ledge The tight cluster (ii) was obtained using satellites in four different quarters of the sky. Only the rooftop antenna had a clear view in all directions. But good fixes were obtained by averaging, even when half the sky was obscured. Rooftop fixes also exhibit spreading like (i) and (iii) if the wrong satellites are chosen. The above solutions were generated without compensating for ionospheric propagation delays using parameters in page 18 of subframe 4 which should be applied because this is a single frequency receiver. Ionospheric refraction increases path lengths between users and satellites. In April 2012, I fixed a bug that caused significant errors in user-position solutions. Originally, by not transforming satellite positions from earth-centred-earth-fixed (ECEF) to earth-centred-inertial (ECI) coordinates, I was effectively ignoring Earths rotation during the 60 to 80 ms that signals were in flight. I am now seeing positional solution accuracies of plusmn 5 metres after averaging, even with limited satellite visibility. Ive created an appendix showing how the iterative solution is developed, starting from a geometric range equation, which is linearised using a Taylor Series expansion, and solved by matrix methods, for the special case of four satellites or the general case of more, with the option of using weighted least-squares to control the influence of particular satellites. Youll find this and solution C source code in the links at the bottom of the page. Im grateful to Dan Doberstein for sending me an early draft of his GPS book 2 which helped me understand the solution algorithm. The official US government GPS Interface Specification 3 is an essential reference. Signal monitor The above circuit arrangement, mostly implemented in FPGA, de-spreads by taking the product of the 1-bit IF and punctual code, leaving 50 bps data modulation. A small notch due to BPSK carrier suppression can just be seen: These spectra show the same de-spread transmission at different spans and resolution bandwidths (RBW). Doppler shift was -1.2 KHz. The noise floor is antenna thermal noise amplified and filtered by the IF strip. -3 dB bandwidth looks around 3 MHz, slightly wider than planned. The de-spread carrier is 5 dB above noise at 30 KHz RBW and 25 dB above at 300 Hz RBW. Received signal strength at the antenna can be estimated as -174110log10(30e3)5 -123 dBm. It still amazes me how well frequency domain information is preserved through hard-limiting The LVDS transmitter has a constant output current of 1mW in 100 ohms. Peak power seen at the SA cannot exceed 0 dBm. Here, we see this available power spread across a range of frequencies. Wideband integrated power spectral density must be First local oscillator Ive been building experimental fractional-N synthesizers using general-purpose programmable logic for several years: Xilinx Spartan 3 FPGA Frac7 was built for this purpose but I had no idea Frac5 would be used in a GPS receiver when I originally designed it. The photo below shows how the ROS-1455 VCO output on Frac5 was resistively split between the output SMA and a Hittite HMC363 divide-by-8 prescaler. The 200 MHz divider output is routed (differentially) into the FPGA which phase locks it to a master reference using methods documented in my earlier projects. Microwave circuity on Frac7 is similar but uses a Mini-Circuits 3dB splitter. High stability and low phase noise are achieved, as can be seen in the VCO output spectra shown below. When Frac5 was originally developed, as a dedicated frequency synthesizer, simultaneous toggling on frequencies not harmonically related was avoided to minimise intermodulation spurs. The FPGA was static when clock pulses that toggled phase detector output crossed the fabric. No such luxury is practical when the FPGA is hosting a GPS receiver however, fortunately, the local oscillator output is good enough: The Marconi 2383 spectrum analysers 50 MHz STD OUTPUT was used as the master reference source for Frac5 and all internal GPS receiver clocks. GPS receivers need accuracies better than 1 ppm (parts per million) to measure plusmn5 KHz Doppler shifts on the 1575.42 MHz L1 carrier. Any frequency uncertainty would necessitate a wider search range. Embedded CPU My original GPS receiver could only track 4 satellites. The available fabric was not used efficiently and the FPGA was full. Identical logic was replicated for each channel and only clock-enabled at the 1 KHz code epoch. GPS update rates are quite un-demanding and most of the parallel processing can easily be done sequentially. Embedding a CPU for this task has both increased the number of channels and freed space in the FPGA. This CPU directly executes FORTH primitives as native instructions. Visitors to my Mark 1 FORTH Computer page will already be aware of my interest in the language. FORTH is not mainstream and its use here might be an esoteric barrier however, I could not resist doing another FORTH CPU, this time in FPGA, after seeing the excellent J1 project, which was an inspiration. FORTH is a stack-based language, which basically means the CPU has stacks instead of general purpose registers. Wikipedia has a good overview. FPGA resources: 360 slices 2 BRAMs Single-cycle instruction execution FORTH-like, dual-stack architecture 32-bit stack and ALU data paths 64-bit double-precision operations Hardware multiplier 2k byte (expandable to 4k byte) code and data RAM Macro assembler code development Memory and IO Two BRAMs are used: one for main memory, the other for stacks. Xilinx block RAM is dual ported, allowing one instance to host both data and return stacks. Each stack pointer ranges over half of the array. Dual porting of the main memory permits data access concurrent with instruction fetch. One memory port is addressed by the program counter, the other by T, the top of stack. Writes to the PC-addressed port are also used for code download, the program counter providing incrementing addresses. Code and data share the main memory, which is organised as 1024 (expandable to 2048) 16-bit words. Memory accesses can be 16-, 32- or 64-bits, word-aligned. All instructions are 16-bit. Total code plus data size of the GPS application is less than 750 words, despite all loops being unrolled. IO is not memory-mapped, occupying its own 36 bit-select space (12 in 12 out 12 events). One-hot encoding is used to simplify select decoding. IO operations are variously 1-bit serial, 16- or 32-bit parallel. Serial data shifts 1 bit per clock cycle. Events are used mainly as hardware strobes and differ from writes by not popping the stack. Instruction format 24 instructions out of a possible 32 are currently allocated in the opcode space h80XX - h9FXX. These are mostly zero-operand stack ALU operations. The ret option, which performs return from subroutine, executes in parallel, in the same cycle. Add-immediate is the only one-operand instruction. A carry-in option extends (stack, implied) addition precision. hF0000 - hFFFF is spare. Stack and ALU data paths are 32-bit however, 16-, 32- and 64-bit operations are supported. 64-bit values occupy two places on the stack, with least significant bits on top. Top of stack, T, and next on stack, N, are registered outside the BRAM for efficiency. Apart from the 64-bit left shift (opshl64) which is hard-wired for single-cycle execution, all other double precision functions are software subroutines. Assembly language The GPS embedded binary was created using Microsofts Macro Assembler MASM. This only supports x86 mnemonics but opcodes are declared using equ and code is assembled using dw directives. MASM not only provides label resolution, macro expansion and expression evaluation but even data structures The MASM dup() operator is used extensively to unroll loops e. g. dw N dup(opcall dest) calls a subroutine N times. This fragment gives some flavour of source style. Stack-effect is commented on every line: opfetch16 and opstore16 are primitives. opstore32 and opstore64 are subroutines or compound instructions usable as if they were primitives. T is actually 15:0,31:16 after opswap16 . but we dont care about the upper 16-bits here. opstore16 leaves the address stack depth can only change plusmn1 per cycle. Purists might prefer: dw N addi Host serial interfaces The FPGA can be controlled via SPI by the Raspberry Pi, or by a Windows PC using a Xilinx Platform USB JTAG cable. There are two levels of request priority: Send new command and poll for response to previous New code images are copied to main memory via a third BRAM which bridges the CPU and serial clock domains. Thus downloaded, binary images execute automatically. Host commands are captured in the bridge BRAM and the CPU is signalled to action them. Its responses are collected by the host from the bridge on the next scan. The top-level main loop polls for host service requests. The first word of any host message is a command code. Requests are dispatched through the Commands jump table: optor moves vector to the return stack. Some host requests (e. g. CmdGetSamples) elicit lengthy responses. Data ports on the CPU side of the bridge are 16-bit. The CPU can read and write these via the data stack however, more direct paths exist for uploading main memory and GPS IF samples. The instruction opwrEvt GETMEMORY transfers a memory word directly to the bridge, using T as an auto-incrementing pointer. GETMEMORY is the only event which has stack effect. The instruction opwrEvt GETSAMPLES transfers 16 bits from the IF sampler: Unrolling loops at assembly time with dup() trades code size for performance, avoiding a decrement-test-branch hit and the entire application binary is still tiny however, long loops must be nested, as illustrated above. CHANNEL data structure An array of structures holds state variables and buffered NAV data for the channels. MASM has excellent support for data structures. Field offsets are automatically defined as constants and the sizeof operator is useful. The epoch service routine (labelled Method: ) is called with a pointer to a CHANNEL structure on the stack. Affecting OO-airs, stack-effect comments refer to it as this throughout the routine. A copy is conveniently kept on the return stack for accessing structure members like so: The Chans array is regularly uploaded to the host. Raspberry Pi application software The Raspberry Pi software is multi-tasked using what are variously known as coroutines, continuations, user-mode or light-weight threads. These co-operatively yield control, in round-robin fashion, using the C library setjmplongjmp non-local goto, avoiding the cost of a kernel context-switch: Up to 16 threads can be active:
Comments
Post a Comment