¿Cómo sabe AXI-Interconnect dónde encaminar los datos?

1

Estoy interesado en saber dónde entran exactamente en juego las Direcciones (BASE_ADDR) establecidas en el "Editor de Direcciones" de un Diseño de Bloque Vivado en la Parte FPGA. Tengo varios bloques con AXI-Lite conectados a un Zynq a través de un AXI-Interconnect, que funciona bien. Pero quiero saber cómo:

Según mi entendimiento actual, el enrutamiento debe estar en algún lugar del Bloque de IP-Interconexión AXI, sin embargo, no puedo ver cómo sabe dónde enrutar el bus ya que "Personalizar IP" no muestra nada relacionado con las Direcciones. Simplemente parece conectar mágicamente todo correctamente ...

Entonces, ¿cómo funciona?

Editar: Para mayor claridad, así es como se ve la parte de mi sistema:

                       ______________         
                      |              |---------- Block 1 (AXI-Lite)
                      |    AXI       |---------- Block 2 (AXI-Lite)
Zynq (AXI Bus) -------| Interconnect |---------- Block 3 (AXI-Lite)
                      |              |---------- Block 4 (AXI-Lite)
                      |______________|---------- Block 5 (AXI-Lite)

El Zynq en sí no es relevante en esta imagen, solo hay un AXI-Bus completo a la izquierda y varios AXI-Lite-Blocks a la derecha, que pueden tener rangos de direcciones establecidos en el "Editor de direcciones" de Vivado .

Más aclaraciones: Sé cómo se utilizan los bits inferiores de las líneas de dirección para tratar registros únicos en AXI-Lite, pero la plantilla Xilinx no parece preocuparse por los bits superiores , por lo tanto, mi suposición de que el direccionamiento debe realizarse fuera del bloque AXI-Lite.

    
pregunta Blaubär

3 respuestas

1

El descodificador de direcciones está dentro de la interconexión. Hay parámetros en algún nivel dentro del bloque de IP que establecen las direcciones. Tal vez no estén expuestos en el nivel superior, ya que creo que el archivo de nivel superior se genera, pero están en algún lugar de la jerarquía.

    
respondido por el alex.forencich
1

El bus se dirige físicamente a cada bloque que necesita acceso a él. Cada bloque es responsable de descodificar sus propias direcciones, por lo que cada uno tiene una configuración de "dirección base". Depende de usted asegurarse de que los rangos de direcciones no se superpongan.

    
respondido por el Dave Tweed
1

Tu diagrama ayuda.

La infraestructura AXI es una red 'estrella', no un 'bus'.

El motivo es que AXI usa un protocolo de intercambio ( valid y ready ) para cada transferencia. Estos se emparejan con cada válido teniendo uno listo. (No puedes dar muchos válidos y esperar a que alguien esté listo para regresar).

Por lo tanto, si tiene un bus AXI que va a muchos destinos, necesitará un flujo AXI dedicado con su propia validez y listo. Así se hace dentro de la interconexión. La dirección se utiliza para decidir a qué puerto de salida debe ir la transacción. Por lo tanto, el descodificador de direcciones que está buscando está dentro de la interconexión AXI.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas