Sunday 26 March 2017

Moving Media Verilog

Ultime notizie prossimi 50 linguaggi di programmazione La seguente lista di lingue denota da 51 a 100. Dal momento che le differenze sono relativamente piccole, i linguaggi di programmazione sono elencate solo (in ordine alfabetico). (Visual) FoxPro, ABC, ActionScript, APL, AutoLISP, bc, Bourne shell, C shell, CFML, cg, CL (OS400), Clipper, Common Lisp, cristallo, Eiffel, Elixir, Elm, Emacs Lisp, Fattore, Forth, Hack, Icona, IDL, Inform, Io, J, Julia, Korn shell, Kotlin, acero, ML, NATURALE, NXT-G, OCaml, OpenCL, OpenEdge ABL, Oz, PLI, PowerShell, Pure Data, REXX, S, Smalltalk , SPARK, SPSS, standard ML, stata, Tcl, VBScript, Verilog Questo Monthaposs variazioni dell'indice Questo mese sono state apportate le seguenti modifiche alla definizione dell'indice: ClojureScript è stato aggiunto alla voce Clojure. Questo è stato un suggerimento da Alex Miller. Olaf Buddenhagen e alcuni altri si chiedeva perché Nim non faceva parte dell'indice TIOBE ancora. Infatti, Nim si qualifica per l'indice. Si entra l'indice TIOBE alla posizione 129 di questo mese. Accanto a Lua anche LuaJIT è accettata come una voce per Lua. Questo grazie alla Szbnwer. Infine, Mahmoud Fayed ha proposto di aggiungere il linguaggio di programmazione anello all'indice. Questo linguaggio fatto il suo debutto alla posizione 104. Ci sono un sacco di mail che devono ancora essere elaborati. Non appena c'è più tempo a disposizione la vostra posta sarà risposto. Perfavore sii paziente. Molto a lungo termine Storia di vedere il quadro più grande, si riportano di seguito le posizioni dei primi 10 linguaggi di programmazione di molti anni fa. Si prega di notare che si tratta di posizioni medi per un periodo di 12 mesi. Bugs amp richieste di modifica Questa è la top 5 dei più richiesti cambiamenti e bug. Se avete suggerimenti su come migliorare l'indice donapost esitate ad inviare una e-mail a tpcitiobe. A parte programmingquot quotltlanguagegt, anche altre query, come quotprogramming con ltlanguagegtquot, quotltlanguagegt developmentquot e quotltlanguagegt codingquot dovrebbero essere provati. Aggiungere query per altre lingue naturali (a parte inglese). L'idea è quella di iniziare con il cinese Baidu motore di ricerca. Questo è stato implementato in parte e sarà completata nei prossimi mesi. Aggiungere un elenco di tutte le richieste termine di ricerca che sono state respinte. Questo è quello di ridurre al minimo il numero di messaggi ricorrenti circa Rails, JQuery, JSP, ecc Avviare un indice TIOBE per i database, i sistemi di gestione della configurazione software e framework applicativi. Alcuni motori di ricerca permettono di interrogare le pagine che sono stati aggiunti l'anno scorso. L'indice TIOBE dovrebbe monitorare solo le pagine aggiunte di recente. Domande frequenti (FAQ) D: Posso mostrare l'indice TIOBE nel mio weblogpresentationpublication A: Sì, l'unica condizione è quella di fare riferimento al suo quottiobequot fonte originale. D: Come posso nominare una nuova lingua da aggiungere all'indice TIOBE R: Se una lingua soddisfa i criteri di essere elencati (cioè è Turing completo e dispone di una propria voce di Wikipedia che indica che si tratta di un linguaggio di programmazione) e è sufficientemente popolari (oltre 5.000 risultati per quotltlanguagegt programmingquot per Google), quindi si prega di scrivere una e-mail a tpcitiobe. D: Vorrei avere la serie completa di dati dell'indice TIOBE. Questo è possibile A: Abbiamo speso un sacco di sforzo per ottenere tutti i dati e mantenere l'indice TIOBE fino ad oggi. Al fine di compensare un po 'per questo, chiediamo una tassa di 5.000 degli Stati Uniti per il set di dati completo. Il set di dati va da giugno 2001 ad oggi. E 'iniziato con 25 lingue nel 2001, e ora misura più di 150 lingue una volta al mese. I dati sono disponibili in formato separato da virgole. Si prega di contattare salestiobe per ulteriori informazioni. D: Perché è il massimo impiegato per calcolare la classifica per un raggruppamento, perché non la somma A: Beh, è ​​possibile farlo in entrambi i modi ed entrambe sbagliate. Se si prende la somma, allora si ottiene l'intersezione due volte. Se si prende il massimo, poi si dimentica la differenza. Quale scegliere qualcuno Supponiamo che si presenta con un nuovo termine di ricerca che si trova 10 dell'originale. Se si prende il massimo, non cambia nulla. Se si prende la somma quindi i feedback saliranno 10. Così facendo la somma sarà un incentivo per alcuni a venire con tutti i tipi di termini oscuri per una lingua. Thataposs questo abbiamo deciso di prendere il massimo. Il modo corretto per risolvere questo è ovviamente quello di prendere la somma e sottrarre l'intersezione. Questo darà luogo ad un'esplosione di query aggiuntivi che devono essere eseguite. Supponiamo che una lingua è un raggruppamento di 15 termini, allora è necessario eseguire 32.768 interrogazioni (tutte le combinazioni di intersezioni). Quindi questo non sembra possibile neanche. Se qualcuno ha una soluzione per questo, fatecelo sapere. D: Cosa è successo a Java nell'aprile 2004 hai cambiato metodologia R: No, non abbiamo cambiato la nostra metodologia in quel momento. Google ha cambiato la sua metodologia. Hanno eseguito un'azione generale spazzata di sbarazzarsi di tutti i tipi di siti web che era stato spinto in su. Di conseguenza, non vi è stato un calo enorme di linguaggi come Java e C. Al fine di ridurre al minimo tali fluttuazioni in futuro, abbiamo aggiunto altri due motori di ricerca (MSN e Yahoo) pochi mesi dopo questo incidente. D: Perché YouTube è usato come un motore di ricerca per l'indice TIOBE A: Prima di tutto, YouTube conta per meno di 10 di tutte le valutazioni, quindi ha praticamente alcuna influenza sull'indice. YouTube è stato aggiunto come un esperimento. Si è qualificato per l'indice TIOBE a causa della sua alta classifica su Alexa. YouTube è una giovane piattaforma (quindi un indicatore per popolarità) e ci sono abbastanza alcune conferenze, presentazioni, consigli di programmazione e le introduzioni di lingue disponibili su YouTube. TIOBE controlla più di 586 milioni di linee di codice software per i propri clienti in tutto il mondo, in tempo reale, ogni day. Homemade 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. Inoltra lunghezza FFT deve essere un multiplo di questo. Campionamento a 10 MHz per 4 ms risultati in una dimensione FFT bin di 250 Hz. 41 Doppler devono essere testati ruotando i dati di dominio di frequenza, uno scomparto per volta, fino a plusmn20 bidoni plusmn5 KHz. La rotazione può essere applicata ad entrambe le funzioni. Il 22,6 MHz 1 ° IF dalla ADC a 1 bit è sotto-campionata da un orologio 10 MHz in FPGA, digitalmente down-convertirlo in un 2 ° IF di 2,6 MHz. Nel software, il 2 ° IF è down-convertito in banda base complessa (IQ) utilizzando quadratura oscillatori locali. Per segnali a due livelli, i miscelatori sono semplici porte XOR. Sebbene non mostrato sopra, i campioni vengono temporaneamente memorizzati nel buffer nella memoria FPGA. Il Pi non è in grado di accoglierli a 10 Mbps. 1.023 Mbps e 2,6 MHz sono generati da oscillatore a controllo numerico (NCO) accumulatori di fase. Queste frequenze sono piuttosto grande rispetto al tasso di campionamento, e non sono esatte sub-armoniche di esso. Di conseguenza, i sottufficiali hanno speroni frazionali. Il numero di campioni per chip codice tentenna tra 9 e 10. Per fortuna, i ricevitori DSSS sono tolleranti di interferenti a banda stretta, esterno o auto-generata. banda complesso viene trasformato nel dominio della frequenza da una FFT di andata che devono essere calcolato solo una volta. Un FFT di ogni codice satelliti CA è pre-calcolato. Il tempo di elaborazione è dominata dal più interno ciclo che esegue lo spostamento, la coniugazione, la moltiplicazione complessa e uno inverso FFT per test satellitare-Doppler. Il Raspberry Pi Videocore GPU potrebbe essere sfruttato per accelerare le cose. A 10 MHz frequenza di campionamento, la fase codice viene risolto ai 100ns più vicine. uscita CCF tipica è illustrato di seguito: Calcolo di picco di potenza media su questo dato fornisce una buona stima di SNR e viene utilizzato per trovare i segnali più forti. Di seguito sono stati ricevuti a 20:14 GMT del 4 marzo 2011 a Cambridge, Regno Unito con l'antenna su un davanzale esterno Lato nord: Da latitudini settentrionali, più satelliti GPS in genere si trovano nel cielo del sud cioè verso l'equatore. Il prelievo di campioni aumenta più SNR, rivelando i segnali più deboli, ma la cancellazione si verifica quando l'acquisizione estende transizioni dati di navigazione. lunghezza Forward FFT è un numero intero di millisecondi tuttavia, la FFT inversa può essere abbreviato, semplicemente buttando via i dati in bin di frequenza più elevate. SNR è conservato, ma fase di codice non è così nettamente risolto. Tuttavia, una buona stima della posizione di picco è ottenuto facendo la media ponderata dei due più forti cassonetti adiacenti e off-air test suggeriscono questo potrebbe lavorare anche fino a lunghezze FFT piuttosto breve inverso. Dopo aver rilevato un segnale, il passo successivo è di chiusura su, il monitoraggio e demodulare i 50 bps dati di navigazione. Ciò richiede due cicli di fase interdipendente bloccato (PLL) per tenere traccia del codice e del vettore di fase. Questi PLL devono operare in tempo reale e sono implementate come funzioni DSP in FPGA. software Pi ha un ruolo di supervisione: decidere quali satelliti per tenere traccia, monitorare lo stato di blocco e l'elaborazione dei dati di navigazione ricevuti. I cicli di monitoraggio sono bravi a mantenere la serratura, perché hanno larghezze di banda molto stretta però, questa stessa caratteristica li rende poveri ad acquisire serratura senza aiuto. Non riescono a vedere al di là della larghezza di banda loop per catturare qualsiasi cosa più lontano. le fasi iniziali e le frequenze devono essere predisposti per la misura fase di codice e Doppler spostamento del satellite bersaglio. Questo è orchestrato sotto controllo Pi. I loop devono essere in-lock fin dall'inizio e rimarrà tale. fase di codice è misurata rispetto al campione FFT. Il codice NCO nella FPGA viene azzerato all'inizio di campionamento e accumula fase a 1.023 MHz fissa. Successivamente viene allineato con il codice ricevuto interrompendo brevemente l'accumulatore di fase. spostamento Doppler del vettore 1575,42 MHz è KHz plusmn5 o ppm plusmn3. Colpisce anche il tasso di codice 1.023 Mbps entro il chip plusmn3 al secondo. La lunghezza della pausa viene regolata per scorrimento codice nel tempo in quanto il campione è stato prelevato. Fortunatamente, il codice Doppler è proporzionale alla Doppler vettore per il quale abbiamo una buona stima. software hardware spaccatura Nello schema qui sotto, codifica a colori mostra come l'implementazione del DSP di monitoraggio è ora divisa tra hardware e software. In precedenza, questo è stato tutto fatto in hardware, con identiche istanze parallele utilizzate per ciascun canale, facendo uso inefficiente delle risorse FPGA. Ora, il più lento di trasformazione 1 KHz è fatto da software, e il doppio dei canali possono essere ospitati in metà immobiliare FPGA. I sei accumulatori integrare-and-dump (Sigma) sono bloccati in un registro a scorrimento sul codice epoca. Una bandiera richiesta di servizio segnala la CPU, che legge i dati di bit in serie. Con 8 canali attivi, 8 del tempo di CPU viene speso eseguire l'istruzione oprdBit ma c'è un sacco di tempo, e di serie IO utilizza tessuti FPGA economicamente. Lussi come RSSI e la registrazione IQ (ad esempio per grafici a dispersione) possono ora essere concessa. Le funzioni di trasferimento F (z) del filtro ad anello ingoiare 2 di banda CPU per canale attivo. Questi sono i controllori (PI) standard di proporzionale-integrale: precisione a 64-bit viene utilizzato e guadagno coefficienti KI e KP, anche se limitato a potenze di 2, sono regolabili in modo dinamico. Ogni canale dover attendere sua volta NCO tasso-aggiornamenti può essere ritardato di decine o centinaia di microsecondi dopo un'epoca codice, ma questo introduce trascurabile sfasamento alle frequenze dove è determinato margine di fase. le tracce sottili sono 1-bit, che rappresenta teoricamente plusmn1. Il vettore 2.6 MHz viene prima de-diffusione mescolando con inizio, fine e codici puntuali. I e Q in banda base di prodotti complessi a partire dal secondo rango di XOR miscelatori cancello sono sommate oltre 10000 campioni o 1ms. Questo filtro passa-basso riduce drasticamente la larghezza di banda di rumore e di conseguenza aumenta SNR. Downsampling a 1 KHz richiede in poi percorsi di dati più ampi nel settore del software. fase di Codice è registrata utilizzando un Delay-Locked Loop convenzionale o cancello inizio-fine. Potenza nei canali precoce e tardiva è calcolata utilizzando P I 2 Q 2 che è insensibile alla fase. Precoce e codici fine degli anni sono un unico chip a parte cioè frac12 di chip avanti-e dietro puntuale. Questo diagramma aiuta a ottenere il senso di errore corretto: A Costas Loop viene utilizzato per il monitoraggio vettore e il recupero dei dati NAV nel canale puntuale. dati di navigazione, m, è preso dal bit di segno I-braccio con 180deg incertezza di fase. k ricevuto ampiezza del segnale e theta è differenza di fase tra portante ricevuta (sans modulazione) e la NCO locale. k varia da circa 400 per i più deboli segnali recuperabili fino a oltre 2000 per il più forte. Si noti come il termine di errore alimentato al controller F (z) pianta in Costas Loop è proporzionale alla potenza del segnale ricevuto ksup2. Monitoraggio pendio, e quindi guadagno ad anello, variare anche con potenza di segnale nel codice loop. Di seguito è riportato un diagramma di Bode di guadagno ad anello aperto per la Costas Loop a K500: la larghezza di banda Costas Loop è di circa 20 Hz, che è di circa ottimale per il monitoraggio del vettore. la larghezza di banda del ciclo del codice è di 1 Hz. potenza di rumore in tali larghezze di banda è piccola e le anse grado di monitorare segnali molto deboli. Quanto sopra Ki kP funzionano per la maggior parte dei segnali, ma hanno bisogno di far cadere una tacca per il molto più forte. Scilab prevede, e grafici a dispersione confermare, l'insorgenza di instabilità a kge1500. errori di parità non si verificano meno campioni randagi nella metà opposta del piano IQ. (I) Instabilità al kge1500 quanto sopra sono 2 fotogrammi consecutivi di 5 controtelai ciascuno. Sottotelai sono lunghi 300 bit e prendere 6 secondi per trasmettere. Colonna 1 è il preambolo 10001011. Questo appare all'inizio di ogni sottotrama, ma può verificarsi in qualsiasi punto dati. Il contatore a 17 bit nella colonna 5 è il tempo della settimana (TOW) e resetta a zero a mezzanotte Domenica. Il contatore a 3 bit nella colonna 7 è l'ID telaio ausiliario da 1 a 5. Sottotelai 4 e 5 sono subcommutated in 25 pagine ciascuno e un messaggio di dati completo composto da 25 immagini complete prende 12,5 minuti per la trasmissione. Io uso solo dei dati in telai ausiliari 1, 2 e 3 al momento. Risolvendo posizione utente satellite GPS Ogni trasmette la sua posizione e il tempo. Tempo inviato di volta Sottraendo ricevute e moltiplicandola per la velocità della luce è come una distanza ricevitore misura tra sé e satelliti. In questo modo con tre satelliti produrrebbe tre equazioni simultanee in tre incognite (posizione dell'utente: x, y, z) se il tempo preciso era disponibile. In pratica, orologi ricevitori non sono sufficientemente accurati, il tempo esatto è una quarta sconosciuta, quattro satelliti sono quindi necessari e quattro equazioni simultanee devono essere risolti: Un metodo iterativo è usato perché le equazioni sono non lineari. Usando centro terre (0, 0, 0) e la durata approssimativa come punto di partenza, l'algoritmo converge in soli cinque o sei iterazioni. La soluzione si trova, anche se l'errore di clock utente è grande. I satelliti trasportare orologi atomici ma anche questi hanno errori ei coefficienti di correzione a telaio ausiliario 1 devono essere applicate al momento della trasmissione. aggiustamenti tipici possono essere centinaia di microsecondi. Il tempo non corretta della trasmissione è costituito da incrostazioni e aggiungendo diversi contatori. Time-of-settimana (TOW) in secondi dalla mezzanotte Domenica viene inviato ogni telaio ausiliario. I dati segnano bordi 20ms intervalli all'interno di telai ausiliari 300-bit. Il codice si ripete 20 volte al bit di dati. lunghezza del codice è 1023 chips e tasso di chip è 1.023 Mbps. Infine, i 6 bit più significativi del codice di fase NCO vengono aggiunti, all'atto della trasmissione plusmn 15ns fissa. posizioni dei satelliti al momento di trasmissione corretto sono calcolati utilizzando effemeridi in controtelai 2 e 3. posizione orbitale a un dito del piede tempo di riferimento (tempo di effemeridi) è fornito con i parametri che permettono (x, y, z) la posizione da calcolare fino a qualche ore prima o dopo. Effemeridi sono regolarmente aggiornati e satelliti trasmettono solo la propria. orbite lungo termine di tutta la costellazione può essere previsto con precisione utilizzando i dati meno Almanacco nei controtelai 4 e 5 Tuttavia, questo non è essenziale se si utilizza una veloce ricerca FFT-based. Le soluzioni sono calcolati in terra-centrato, la terra-fisso (ECEF) coordinate. posizione dell'utente viene convertito in latitudine, longitudine e altitudine con una correzione per l'eccentricità della terra, che si gonfia all'equatore. I diagrammi di dispersione seguito illustrano ripetibilità, il beneficio della compensazione e l'effetto di povere scelte satellitari. quadrati della griglia sono 0.001deg su ogni lato. I puntini blu segnano 1000 correzioni. Giallo triangoli segnano i centri di gravità: (i) Lato nord davanzale della finestra (ii) l'antenna sul tetto (iii) esposto a est davanzale Il grappolo stretto (ii) è stato ottenuto con i satelliti in quattro diversi quartieri del cielo. Solo l'antenna sul tetto aveva una chiara visione in tutte le direzioni. Ma le buone correzioni sono stati ottenuti facendo la media, anche se metà del cielo è stato oscurato. correzioni Rooftop mostrano anche come diffusione (i) e (iii) se si scelgono i satelliti sbagliate. Le soluzioni di cui sopra sono state generate senza compensare i ritardi di propagazione ionosferica che utilizzano parametri pagina 18 del telaio ausiliario 4, che dovrebbe essere applicato, perché questo è un ricevitore singola frequenza. rifrazione ionosferica aumenta lunghezze del percorso tra gli utenti e satelliti. Nel mese di aprile 2012, ho fissato un bug che causava errori significativi nelle soluzioni user-posizione. Originariamente, per non trasformare le posizioni dei satelliti dalla Terra-centrato-terra-fisso (ECEF) per terra-centrato-inerziale (ECI) coordinate, mi è stato effettivamente ignorando la rotazione terrestre durante i 60 a 80 ms che i segnali erano in volo. Ora sto vedendo precisioni soluzione di posizione delle plusmn 5 metri, dopo una media, anche con una visibilità satellitare limitata. Ive creata una appendice mostra come si sviluppa la soluzione iterativa, partendo da una equazione gamma geometrica, che è linearizzato utilizzando un'espansione di Taylor Series, e risolto con metodi matrice, per il caso particolare di quattro satelliti o il caso generale di più, con il possibilità di utilizzare minimi quadrati ponderati per controllare l'influenza di particolari satelliti. Youll trovare questo e la soluzione di codice sorgente C nei link in fondo alla pagina. Im grato a Dan Doberstein per avermi inviato una prima bozza del suo libro GPS 2, che mi ha aiutato a capire l'algoritmo di soluzione. Il governo degli Stati Uniti ufficiale Interface Specification GPS 3 è un riferimento essenziale. Segnale monitor La disposizione circuito di cui sopra, per lo più implementato in FPGA, DE-spread prendendo il prodotto del codice a 1 bit IF e puntuale, lasciando 50 bps modulazione dei dati. Una piccola tacca a causa della soppressione della portante BPSK può semplicemente essere visto: Questi spettri mostrano la stessa trasmissione de-diffusione in diverse campate e larghezze di banda di risoluzione (RBW). Doppler era -1.2 KHz. Il rumore di fondo è antenna rumore termico amplificato e filtrato dalla striscia di IF. -3 DB larghezza di banda si guarda intorno 3 MHz, leggermente più ampia del previsto. Il vettore de-spread è 5 dB al di sopra del rumore al 30 KHz RBW e 25 dB sopra a 300 Hz RBW. intensità del segnale ricevuto presso l'antenna può essere stimata come -174110log10 (30e3) 5 -123 dBm. E ancora mi stupisce quanto bene le informazioni sul dominio della frequenza si conserva attraverso il duro-limitante Il trasmettitore LVDS è una corrente di uscita costante di 1 mW a 100 ohm. Potenza di picco visto al SA non può superare 0 dBm. Qui, vediamo questa potenza disponibile distribuite su una gamma di frequenze. Wideband integrato densità spettrale di potenza deve essere il primo oscillatore locale Ive edificio sperimentale sintetizzatori frazionaria-N utilizzando general-purpose a logica programmabile per diversi anni: Xilinx Spartan 3 FPGA Frac7 è stato costruito per questo scopo, ma non avevo idea Frac5 sarebbe stato utilizzato in un GPS ricevitore quando ho inizialmente disegnato io. La foto qui sotto mostra come l'uscita del VCO ROS-1455 on Frac5 era diviso resistively tra l'uscita SMA ed una divisione per 8 prescaler ittita HMC363. L'uscita divisore di 200 MHz viene instradato (differenziale) nella FPGA quale fase lo blocca ad un riferimento di master con i metodi documentati nei miei progetti precedenti. Microonde circuity su Frac7 è simile, ma utilizza uno splitter Mini-Circuits 3dB. Alta stabilità e basso rumore di fase vengono raggiunti, come si può vedere negli spettri uscita VCO mostrato sotto. Quando Frac5 è stato originariamente sviluppato, come un sintetizzatore di frequenza dedicata, commutazione simultanea su frequenze non armonicamente connessi è stato evitato per ridurre al minimo intermodulazione speroni. La FPGA era statica quando impulsi di clock che impostatii uscita del rivelatore di fase attraversato il tessuto. Nessun tale lusso è pratico quando il FPGA ospita un ricevitore GPS però, per fortuna, l'uscita dell'oscillatore locale è abbastanza buono: Il Marconi 2383 analizzatori di spettro 50 MHz STD USCITA è stato utilizzato come fonte di riferimento principale per Frac5 e tutti gli orologi ricevitore GPS interno. ricevitori GPS devono precisioni migliore di 1 ppm (parti per milione) per misurare plusmn5 spostamenti Doppler KHz sul 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:Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. Se si continua la navigazione nel sito, l'utente accetta l'utilizzo dei cookie su questo sito. Vedi le Condizioni d'uso e sulla privacy. Slideshare utilizza i cookie per migliorare la funzionalità e le prestazioni, e per fornire voi con la pubblicità in questione. Se si continua la navigazione nel sito, l'utente accetta l'utilizzo dei cookie su questo sito. Vedi le Condizioni d'uso per i dettagli sulla privacy e. Explore all your favorite topics in the SlideShare app Get the SlideShare app to Save for Later even offline Continue to the mobile site Upload Login Signup Double tap to zoom out Designing of 8 BIT Arithmetic and Logical Unit and implementing on Xilinx Vertex 4 FPGA Share this SlideShare LinkedIn Corporation copy 2017


No comments:

Post a Comment