1 Protocolo Introducción
Este artículo se basa principalmente en el análisis de la última especificación del protocolo AMBA 5 AHB y enumera las introducciones de simulación basadas en la experiencia de uso real.
AMBA AHB es una interfaz de bus adecuada para un diseño integrado de alto rendimiento. Define las interfaces entre componentes como componentes maestros, componentes de interconexión y componentes esclavos.
El AMBA AHB implementa las funciones requeridas para sistemas de alto rendimiento y alta frecuencia de reloj, que incluyen:
- transmisión en ráfaga
- Operación de borde de reloj único
- Experimentos sin estado
- El ancho de bits de datos admite 64, 128, 256, 512 y 1024.
Los dispositivos esclavos AHB más comunes son los dispositivos de memoria interna, las interfaces de memoria externa y los periféricos de gran ancho de banda. Aunque los periféricos de bajo ancho de banda pueden actuar como esclavos AHB, por lo general residen en el bus periférico avanzado (APB) de AMBA por razones de rendimiento del sistema. El puente entre AHB y APB de alto rendimiento se realiza mediante el esclavo AHB, llamado puente APB.
La figura 1 muestra un maestro AHB conectado con 3 esclavos AHB. La lógica de interconexión del bus incluye un módulo de decodificación de direcciones y un multiplexor de esclavo a maestro. El módulo de decodificación de direcciones convierte la dirección enviada por el maestro en una selección de señal SEL adecuada. Un dispositivo esclavo , el multiplexor selecciona razonablemente los datos de salida de cada esclavo al maestro. Tenga en cuenta que el bus AHB puede tener varios maestros.
1.1 Maestro
Tome un maestro típico como ejemplo para introducir señales de interfaz.
INPUT信号:
- HREADY : Lo da Slave, indicando que la transmisión está completa. La próxima transferencia está lista.
- HRESP : Alguna información de estado adicional proporcionada por Slave, como éxito, falla, etc.
- HRESETn : señal de reinicio global, baja efectividad, el reinicio se puede conectar directamente al reinicio del bus del sistema.
- HCLK , : Señal de reloj global.
- HRDATA[31:0] : Leer datos enviados por el puerto esclavo.
OUTPUT信号:
- HADDR[31:0] : dirección de bus AHB.
- HWRITE : señal indicadora de lectura y escritura, 1 es escritura, 0 es lectura.
- HSIZE[2:0] : Se utiliza para indicar el tamaño de los datos de cada transferencia.
- HBURST[2:0] : se utiliza para especificar el número de transmisiones en ráfaga y el método de incremento de dirección.
- HPROT[3:0] : señal de control de protección, utilizada para indicar el tipo de esta transmisión.
- HTRANS[1:0] : Se utiliza para indicar el tipo de transmisión, hay cuatro tipos en total: IDLE/BUSY/NONSEQUENTIAL/SEQUENTIAL, que son transmisión inactiva, ocupada, no secuencial y continua.
- HMASTERLOCK : Bloquea la transmisión maestra, la maestra no puede ser interrumpida durante el período de bloqueo.
- HWDATA[31:0] : escribe datos, el soporte máximo es de 1024 bits y se recomienda entre 32 y 256 bits.
- HNONSEC : Indica si la transmisión actual es segura.
- HEXCL : Se utiliza para indicar si la transferencia es una transferencia exclusiva (Exclusive Access).
- HWSTRB : habilitación de byte de datos de escritura, el ancho de bit es el ancho de bit HWDATA dividido por 8, el máximo es 128.
1.2 esclavo
El lado esclavo usa la señal de selección HSELx enviada desde el decodificador de direcciones para responder a la transmisión del bus.
slave端输出信号:
- HRDATA : leer datos, el ancho máximo de bits es de 1024 bits, se recomienda entre 32 y 256 bits.
- HREADYOUT : Señal de dispositivo esclavo listo, el uso es similar al PREADY de APB.
- HRESP : la señal de respuesta del dispositivo final esclavo, que indica si la transmisión actual es exitosa, "1" es incorrecto.
- HEXOKAY : Indica si la transferencia exclusiva es exitosa.
译码器信号:
- HSELx : señal de selección de dispositivo esclavo, el uso es similar al PSEL de APB. Cuando se selecciona Esclavo y la transmisión no es INACTIVA, HSELx debe ser efectivo al mismo tiempo que las señales de dirección y control.
多路选择器信号:
- HREADY : el bus genera esta señal internamente para notificar al Maestro y al Esclavo que la última transmisión ha finalizado y que el bus está listo para la siguiente transmisión.
2 Transferencia
2.1 Transmisión básica
AHB传输分两个阶段:地址阶段和数据阶段:
- Etapa de dirección: HWRITE, HADDR y otras señales de control son válidas al mismo tiempo, y luego HREADY se eleva para indicar que la dirección actual ha tenido efecto.
- Etapa de datos: HWDATA, HRDATA y otras señales relacionadas con datos son válidas, lo que indica el inicio de la lectura y escritura de datos. La etapa de datos puede abarcar varios ciclos de reloj HCLK, según el tamaño de los datos transmitidos.
HWRITE信号控制数据传输方向:
- HWRITE=1, significa una transferencia de escritura, el maestro escribe los datos en el bus HWDATA[31:0].
- HWRITE=0, significa una transferencia de lectura, el esclavo envía los datos al bus HRDATA[31:0].
- La siguiente figura muestra una sola transferencia de lectura y escritura en el bus AHB, incluida la lectura inmediata y la escritura inmediata.
Transferencia de lectura:
Transferencia de escritura:
En una transferencia simple sin estados de espera:
- Siguiendo el flanco ascendente de HCLK, el maestro conduce las señales de dirección y control al bus.
- Luego, el esclavo muestrea la dirección y la información de control en el siguiente flanco ascendente de HCLK.
- Después de que el esclavo haya muestreado las señales de dirección y control, puede generar una respuesta READYOUT. La respuesta se muestrea en el tercer flanco ascendente de HCLK.
Este ejemplo simple demuestra cómo las fases de dirección y datos de la transferencia ocurren durante diferentes relojes. Para cualquier transferencia, la fase de dirección ocurre antes que la fase de datos. Esta dirección y datos superpuestos son la base para la canalización del bus, lo que permite operaciones de alto rendimiento y proporciona a los esclavos tiempo suficiente para responder a las transferencias.
Los esclavos pueden insertar estados de espera en cualquier transferencia para ganar tiempo de finalización adicional. Cada esclavo tiene una señal HREADYOUT activada durante la fase de datos de la transferencia. El conector combina las señales HREADYOUT de todos los esclavos para generar una señal HREADY de control, controlando así todo el proceso de transmisión.
La siguiente figura muestra la inserción de transferencias de lectura y escritura en espera:
inserte dos transferencias de lectura en espera:
inserte una transferencia de escritura en espera:
Nota: la etapa de dirección y la etapa de datos se pueden canalizar, si se pueden realizar varias transferencias consecutivas, pero con direcciones used La operación se completa en la secuencia que se muestra en la siguiente figura, y los datos en A pueden iniciar la fase de dirección de B.
2.2 Tipo de transmisión
HTRANS[1:0]:
La siguiente figura muestra los tipos de transferencia NONSEQ, BUSY y SEQ.
- T0-T1, haz una lectura de 4 tiempos desde la transmisión NONSEQ.
- T1-T2, el maestro no puede ejecutar la segunda ráfaga e inserta una transferencia OCUPADA para retrasar la segunda ráfaga, y el lado esclavo devuelve los datos de lectura de la primera ráfaga.
- T2-T3, el maestro está listo para iniciar la segunda operación de ráfaga, por lo que se inicia la transmisión SEQ y el maestro ignorará cualquier dato de lectura devuelto por el esclavo.
- T3-T4, el extremo maestro ejecuta la tercera ráfaga y el extremo esclavo devuelve los datos de la segunda ráfaga.
- T4-T5, el maestro ejecuta la última ráfaga y el extremo esclavo no puede completar la transmisión, así que use HREADYOUT para insertar un ciclo de espera.
- T5-T6, el extremo esclavo devuelve los datos de lectura de la tercera ráfaga.
- T6-T7, el extremo esclavo devuelve los datos leídos de la última ráfaga.
3.3 Transferencias bloqueadas
Si el maestro necesita bloquear el acceso, también debe usar la señal HMASTLOCK. Esta señal indica a cualquier esclavo que la secuencia de transferencia actual es indivisible y, por lo tanto, debe procesarse antes de procesar otras transferencias.
Normalmente, las transferencias bloqueadas se utilizan para mantener la integridad de la señal, lo que garantiza que el dispositivo esclavo no realice ninguna otra operación entre lecturas y escrituras. La señal HMASTLOCK se muestra en la siguiente figura
Nota: Después de una transferencia de bloqueo, se recomienda que el extremo maestro inserte una transferencia IDLE.
La mayoría de los esclavos no necesitan implementar la función HMASTLOCK, solo necesitan ejecutar las instrucciones recibidas en orden. Múltiples maestros pueden acceder al esclavo. Por ejemplo, un controlador de memoria multipuerto (MPMC) debe implementar la señal HMASTLOCK.
Y al comienzo de la transmisión de datos IDLE, el maestro también puede activar el HMASTERLOCK y bajar la señal HMASTLOCK en el estado no IDLE.
3.4 Tamaño de transferencia
HSIZE[2:0] representa el tamaño de la transferencia de datos, la siguiente tabla enumera el tamaño de la transferencia
TAMAÑO[2:0] | bits de tamaño | Descripción |
---|---|---|
000 | 8 | Byte |
001 | dieciséis | Conviértete en la mitad |
010 | 32 | Palabra |
011 | 64 | mundo doble |
100 | 128 | línea de 4 palabras |
101 | 256 | línea de 8 palabras |
110 | 512 | - |
111 | 1024 | - |
Nota:
El tamaño de la transferencia está determinado por HSIZE, que debe ser menor o igual que el ancho de bits de datos del Bus. Por ejemplo, para un ancho de bits de datos de 32 bits, HSIZE debe usar 0b000, 0b001 o 0b010. Use HSIZE combinado
con HBURST para determinar el límite de la dirección.
3.5 Opción de ráfaga
El transporte busrt admite dos tipos, busrt incremental y envolvente.
- Las ráfagas incrementales acceden a ubicaciones secuenciales, y la dirección de cada transferencia en la ráfaga es una dirección incremental.
- El número de ráfagas de ráfagas envolventes está controlado por HBURST y HSIZE. Por ejemplo, para una ráfaga de 4 tiempos, la dirección de inicio de transmisión es 0x34, luego las direcciones de transmisión son 0x34, 0x38, 0x3c y 0x30.
- La codificación de la señal de ráfaga es la siguiente:
HbURST[2:0] | TIPO | Descripción |
---|---|---|
000 | SOLTERO | ráfaga de transferencia única |
001 | INC | Ráfaga incremental de longitud indefinida |
010 | ENVOLTURA4 | Explosión envolvente de 4 tiempos |
011 | INCR4 | Ráfaga creciente de 4 tiempos |
100 | ENVOLTURA8 | Explosión envolvente de 8 tiempos |
101 | INCR8 | Explosión incremental de 8 tiempos |
110 | ENVOLTURA16 | Explosión envolvente de 16 tiempos |
111 | INCR16 | Explosión incremental de 16 tiempos |
Nota: Todas las transferencias de ráfaga deben ser transferencias alineadas con el borde de la dirección, por ejemplo, las transferencias de palabras deben estar alineadas con el borde de la dirección de la palabra HADDR[1:0] == 0b00.