Обработка входящих пакетов

Входящие пакеты обрабатывает узел core64_rx_engine. В связи с различиями в реализации ядра Xilinx для различных ПЛИС существует несколько реализаций обработчика пакетов, они различаются способом подключения к компоненту Xilinx.

Список компонентов:

  • core64_rx_engine - для Virtex 5
  • core64_rx_engine_m2 - для Virtex 6
  • core64_rx_engine_m4 - для Spartan 6
Внутри обработчика существуют два FIFO:
  • FIFO0 - для запросов чтения или записи
  • FIFO1 - для ответов на запросы чтения
Процесс pr_fifo0_wr определяет тип пакета и разрешает передачу пакета в FIFO0.
В FIFO0 передаются пакеты следующих типов:
  • MEMORY READ REQUEST 32 bit
  • MEMORY READ REQUEST-LOCKED 32 bit
  • MEMORY WRITE REQUEST 32 bit
  • MEMORY WRITE REQUEST-LOCKED 32 bit
Процесс pr_fifo1_wr определяет тип пакета и разрешает передачу пакета в FIFO1.
В FIFO1 передаются пакеты следующих типов:
  • COMPLETION WITH DATA
  • COMPLETION LOCKED WITH DATA

Все остальные типы пакетов игнорируются.

В процессе pr_stp реализован автомат чтения данных из FIFO0. Автомат читает пакет, определяет его тип (чтение или запись) и формирует запрос к компоненту core64_reg_access.

В процессе pr_stf реализован автомат чтения данных из FIFO1. Автомат читает пакет и передаёт данные в компонент block_pe_fifo.