11 votos

FPGA: conteo o recuento de abajo?

Estoy aprendiendo a usar una FPGA (Papilio desarrollo de la junta,que tiene una xilinx spartan3e, utilizando vhdl).

Necesito dividir un pulso de entrada por un (codificado).

Puedo ver 3 opciones - más o menos, como pseudocódigo (a partir de 10 que cuenta como un ejemplo):

  1. Inicializar a 0, en la entrada flanco de subida aumentar en 1, comparar a 10; si son iguales, se restablecen a 0 y el disparo de salida de pulso
  2. Inicializar a 10, en la entrada de borde ascendente del descenso por 1, comparar a 0; si son iguales, restablecer el 10 y el disparo de salida de pulso
  3. Inicializar a 9, pero asegúrese de que hay al menos 1 "0" bit, que es mi bits de salida. En la entrada de borde ascendente del descenso por 1. Sobre el flanco ascendente del bit de salida, restablecer.

El ciclo de trabajo es importante.

Es una de estas mejores que los otros? Hay un mejor método que no he pensado?

Es allí una manera "estándar" que le dará el compilador de la mejor oportunidad de optimizar?

12voto

RubbleFord Puntos 2627

La optimización de este nivel se va a romper su corazón. El resultado podría cambiar debido a la tecnología de la FPGA que se está usando, de otros factores en la FPGA, pero también debido a factores fuera de su control, incluyendo el instalador de la semilla de número aleatorio.

Habiendo dicho eso, creo que la opción 3, será el mejor. Las opciones 1 y 2 tienen un comparador/O puerta va entre los contadores por lo que puede ser la señal de que el número objetivo ha sido alcanzado. Opción 2 puede ser ligeramente más rápido que 1, ya que todos pueden ser rectas O d juntos sin ningún tipo de inversores, pero de nuevo se ejecuta en pequeñas diferencias tecnológicas donde puede ser más rápido Y o XOR.

La opción 3 se salta la comparación para el bajo costo de un bit extra en el mostrador. Esta debe ser la pena, a menos que usted está severamente restringido en el flip-flops.

Un dato curioso acerca de los contadores es que tienden a ser agrupados en un dispositivo de tamaño específico dentro de un bloque de lógica, y podrás ver el calendario cambiar más de lo esperado si este bit extra te empuja fuera de ese grupo.

4voto

GSerg Puntos 33571

Otra opción sería la de inicializar el contador a 6 (=24 - 10), cuenta, y luego se restablece cuando la lleve a la salida se activa (es decir, el FFs son todos unos).

La ventaja de esto es que no requiere un extra de FF, y muchos FGPAs han dedicado auxiliar lógica para acelerar este tipo de realizar la operación en un contador o circuito sumador.

3voto

GRoNGoR Puntos 81

Depende. Por ejemplo: flip-flop retardo de propagación de 0→1 y 1→0 puede ser diferente, y por lo tanto un contador de transición retrasos 000→001 y 001→000 puede ser ligeramente diferente. Puede ser mayor o menor, dependiendo de la tecnología cmos se utiliza en la FPGA. Así que usted tiene que sintetizar y averiguar cuál es el que tiene mejor tiempo de rendimiento.

3voto

dwestbrook Puntos 1754

A partir de un compilador del escritor perspectiva: si utiliza integer, la representación interna es indefinido, y el compilador es libre para elegir la más eficiente aplicación.

Si la fuerza de una particular representación interna, el optimizador de intentar mejorar, pero va a empezar a partir de un poco peor punto de vista.

Algunos de los FPGAs han "precarga" de capacidades, donde los registros pueden ser inicializado para valores arbitrarios, en cuyo caso la inicialización de a \$N-1\$, contando hacia abajo y usando la parte más alta de llevar los bits de salida y reset (en el siguiente ciclo) es más eficiente que la aplicación de ambas un sumador y un comparador. Sin precarga, una serpiente puede ser mejor.

Si no se conoce la estructura interna, los recursos asignados a otra lógica (muchos de los FPGAs han dedicado de punto flotante de multiplicar-agregar la lógica que también se puede utilizar para implementar un contador si usted tiene restos de unidades) y son completamente seguros de que usted no será cambiar a un modelo diferente, la respuesta es "no pensar en ello".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X