Формирование пакетов для отправки¶
Пакеты для передачи в ядро 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 байт.
- tx_ext_fifo_back - запрос от узла block_ext_fifo
- tx_ext_fifo - ответ
В запросе указывается тип операции чтение или запись, для операции чтения указывается размер 512 байт или 4096 байт. Операция записи - всегда 4096 байт.
С началом операции чтения включается таймер. Если операция чтения не будет завершена в течении 1 ms, то будет сформирован сигнал completion_error. По этому сигналу block_ext_fifo будет повторять операцию чтения.