Tengo una pregunta de diseño lógico / Verilog sintetizable. Mi pregunta es más lógica que la sintaxis.
Deseo implementar algún tipo de enrutador que tenga tres puertos de entrada / salida de UART RS232 dúplex completo, que se envían paquetes entre sí.
Principales puntos de diseño:
- Los paquetes son de tamaño variable y contienen los siguientes campos: origen (1 byte), destino (1 byte), longitud de carga útil (2 bytes), carga útil.
- la longitud de la carga útil es variable entre 4-2000 bytes.
- Quiero tener algún tipo de tabla de enrutamiento "qué destino se enrutará a cuál de los puertos UART", y algún tipo de firewall (no estoy seguro del nombre correcto) como "qué fuentes permitieron enviar paquetes a los cuales UART puertos ".
- se permite el bucle invertido (el paquete que se recibe y envía a través del mismo puerto)
- se permite la transmisión (tal vez la dirección de destino que se enruta a más de un puerto UART)
- el módulo debe ser genérico para que pueda expandirlo a más de 4 puertos.
Para mí, creo que la parte más difícil para comenzar es cómo manejar los paquetes de tamaño variable. Si los paquetes tuvieran un tamaño fijo y no fueran demasiado grandes, habría tenido una entrada FIFO y una salida FIFO para cada puerto UART:
reg [packet_size-1: 0] fifo [num_of_packets]
cada entrada FIFO habría almacenado en cada quince [I] un paquete completo que se recibió de la uart, y un módulo que lee paquetes completos de cada entrada FIFO, verifica la fuente del destino de cada paquete y el uso de esa ruta paquete a la salida FIFO deseada, y desde allí un transmisor UART que toma un paquete y lo envía byte tras byte. El problema es que un paquete puede ser realmente muy grande, por lo que no quiero mantener un fifo que tenga 2000 bytes en cada celda ...
¿Eso también plantea la cuestión de cómo transferir los paquetes entre los módulos internos? Como se dijo, un paquete puede llegar a ser muy grande.
Comprendo que hay muchas preguntas en mi publicación, pero agradeceré cualquier ayuda. Además, si hay algunos diseños de referencia o algo similar que puedan ayudarme, con gusto lo revisaré.
Gracias por la ayuda.