Формирование пакетов для отправки
Version 1 (Dmitry Smekhov, 09/23/2011 08:43 pm)
1 | 1 | h1. Формирование пакетов для отправки |
|
---|---|---|---|
2 | 1 | ||
3 | 1 | Пакеты для передачи в ядро Xilinx формирует узел core64_tx_engine. Так же, как и для обработчика входящих пакетов существует несколько реализаций формирователя. |
|
4 | 1 | ||
5 | 1 | Список компонентов: |
|
6 | 1 | ||
7 | 1 | * core64_rx_engine - для Virtex 5 |
|
8 | 1 | * core64_rx_engine_m2 - для Virtex 6 |
|
9 | 1 | * core64_rx_engine_m4 - для Spartan 6 |
|
10 | 1 | ||
11 | 1 | Существует FIFO размером 64 слова по 67 разрядов в которое записывается пакет. Из этого FIFO пакет передаётся в ядро Xilin. Наличие FIFO позволяет отделить логику формирования пакетов, от передачи пакета в ядро. В частности это позволяет легко реализовать механизм приостановки выдачи пакета. |
|
12 | 1 | ||
13 | 1 | В процессе pr_state реализован автомат формирования пакетов. Формируются следующие типы пакетов: |
|
14 | 1 | ||
15 | 1 | * COMPLETION WITH DATA - ответ на команду чтения |
|
16 | 1 | * MEMORY READ REQUEST 32 bit |
|
17 | 1 | * MEMORY READ REQUEST 64 bit |
|
18 | 1 | * MEMORY WRITE REQUEST 32 bit |
|
19 | 1 | * MEMORY WRITE REQUEST 64 bit |
|
20 | 1 | ||
21 | 1 | Пакеты с 64-х разрядным адресом формируется если адрес больше 4 Гбайт. |
|
22 | 1 | ||
23 | 1 | Пакеты MEMORY WRITE формируются с PAYLOAD 128 или 256 байт. |
|
24 | 1 | Пакеты MEMORY READ формируются с запросом чтения 128 байт. |
|
25 | 1 | ||
26 | 1 | Циклы чтения или записи формируются по запросу от блока EXT_FIFO. Для обмена с блоком используется пара сигналов: |
|
27 | 1 | * tx_ext_fifo_back - запрос от узла block_ext_fifo |
|
28 | 1 | * tx_ext_fifo - ответ |
|
29 | 1 | ||
30 | 1 | В запросе указывается тип операции чтение или запись, для операции чтения указывается размер 512 байт или 4096 байт. Операция записи - всегда 4096 байт. |
|
31 | 1 | ||
32 | 1 | С началом операции чтения включается таймер. Если операция чтения не будет завершена в течении 1 ms, то будет сформирован сигнал completion_error. По этому сигналу block_ext_fifo будет повторять операцию чтения. |