FPGA based USB I/O DSP - OfficinaTurini

Go to content
P1 USB-DSP un processore nato per generare forme d'onda digitali e con la semplicitá di poter dialogare con una USB 2 a piena banda.
Per molti anni ho progettato e costruito camere digitali con sensori CCD e CMOS che avevano un canale USB 2 per inviare le immagini ad un personal computer collegato.
Per far funzionare questi sensori, semplificando molto, occorre generare molte forme d'onda ed allo stesso tempo inviare su un canale di trasmisione veloce i dati digitalizzati.
É una operazione che ho realizzato molte volte con una FPGA ed altre volte con DSP commerciali. La versione con FPGA é sicuramente la piú veloce ma puó essere veramente poco flessibile, altresi la versione realizzata con un DSP offre una grande flessibilitá ma non raggiunge mai le velocitá della FPGA e soffre di un problema chiamato jitter che puó essere fonte di problemi.
Il desiderio quindi é stato quello di realizzare una scatola nera che potesse generare con estrema facilitá tutte le temporizzazioni richieste a far funzionare un sensore CCD con il suo relativo campionatore (che non soffrisse di jitter) e che potesse ricevere comandi da un canale USB2 e allo stesso tempo potesse inviare sullo stesso canale una gran quantitá di dati alla massima velocitá offerta da questa tecnologia (nel mio caso 40Mbyte/s).
Da questa necessitá é nato P1 detto USB-DSP, é un DSP che "vede" la USB come una normale porta ed ha istruzioni specifiche per la creazione di temporizzazioni molto precise. Ovviamente ha anche una ALU per fare la matematica e le operazioni logiche.
Il tutto é stato realizzato con una FPGA Actel (Microsemi) A3P1000 (1M gates) ed il dispositivo USB2 FT2232H di FTDI.
L'FPGA rimane libera per il 60% dando la possibilitá di poter aggiungere logica specifica per usi diversi.
Il caricamento del codice nel DSP avviene tramite il canale USB che offre anche la possibilitá di effettuare il debug.
Il linguaggio di programmazione é ovviamente l'assembler e per questo ho scritto un assemblatore specifico che genera binari o sorgenti C da pote richiamare nel proprio codice. Il tutto é stato testato su una camera digitale raffreddata (CHROMA C4 DSP) ed é stato in produzione per anni senza problemi.
I limiti di questo approccio sono per gran parte imposti dalla FPGA, abbiamo al massimo 3584 words per il codice e 128 words per i dati. La frequenza nominale massima garantita é di 50MHz mentre la minima é di 1.5MHz, il tutto é gestito da un PLL interno programmabile. Tutte le istruzioni sono eseguite in un colpo di clock.
La board Gatex realizzata accoglie una FPGA A3P1000 ed un chip FTDI FT2232H oltre alle necessarie alimentazioni.
Chi desiderasse sperimentare questo dispositivo lo puó acquistare a 350 euro (piú spese di spedizione) e questo include oltre alla board anche tutti i sorgenti C e della FPGA (progetto per Libero).

P1 USB-DSP a processor born to generate digital waveforms and with the simplicity of being able to communicate with a full band USB 2.
For many years I designed and built digital cameras with CCD and CMOS sensors that had a USB 2 channel to send images to a connected personal computer.
To make these sensors work, simplifying a lot, you need to generate many waveforms and at the same time send the digitized data to a fast transmission channel.
It is an operation that I have carried out many times with an FPGA and other times with commercial DSPs. The FPGA version is certainly the fastest but it can be really not very flexible, also the version realized with a DSP offers a great flexibility but it never reaches the FPGA speed and suffers from a problem called jitter which can be a source of problems.
The desire was therefore to create a black box that could easily generate all the timings required to operate a CCD sensor with its relative sampler (which did not suffer from jitter) and that could receive commands from a USB2 channel and the at the same time he could send a large amount of data on the same channel at the maximum speed offered by this technology (in my case 40Mbyte / s).
From this need was born P1 called USB-DSP, it is a DSP that "sees" the USB as a normal port and has specific instructions for creating very precise timings. Obviously it also has an ALU for doing mathematics and logical operations.
Everything was done with an Actel FPGA (Microsemi) A3P1000 (1M gates) and FTDI's USB2 FT2232H device.
The FPGA remains free for 60% giving the possibility to add specific logic for different uses.
The code is uploaded to the DSP via the USB channel which also offers the possibility of debugging.
The programming language is obviously the assembler and for this I wrote a specific assembler that generates binaries or C sources to be able to call in its own code. Everything has been tested on a cooled digital camera (CHROMA C4 DSP) and has been in production for years without problems.
The limits of this approach are for the most part imposed by the FPGA, we have at most 3584 words for the code and 128 words for the data. The maximum guaranteed nominal frequency is 50MHz while the minimum is 1.5MHz, everything is managed by an internal programmable PLL. All instructions are executed in a clock shot.
The Gatex board realized houses an A3P1000 FPGA and an FTDI FT2232H chip in addition to the necessary power supplies.
Those wishing to experiment with this device can buy it for 350 euros (plus shipping) and this includes in addition to the board all the C and FPGA sources (project for Libero).
Free counters!
VAT: IT 02230330504
(C) 2016-2024 Officina Turini, Tutti i diritti riservati
Back to content