Problemas con la canalización y la frecuencia de reloj

5
  1. ¿Podría explicarme por favor acerca de la canalización en FPGA y cómo se hace en el diseño del generador del sistema xilinx agregando registros y retrasos en el diseño de un sistema en particular?

  2. Tengo un diseño de sistema en el generador de sistema xilinx. Ese diseño cumple con la restricción de tiempo con 20ns (toma una frecuencia de reloj de 50MHz). Sin embargo, la placa FPGA que uso es Virtex 4. Ofrece un reloj de 100 MHz (10 ns) en el pin B15. Establecí 20ns como el período de reloj FPGA y el pin B15 en el token del generador del sistema. Pude generar netlist HDL sin ningún error. Sin embargo, no pude obtener ninguna salida del FPGA después de haber descargado el flujo de bits de xilinx ISE. Me preguntaba si sería el problema con la frecuencia del borad FPGA y mi diseño, ya que mi diseño cumple solo con 50MHz NO 100MHz.

Actualizar con más información

  1. Mi diseño:

No pude subir la imagen. Diseñé un sistema para generar la señal UWB.

  1. Para este diseño, solo logré alcanzar un máximo de 50MHz (20 ns) de frecuencia de reloj agregando registros y bloques de retardo entre las entradas y salidas. No pude reducir la restricción de tiempo por debajo de 20 ns. Porque cuando intenté reducirlo a 10 ns (intentando alcanzar 100MHz) al aumentar la cantidad de retrasos, terminé con un error "Recurso superpuesto", como se muestra a continuación ( Las cifras no son iguales, pero similares ).

Dispositivo elegido: 4vfx12ff668-10

Número de cortes: 6690 de 5472 122% ()  Número de Flip Flops: 20567 de 10944 188%
 Número de 4 LUT de entrada: 10072 de 10944 92%
    Número utilizado como lógica: 9969     Número utilizado como registros de desplazamiento: 103  Número de IOs: 7  Número de IOB vinculados: 6 de 320 1%
    Flip Flops IOB: 2  Número de GCLK: 2 de 32 6%
 Número de DSP48: 33 de 32 103% (
)

  1. Sin embargo, mi Virtex 4 FX12FF668 solo ofrece clk de 100 MHz en el pin B15 (es decir, el período de reloj FPGA (ns) = 10 y la ubicación del pin del reloj = B15). No tengo idea de cómo cambiarlo a 50MHz para adaptarlo a mi diseño y configurarlo en el token de sys gen.
pregunta Kortuk

4 respuestas

3

Su diseño no funcionará correctamente si se ejecuta a 100 MHz pero solo está especificado (por las herramientas) para ejecutarse a 50 MHz. Si lo hace, entonces es un milagro que no funcionaría cuando haces un cambio y ejecutas las herramientas. No lo hagas Ni siquiera lo hagas si tu reloj es de 100 MHz y las herramientas te dicen que el diseño puede funcionar a 99.5 MHz.

Para resolver su problema, puede escribir un simple divisor de reloj 'dividir por la potencia de 2' para reducir la frecuencia del reloj (algo como esto en Verilog):

reg [n:0] count; 

always @(posedge CLK_100) begin
  count <= count + 1;
end

BUFG bg_0 (.I(count[m]), .O(CLK_DIV));

(donde 'm' < = 'n' y 'bufg' es un búfer de reloj global, y debe usarse para diseños sincrónicos) o use un Digital Clock Manager (DCM).

Esperemos que eso resuelva sus problemas de canalización también, a menos que tenga que ejecutar el diseño completo a 100 MHz. Además de la canalización, puede considerar el uso de FIFO si tiene una parte del diseño que se ejecuta a 50 MHz y la otra a 100 MHz, pero tendrá que decir un poco más sobre lo que está haciendo para obtener ayuda más significativa aquí.

    
respondido por el Saar Drimer
2
  1. Se puede considerar que la canalización divide una operación que lleva mucho tiempo (ruta de datos de traducción larga) en una cantidad de operaciones más pequeñas. Entre cada operación, puede colocar un registro para almacenar en memoria intermedia los datos intermedios y las etapas de canalización del formulario. Al hacer esto con cuidado, puede aumentar el rendimiento de la operación.

  2. Debe asegurarse de que su diseño pueda mover los datos de entrada a salida dentro del período: 10ns. De lo contrario, no hay garantía de que el diseño funcione correctamente. El exceso de tiempo de su diseño puede o no funcionar de vez en cuando. Deberá reducir la ruta de datos de su diseño.

  3. Una forma de hacer esto sería aumentar las etapas de canalización de su ruta de datos. Por ejemplo, si su diseño anterior mueve la entrada A a la salida C en 20ns, puede insertar un registro B en el medio. Luego, puede mover datos desde la entrada A al registro B en 10ns y mover datos desde el registro B a la salida C en 10ns. Efectivamente, aún mueve los datos de A a C en 20 ns, pero su diseño ahora puede cronometrarse con un período de 10 ns (100 MHz).

    A --------- (20 ns) --------- C

    A - (10ns) - B - (10ns) - C

respondido por el sybreon
2

Con respecto a 2) debe configurar su frecuencia de reloj en la configuración del generador del sistema en 10ns para que coincida con lo que está ingresando. Si no cumple con la sincronización, no se garantiza que su diseño funcione, ya sea que necesita bajar el reloj entrante o mejorar el diseño hasta que pase las verificaciones de sincronización.

Para el trabajo de desarrollo temprano en el laboratorio, a menudo puedes perderte el tiempo perdido por unos pocos cientos de picosegundos, ¡pero no por 10ns! (E incluso si te salgas con la tuya en el laboratorio, ciertamente no enviaría un producto que no supiera el tiempo en ese tipo de restricción).

    
respondido por el Martin Thompson
0

Si no está obteniendo absolutamente nada del FPGA, creo que comienza con algo simple: cree un diseño simple que haga un contador y que conduzca algunos pines con él. Debería poder verlos alternar con un 'alcance' que lo ayudará a demostrar que el proceso de creación de secuencias de bits y de cargarlas en la fpga está funcionando; una vez que haya hecho las depuraciones, intente algo aventurero

    
respondido por el Taniwha

Lea otras preguntas en las etiquetas