En lógica digital, cuando se le da un requisito de un FIFO de 64 bytes, ¿es posible calcular el ancho y la profundidad?

0

Tengo un dispositivo de entrada que puede escribir en serie, paralelo de 8 bits o paralelo de 16 bits. Conozco la frecuencia de entrada y la velocidad de escritura máxima de esos formatos de datos.

Me dan el requisito de un FIFO de "64 bytes", con una palabra que consta de 4 bytes. Quiero probar este código genérico VHDL que encontré en línea. Las constantes necesarias para modificar son "DATA_WIDTH" y "ADDR_WIDTH". Puedo ver en el código, 1 palabra está asociada con ADDR_WIDTH.

fragmento de código:

...
constant FIFO_DEPTH : integer := 2**ADDR_WIDTH; --given equation???
signal pNextWordToRead : std_logic_vector(ADDR_WIDTH - 1 downto 0);
...

Pero también calcula la profundidad para ti. Entonces, si primero conecto el tamaño de mi palabra, puedo calcular mi profundidad. ¿También podría calcular mi Ancho de datos como DATA_WIDTH = 64 byte / word size (derivado del tamaño FIFO = ancho x profundidad)? Si estoy usando los valores incorrectos, ¿cómo calcularía mi profundidad correctamente?

¿Entonces el ancho de datos no es el mismo que el ancho FIFO? Si el ancho de los datos es menor que el ancho de la dirección, se necesitaría más de 1 ciclo para escribir una dirección completa.

Esta implementación tiene sentido para mí en este momento porque mi profundidad es mucho y no desbordaré adecuadamente (mi reloj de lectura también es mucho más rápido).

    
pregunta DeadSupra

1 respuesta

1

Creo que su confusión proviene del hecho de que el código que publicó se refiere a una "dirección", mientras que normalmente cuando utiliza un FIFO, no existe el concepto de una "dirección". Como usuario normal, simplemente "inserta" datos en los datos FIFO y "pop" fuera de FIFO. Esto hace que la aplicación de un FIFO sea fácil de comprender. Aún debe comprender y considerar el concepto del ancho de datos de FIFO y la profundidad de FIFO.

Si está diseñando un FIFO, debe darse cuenta de que un FIFO es solo un bloque de RAM con alguna lógica que controla la dirección de lectura / escritura automáticamente (e internamente). Dado que los bloques RAM tienen líneas de dirección, al menos debemos considerarlos. Esto es fácil: la profundidad será 2 ^ (numAddrBits). O alternativamente, el número de bits de dirección debe ser, como mínimo, ceil (log2 (profundidad)).

Esta imagen puede ayudarte a visualizar:

La tarea fundamental de diseñar un FIFO es determinar cuántos bits realmente necesita almacenar. En su ejemplo, esto era 64 bytes, o 512 bits. Lo siguiente que debe hacer es decidir cómo desea organizar estos bits. Por ejemplo, puede elegir que su FIFO tenga una longitud de palabra de 8 bits y una profundidad de 64 palabras, lo que significa que su RAM necesitaría ceil (log2 (64)) = 6 bits de dirección.

Para su ejemplo, ya se tomó la determinación: longitud de palabra = 4 bytes.

    
respondido por el user2913869

Lea otras preguntas en las etiquetas