Generación de reloj usando FPGA

1

Estoy intentando utilizar kit Spartan 3E Generar reloj de 50 MHz. El kit viene con un cristal de 50 MHz que estoy tratando de usar.

Entonces, escribí un código simple para enviar el reloj desde el FPGA al conector SMA. El código es el siguiente:

module clock (in_clock, out_clock);

input in_clock;
output out_clock;

wire in_clock;
reg out_clock;

always @in_clock
out_clock = in_clock;

endmodule

El archivo UCF que menciona la configuración del pin es el siguiente:

NET "in_clock" LOC = C9;
NET "out_clock" LOC = A10;

La forma de onda de salida del reloj de 50 MHz se parece a la siguiente. La forma de onda es de 50 MHz pero no recibo pulsos cuadrados. Además, el nivel de voltaje es demasiado pequeño (< 10 mV). ¿Puede alguien decirme dónde podría estar el problema? 50 MHz clock http: //www.ee.iitb. ac.in/student/~neelsmehta/2012-02-23%2011.08.20.jpg

    
pregunta Neel Mehta

4 respuestas

1

La impedancia de entrada debe ser de 1 Mohm y no de 50 ohmios.

    
respondido por el Neel Mehta
5

La entrada de reloj de 50 MHz debe estar en el pin D9, no en C9. Debería revisar esto, ya que podría estar leyendo mal los esquemas y suponiendo demasiadas cosas que dejó fuera de su pregunta.

SI su amplitud de señal era cercana a 3.3v, entonces la onda cuadrada no tan cuadrada sería el resultado de cómo está terminando su señal (probablemente sin terminación) y de alcance incorrecto Técnicas de medición. Pero como su "señal" es de solo 10 mV, creo que hay otros problemas.

También debo mencionar que no conozco Verilog, así que asumo que su código de Verilog es bueno. Soy más de una persona VHDL ...

Por lo tanto, mi mejor conjetura sobre lo que está mal es esto ... Tienes tu entrada de reloj en el pin incorrecto. Su sonda de alcance está en la señal correcta, pero no hay nada allí. Está viendo una señal de 50 MHz en el o-scope debido a la interferencia y otros efectos de ruido, y esta señal en realidad no se está emitiendo desde el FPGA.

    
respondido por el user3624
2

Esto está llegando un poco tarde, pero una cosa que explicaría que solo se obtenga una salida de 10 mV es si JP9 no tiene un puente cargado. Eso significaría que no hay una conexión de alimentación a nivel de placa para los buffers de IO que deberían estar impulsando esta salida, y esperaría nominalmente que no hubiera ninguna salida.

Pero es posible que haya una ruta parásita a la fuente de alimentación de esos controladores desde alguna otra entrada de alimentación, o simplemente señal de fuga a través de los circuitos sin alimentación, lo que le permite ver la señal de salida muy pequeña.

    
respondido por el The Photon
1

Esto no responde a su pregunta, pero para darle seguimiento a la respuesta de David, puede simplificar su código de manera significativa:

module clock (in_clock, out_clock);

input in_clock;
output out_clock;

assign out_clock = in_clock;

endmodule
  • No es necesario declarar una entrada como wire o reg , porque nunca puede ser un registro.

  • out_clock se implementa mejor como un cable que como un registro, ya que lo estás implementando con lógica combinatoria. El único caso que conozco donde la lógica combinatoria se expresa comúnmente con un bloque siempre es generar un multiplexor.

  • No es necesario declarar explícitamente una red de puertos como un cable, porque ese es el valor predeterminado.

Creo que lo que escribiste también debería dar el mismo comportamiento que este código, pero valdría la pena probar la forma más simple, porque las herramientas de síntesis funcionan reconociendo patrones comunes en tu código, así que si expresas tu diseño en un " De manera inusual, es posible confundir la herramienta de síntesis. En este caso, podría ver que siempre bloquea e intenta implementar un pestillo o un flip-flop. Lo que resultaría en una lógica incorrecta para su diseño.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas