desktop

[Proyecto en desarrollo] - Osciloscopio digital 80 MSPS / 64k RAM

Hola, Actualmente estoy desarrollando mi prototipo de osciloscopio con DSP.
pero con lo mencionado por ustedes, creo que me encaminaré tambien por FPGA - CPLD.


Una pregunta seaarg, ¿como generas la señal de reloj para el adc y la fifo?
 
Hola jatoncel, bienvenido al post.

La señal de reloj es generada por un oscilador a cristal integrado. Es el cuadrado metalico que ves en esta foto:

Ver el archivo adjunto 130958

En este caso, de 50mhz. Los alimentas con 5V y en uno de sus pines te da el clock. Conseguibles hay hasta de 125mhz.

Agrego info: En placas de partes de computadora, lectoras de CD, etc, hay de esos pero muy chiquitos en SMD. He visto normalmente de 33mhz pero tambien vi de 48 y 50mhz.

Algo asi:

images


Este oscilador maneja el clock del CPLD y en el codigo del mismo esta la generacion de las distintas señales de clock para el adc, la fifo, etc.

Ejemplo:

- Entra el clock al pin principal de clock del cpld. Este clock maneja todo lo interno del cpld.
- Se deriva a traves de un pin de salida, un clock igual al principal para el WCLK de la fifo (es necesario que el read clock o el write clock esten permanente porque la fifo es internamente DRAM y lo usa en su circuito de refresco) Por lo que la grabacion en si se controla con WE (write enable)
- Se deriva tambien por otro pin el clock del ADC. Este clock esta activo solo cuando se captura. En el caso de mi adc, el mismo tiene un pipeline por lo que las primeras 4 muestras no son validas, pero jamas se transfieren al software. Ademas, el flanco de este clock es negado con respecto al de la FIFO, si mal no recuerdo. Todo depende del adc que se use y sus graficas de cuando el dato en la salida es valido para grabar.

Sino hay opciones de integrados PLL generadores de clock, les pones un cristal de referencia y ellos generan hasta 200mhz o mas, depende de una configuracion pero son un poco caros.

Como sugerencia, si tenes que comprar algo, fijate las caracteristicas de deriva que tengan las distintas opciones. No se exactamente que tan precisos son estos osciladores comparados con los integrados PLL. (si alguien sabe, me gustaria que lo comente asi me saca la duda!)

-------------------------------------------------------------------------------------

Parrafo aparte: Estuve investigando un poquito sobre el procesador software NIOS. Quiza no me alcance el CPLD pero para el proximo osciloscopio (2 canales, 100mhz, blabla) voy a evaluar la posibilidad de resumir todo en el cpld, sacando el pic de la ecuacion. Esto seria el controlador de captura + procesador todo dentro del cpld y un FT232 externo para conectividad usb.
 
Última edición:
Una pequeña actualizacion:

Estoy en proceso de intentar integrar dentro del trigger digital, un filtro HF digital, de forma tal que se puedan disparar señales como las de video sin problemas.

Para hacerlo, tome un conjunto de samples reales de una señal de video, los puse en excel y genere un grafico.

Luego, a esos samples les aplique esta formula:

sample_actual = (sample_actual * 0.01) + (calculo_previo * 0.99)

Con esto, logro un filtro pasabajos digital "barato" en terminos de recursos, ya que es muy similar a promediar 100 muestras, pero ocupando solamente 1 byte para la memoria de sample calculado previo.

Asi, genero un nuevo grafico en excel y la verdad que promete. La señal queda muy limpia y se ve bien claro donde comienza el pulso de vertical para hacer trigger ahi.

Se puede variar el filtro cambiando el peso de la ponderacion y, por ejemplo, tomar 10 muestras virtuales de esta forma:

sample_actual = (sample_actual * 0.1) + (calculo_previo * 0.9)

Adjunto link sobre este tema (en ingles) http://www.embedded.com/design/configurable-systems/4025591/Digital-filtering-without-the-pain

Ahora que lo resolvi en la teoria, mi problema va a ser implementarlo en la practica. En el CPLD estoy usando 52 de 64 macroceldas (cada una de ellas es un flip-flop de memoria) y tambien me estoy quedando sin compuertas internas, por lo que voy a tener que apretar al maximo el codigo VHDL a ver si lo puedo hacer entrar en este CPLD.

Saludos!
 
Estoy desaparecido un tiempo porque estoy desarrollando una version mas completa.

Me llego una FPGA de altera, concretamente EP3C16 con la que estoy jugando. Junto con un par de ADC08200 que tienen que llegar estoy haciendo lo siguiente:

- Osciloscopio "de banco" digital
- 2 canales a 200 MSPS o combinacion 1 canal a 400 MSPS (no se si llegare a tanto con los IO del fpga)
- 750mhz ancho de banda analogico
- Totalmente independiente de la PC.

Para esto ultimo, estoy evaluando algunas variantes:

- Tengo una tablet 7" con el digitizer roto. Puedo usarla como pantalla y "cpu" para albergar el programa o el proceso pesado de datos (FFT,etc)
- Tengo un raspberry PI con pantalla de 7" para lo mismo, pero usando un OpenHantek modificado en raspbian.
- Tengo una notebook 17" del año del ñaupa

Aun no se que usar, lo que si tengo claro es que los controles del osci los quiero hacer con encoders rotativos, potenciometros y botones. Es decir, la interfaz NO estaria en el programa.

Tambien podria directamente generar una señal VGA o LVDS con el fpga para hacerlo aun mas directo, pero no estoy seguro de querer desechar la capacidad de proceso de una compu como la tablet o la raspi.

- Manejo VGA: Pro: Rapidez, Contra: Complejidad y limitaciones (ademas de tener que hacer un frame buffer o procesar los datos "on the fly")
- Manejo a traves de raspi GPIO o Tablet USB: Potencia de hard y soft, pero con la contra de funcionamiento igual a cualquier osci usb (rafagas de captura)

En fin, ando estudiando los pro y contra de cada variante. Amen de que no se si llegare a hacer con exito una placa de 200mhz. Quiza tenga que decantar por 100mhz pero veremos hasta donde llego. El core del FPGA llega a funcionar a 400mhz, lo que no estoy seguro es de los IO, ademas de los problemas de PCB a esas frecuencias.

Ademas, en mi investigacion logre hacer andar un Nios II dentro del fpga, que seria el controlador del osciloscopio.

Hasta ahora estoy usando memoria interna del fpga, que tiene bastante pero no suficiente para esta aplicacion.

Queria preguntarles: Si implemento un controlador para SDRAM o mejor aun, para DDR:

- La SDRAM corre a 133mhz maximo segun el Qsys para este fpga.
- La DDR, supongo que se puede llevar a 266mhz

La pregunta es: Tienen idea si se puede hacer grabar continuamente datos a estas velocidades? Entiendo que mientras este haciendo burst si, pero cuando tengo que cambiar de fila en la ram hay un delay de precarga.

Creo haber entendido que puedo estar haciendo grabacion en burst en un banco, mientras que a la vez estoy activando otro banco donde tenga seleccionada otra fila. De esta forma, podria hacer una grabacion continua a tiempo constante? (Dicho tiempo seria un periodo de 5ns a 200mhz, solo alcanzable en DDR)

Sino uso la memoria interna del FPGA pero dispongo en este de unos 16K x 16bits o un poco menos. Para poder hacer esto tendria que hacer una base de tiempos variable con prescalers en el vhdl pero quiero evitarlo a fin de poder tener una "foto" de una captura a la cual le pueda hacer zoom in/out (para ello necesito de todos los samples posibles a maxima velocidad)

Cualquier informacion es apreciada!
 
Atrás
Arriba