Формирование пакетов для отправки

Пакеты для передачи в ядро Xilinx формирует узел core64_tx_engine. Так же, как и для обработчика входящих пакетов существует несколько реализаций формирователя.

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

  • core64_rx_engine - для Virtex 5
  • core64_rx_engine_m2 - для Virtex 6
  • core64_rx_engine_m4 - для Spartan 6

Существует FIFO размером 64 слова по 67 разрядов в которое записывается пакет. Из этого FIFO пакет передаётся в ядро Xilin. Наличие FIFO позволяет отделить логику формирования пакетов, от передачи пакета в ядро. В частности это позволяет легко реализовать механизм приостановки выдачи пакета.

В процессе pr_state реализован автомат формирования пакетов. Формируются следующие типы пакетов:

  • COMPLETION WITH DATA - ответ на команду чтения
  • MEMORY READ REQUEST 32 bit
  • MEMORY READ REQUEST 64 bit
  • MEMORY WRITE REQUEST 32 bit
  • MEMORY WRITE REQUEST 64 bit

Пакеты с 64-х разрядным адресом формируется если адрес больше 4 Гбайт.

Пакеты MEMORY WRITE формируются с PAYLOAD 128 или 256 байт.
Пакеты MEMORY READ формируются с запросом чтения 128 байт.

Циклы чтения или записи формируются по запросу от блока EXT_FIFO. Для обмена с блоком используется пара сигналов:
  • tx_ext_fifo_back - запрос от узла block_ext_fifo
  • tx_ext_fifo - ответ

В запросе указывается тип операции чтение или запись, для операции чтения указывается размер 512 байт или 4096 байт. Операция записи - всегда 4096 байт.

С началом операции чтения включается таймер. Если операция чтения не будет завершена в течении 1 ms, то будет сформирован сигнал completion_error. По этому сигналу block_ext_fifo будет повторять операцию чтения.