Autor Tema: Reanudación: problema enlace pic-fpga  (Leído 1223 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado camope

  • PIC10
  • *
  • Mensajes: 4
Reanudación: problema enlace pic-fpga
« en: 11 de Septiembre de 2006, 14:25:18 »
Última respuesta de Modulay:

-He probado el sistema físicamente y me ocurre exactamente lo mismo que a tí.
-Podría ser un problema de sincronización,aunque suponiendo que el pic está funcionando a 4 MHz o más,lo que le da bastante margen para proporcionarle -los datos al módulo isb16,creo que se puede descartar esa posibilidad.
-De todas formas te comento un par de detalles que he observado:
-Sería bueno que dotases a tu sistema de un reset...esto es norma para el diseño de sistemas síncronos.Inicializar variables y señales en la zona de -declaraciones es válido para simulaciones,pero no es una práctica aconsejable.Dota a todos tus módulos de una entrada de reset y aprovéchala para -inicializar estados y señales internas,así te asegurarás de que la máquina se inicializa correctamente.
-Otra cosa que deberías replantearte es la gestión que haces de las señales de clock.En vez de usar ese divisor de frecuencia que has diseñado te aconsejaría -que usases los módulos DCM que trae tu fpga.Estos módulos te brindan la posibilidad de obtener señales de reloj de diferentes frecuencias a partir del reloj -principal...con ello conseguirías que las diferentes señales de reloj se distribuyan de forma homogénea a través de las redes que la spartan trae -específicamente para ello.Si no sabes usar estos módulos DCM dímelo y te explico como configurarlos e incluirlos en tu diseño.
-¿Podrás explicar un poco el funcionamiento del protocolo y el de los módulos isb16 y banco_registro? He estado ojeando el código,pero sin conocer el -funcionamiento es difícil entenderlos.
-¿Qué version del xilinx estás usando?

contestación:

Primero darte las gracias por haberte tomado la molestia de probarlo, por cierto ¿has probado conectar directamente las salidas y entradas de la fpga sin pasar a través del pic?.

Por orden:

- Sé que sería adecuado incluir un reset, pero todavía el circuito está en desarrollo y a demás una vez en el montaje definitivo, en estado reposo la línea scl debe estar a “1” lo que hace que el circuito se resetee automáticamente al cabo de unos ciclos. Cosa que también pasa al final de la transmisión de un dato puesto que contempla un tipo de stop, que además de indicar fin de transmisión del dato, devuelve al circuito a un estado inicial deseado.

- A lo de inicializar variables en la zona de declaraciones te doy toda la razón, pero tanto probar se me pasó.

- Lo de la gestión del clock, si mal no recuerdo no brinda la posibilidad de reducir tanto la señal de reloj como para las frecuencias tan bajas que necesito, aunque no estoy seguro de ello, rectifícame en tal caso, de todas maneras, te agradecería mucho el que me explicaras un poco cómo funcionan y las directivas que hay que utilizar.

- Funcionamiento: como ya sabes, el red_frec da diferentes frecuencias para diferentes módulos, es un simple divisor de frecuencia para los módulos display, isb16 y compr.

         El módulo isb16 el es corazón de la comunicación, funciona como esclavo. La transmisión de un dato comienza con la puesta a “0” de la línea scl, es en ese momento cuando la línea sdl toma el valor del primer bit que irá sucesivamente cambiando con cada bajada del reloj hasta completar los 16 bits que componen una transmisión. Los primeros 5 bits lo componen la dirección, el 6 bit indica si es de lectura o escritura, los bits 7 y 8 todavía no les he dado ninguna utilidad, por lo que pueden tomar cualquier valor. Después del octavo bit, si es una operación de lectura (bit 6 a “1”), el control de la línea sdl lo toma la fpga, en caso contrario, el dispositivo que se comunica con esta, en este caso el pic. Los últimos 8 bits lo componen el dato. La fpga nunca manejará scl, que será en todo caso una entrada para la misma. Un bit permanecerá constante durante un ciclo completo de scl, muestreándose en la mitad del ciclo, que se corresponde con la subida de scl.

         El módulo banco_registro es simplemente un banco de 16 registros que en el futuro servirán para la configuración de un dispositivo. Éste tiene una entrada que indica lectura/escritura,  otra el dato, la dirección, y la última enable, a parte tiene una salida para el dato de salida en caso de lectura. En realidad ahora tiene otras salidas, para el módulo display, pero que en el módulo definitivo no estarán.

         El módulo display, pues como su nombre indica controla el display, y me sirve para comprobar simplemente que la operación de lectura o escritura es correcta, el primer carácter muestra los últimos cuatro bits de la dirección, el segundo “L” o “E” si es una operación de lectura o escritura, y los dos últimos el dato.

         Para finalizar, el módulo compr sólo simula una transmisión de un dato (sólo escritura).

- La versión del Xilinx es la 6.2.03i.

Un saludo y gracias (menuda parrafada).

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Reanudación: problema enlace pic-fpga
« Respuesta #1 en: 13 de Septiembre de 2006, 17:38:06 »
En cuanto a las limitaciones en frecuencia de los DCM tenías razón.No pueden trabajar con frecuencias de entrada menores a 18 MHz ni proporcionar frecuencias de salida menores a 1.5 MHz.
De todas formas son útiles cuando se trabaja a frecuencias altas y hay que tener cuidado con los retardos,además de que te sirven también para multiplicar el clock ó para desfasarlo,según te convenga.
Yo uso la versión 7.1 del ise webpack,aunque imagino que no diferirá mucho de la versión que usas tú.
Para incluir un dcm en tu diseño:

- Vas a la menú Proyect -> New source.
- Seleccionas "IP(Architecture Wizard)" y le das un nombre al archivo.
- Ahora seleccionas "Single DCM".
- Pulsa "Finalizar"

Hecho esto te debe salir una ventana como la de la imagen,en la que puedes configurar los parámetros del dcm.
Como salidas,el dcm te puede proporcionar la señal de clock original (CLK0),la misma desfasada diferentes ángulos(CLK90,CLK180...),multiplicada por 2(CLK2X),dividida(CLKDV),etc...

- Puedes habilitar las que quieras,en nuestro caso,habilitas CLKDV(CLK0 tb la dejas habilitada),le especificas la frecuencia de entrada (50 MHz) y seleccionas el factor de división (2 - 16).
- El resto lo dejas como está.
- En el siguiente cuadro de diálogo que te sale te aseguras de que esté seleccionada la opción "Use global buffers".
- Pulsas en "Siguiente" y después en "Finalizar".

Si todo marchó bien se te habrá incluído un archivo de extensión .xaw en el proyecto.Debes seleccionarlo y en la pestaña "Process" pinchas sobre "Create Schematic Symbol".
El símbolo se te habrá añadido a la categoría que contiene el resto de macros creadas por tí...le pinchas y ya puedes colocarlo en el esquemático.