Configuración PCIE
El mayor cambio entre PCIe y PCI es el cambio de paralelo a serie, y a través de La señalización diferencial transmite señales.
BAR (Registro de dirección base)
DW (32 bits)
PCIe es un protocolo en capas encapsulado que se genera en el núcleo del dispositivo. Luego pasa a través de la capa de transacción, la capa de enlace de datos y la capa física, respectivamente. Después de pasar por la capa de transacción, la capa de enlace de datos y la capa física, se agregan en secuencia ECRC, número de secuencia, LCRC, inicio, fin y otros bloques de datos.
En el bus PCIe, la solicitud de escritura en memoria TLP utiliza el método de transferencia de datos de publicación. A diferencia de todos los demás mensajes relacionados con la memoria y E/S que utilizan el método de transferencia de datos divididos, estos mensajes de solicitud requieren un mensaje de finalización para notificar al remitente que el mensaje de solicitud de datos anterior ha sido procesado. La solicitud de lectura/escritura de memoria TLP utiliza el método de enrutamiento de direcciones para la transferencia de datos, el campo de dirección se incluye en el encabezado de este tipo de TLP, hay dos formatos de dirección, direcciones de 32 bits y 64 bits. La dirección de 32 o 64 bits del TLP se almacena en la tercera y cuarta palabra de las solicitudes de lectura/escritura de memoria y de lectura/escritura de E/S. Los encabezados TLP para memoria, E/S y solicitudes de lectura y escritura atómicas son más similares.
En el bus PCIe, algunos TLP contienen cargas útiles de datos, como solicitudes de escritura en memoria, TLP de finalización de lectura de memoria, etc. En el bus PCIe, el tamaño de la carga útil de datos contenida en el TLP está relacionado con los parámetros Max_Payload_Size, Max_Read_Request_Size y RCB.
RC (PCI Express Root Complex) utiliza el encabezado de configuración PCIE tipo 1 en modo RC
El modo operativo EP (Endpoint Device) utiliza el encabezado de configuración PCIE tipo 0 en modo EP
El bus PCIe estipula que el tamaño máximo de carga útil de datos de los mensajes TLP es de 4 KB. El bus PCIe especifica una carga útil de datos máxima de paquetes TLP de 4 KB, pero es posible que los dispositivos PCIe no siempre puedan enviar paquetes de datos tan grandes. Los parámetros "Max_Payload_Size" y "Max_Payload_SizeSupported" se definen en el registro de capacidad del dispositivo y en el registro de control del dispositivo, respectivamente.
El tamaño del parámetro Max_Payload_Size es proporcional a la eficiencia de transmisión del enlace PCIe. Cuanto mayor sea el parámetro, mayor será la utilización del ancho de banda del enlace PCIe. Cuanto menor sea el parámetro, menor será la utilización del. Ancho de banda del enlace PCIe.
El parámetro Max_Read_Request_Size se define en el registro de control del dispositivo. Este parámetro está relacionado con el campo de longitud de la solicitud de lectura de memoria TLP, donde el campo de longitud no puede ser mayor que el parámetro Max_Read_Request_Size. En una solicitud de lectura de memoria TLP, el campo Longitud indica cuántos datos deben leerse desde el dispositivo de destino.
Vale la pena señalar que no existe una conexión directa entre el parámetro Max_Read_Request_Size y el parámetro Max_Payload_Size, que solo está relacionado con las solicitudes de escritura de memoria y los mensajes de finalización de lectura de memoria.
En el bus PCI, todos los dispositivos que necesitan enviar solicitudes de interrupción deben poder enviar solicitudes de interrupción a través del pin INTx, y el mecanismo MSI es un mecanismo opcional. Por el contrario, en el bus PCIe, los dispositivos PCIe deben admitir el mecanismo de solicitud de interrupción MSI o MSI-X y es posible que no admitan mensajes de interrupción INTx. En el bus PCIe, los mecanismos de interrupción MSI y MSI-X utilizan el TLP de solicitud de escritura de memoria para enviar solicitudes de interrupción al procesador.
Los dispositivos PCIe utilizan el mecanismo de interrupción MSI o MSI-X, que elimina las señales de banda lateral INTx y maneja la "secuencia" del bus PCIe de manera más racional que los métodos de interrupción tradicionales. Actualmente, la mayoría de los dispositivos PCIe utilizan el mecanismo de interrupción MSI o MSI-X para enviar solicitudes de interrupción.
1. El controlador solicita una parte de la memoria física continua del sistema operativo
2. El host escribe datos en la dirección
3. El el host transfiere la memoria a La dirección física le dice a la FPGA
4. La FPGA envía una solicitud al host para leer el TLP - solicitud de lectura continua
5. El host regresa; el paquete CPLD a la FPGA - Devuelve continuamente múltiples CPLD;
6. FPGA elimina datos válidos del paquete CPLD
7. FPGA notifica al host la finalización de DMA a través de interrupciones y otros; métodos. ,
1. El controlador solicita una parte de memoria física del sistema operativo
2. El host solicita una parte de memoria física de la FPGA; > 3. El host solicita a la FPGA una pieza de memoria física;
4. El host solicita una pieza de memoria física a la FPGA;
5. El host solicita una pieza de Memoria física de la FPGA. El host le dice a la FPGA la dirección física de la memoria;
3. La FPGA inicia una solicitud de escritura TLP al host y coloca los datos en el paquete TLP; envía múltiples solicitudes de escritura continuamente;
4. FPGA envía datos y notifica al host que DMA se completa mediante interrupciones y otros métodos
5.
5. El host obtiene datos de la memoria
p>Consulte lo siguiente: /eagle217/article/details/81736822
El subsistema DMA de PCIe utiliza una serie de descriptores para formar una lista vinculada. Se utilizan para especificar la dirección de origen de la transferencia DMA, la dirección de destino y la duración de la transferencia DMA. Son generados por el controlador y el controlador en DMA inicia la búsqueda de la lista de descriptores para completar la inicialización y comenzar a realizar operaciones de DMA. La estructura del descriptor es la siguiente:
Cada canal DMA tiene su propia lista de descriptores. Cuando DMA lee el descriptor, extraerá src_addr y Dst_addr del descriptor y completará la transferencia de memoria en función de estas direcciones. . Después de completar la transferencia de memoria del descriptor actual, el canal DMA tomará el siguiente descriptor según el Nxt_addr del descriptor actual, y el Nxt_adj del descriptor registrará el número de descriptores pendientes que quedan en la lista. Una vez que se alcanza 0, el bit de PARADA en el campo de control del descriptor actual se pondrá alto y el DMA dejará de buscar el descriptor.
El canal DMA intenta recuperar tantos descriptores como sea posible en cada solicitud de recuperación de descriptores, lo cual está limitado por el MRRS. Este importe está sujeto al MRRS. También está limitado por la capacidad del buffer del descriptor