¿Es posible escribir una "interconexión" en VHDL a mano?

Una interconexión conecta uno o más maestros con uno o más esclavos en una especie de diseño de sistema en chip. En tal escenario, habría un maestro que contiene un bus estándar como Avalon-MM, AMBA AXI, etc. que necesita conectarse a varios esclavos.

Siempre que estemos usando uno de los buses estándar o tal vez incluso algo simple, ¿hay una forma estándar de escribir interconexión o tal vez hay un componente "listo para usar" que puedo obtener y usar como interconexión y esto puede ser portado a diferentes herramientas de proveedores de FPGA?

A mano quiero decir, no usar una herramienta de automatización que solo generará el código en función de ciertos parámetros de entrada.

Claro que puedes, si tienes tiempo que perder. Tal vez en algún sitio de código abierto encuentre algunas pistas
Por supuesto que es. Discutido un poco (¡para una interconexión más simple que AXI!) aquí: electronics.stackexchange.com/questions/579667/… Tenga en cuenta también que algunas tecnologías de verificación (www.osvvm.org) incluyen soporte de prueba para AXI para ayudarlo a mantenerse en el camino correcto .

Respuestas (1)

Sí.

En general, se puede hacer cualquier cosa que se genere automáticamente a mano. Por lo general, solo llevará más tiempo que ingresar algunos parámetros en una herramienta existente.

Para escribir una herramienta de automatización que genere código, el programador debe saber cómo escribir ese código a mano. De lo contrario, no podrían escribir las instrucciones detalladas que forman el algoritmo utilizado por la herramienta de automatización. Si tiene acceso a la misma documentación, no hay motivo para que no pueda hacer lo mismo que ellos.

Para escribir una interfaz AXI, solo necesita estudiar cientos de páginas de la documentación de AXI, comprenderla y luego escribir la implementación. Es posible que también deba estudiar unos cientos de páginas más de documentación para la tecnología en la que planea implementar su código.

Supuse que una interconexión simplemente consistiría en muxes y bloques de reenvío. ¿No es esto cierto?
Realmente no, casi siempre hay más que eso, AXI, por ejemplo, tiene transacciones de datos/direcciones y comandos que pueden ocurrir de forma asíncrona (sí, incluso en AXI lite), y NO se garantiza que la dirección esté allí antes que los datos. Esto significa que incluso decidir qué dispositivo descendente recibe la transacción puede implicar o no demorarse hasta que tenga la dirección. Escribir un dispositivo AXI que realmente logre ejecutar el bus en una transacción por reloj la mayor parte del tiempo es mucho más difícil de lo que debería ser en mi humilde opinión.