Контроль передачи
Version 2 (Dmitry Smekhov, 02/27/2012 12:39 am)
| 1 | 1 | h1. Контроль передачи | |
|---|---|---|---|
| 2 | 1 | ||
| 3 | 1 | Надёжность передачи данных обеспечивают компоненты *prq_link_out* и *prq_link_in* | |
| 4 | 1 | ||
| 5 | 2 | Dmitry Smekhov | Компонент *prq_link_out* содержит память для четырёх пакетов по 256 слов. Сигнал *tx_ready* разрешает запись пакета в память. Для записи пакета надо выставить *tx_data_title* - заголовок пакета. *tx_data* и *tx_data_we* - данные пакета - от 1 до 256 слов, *tx_data_eof* - конец пакета. После получения *tx_data_eof* блок памяти помечается как занятый. Блок будет помечен как свободный, только после прихода подтверждения о доставке пакета. Может быть записан пакет меньшей длины чем 256 слов, но передаются всегда пакеты длиной 256 слов. | 
| 6 | 1 | ||
| 7 | 1 | Процесс *pr_stp* проверяет блоки данных на занятость. Если блок содержит пакет для передачи, то он передаётся. Если нет, то проверяется следующий блок. Возможна ситуация, когда будет заполнен только один блок данных. В этом случае он будет передан несколько раз до момента прихода подтверждения. Если заполнено два или больше блоков, то подтверждение должно успеть прийти в процессе передачи следующих блоков и повторной отправки пакета не произойдёт. | |
| 8 | 2 | Dmitry Smekhov | |
| 9 | 2 | Dmitry Smekhov | Сигнал *buf_empty( 3 downto 0 )* это флаги занятости блоков данных. Значение 1 - блок занят. | 
| 10 | 2 | Dmitry Smekhov | Сигнал *flag_even( 3 downto 0 )* это флаг чётный/нечётный пакет. Он передаётся в бите *PKG_EVEN* слова команды. | 
| 11 | 2 | Dmitry Smekhov | |
| 12 | 2 | Dmitry Smekhov | Компонент *prq_link_in* также содержит память для четырёх пакетов по 256 слов. Принимаемый пакет записывается в память при выполнении следующих условий: | 
| 13 | 2 | Dmitry Smekhov | * правильная контрольная сумма CRC1 | 
| 14 | 2 | Dmitry Smekhov | * правильная сигнатура: SIG=0x0B | 
| 15 | 2 | Dmitry Smekhov | * пакет содержит данные: SOF=1 | 
| 16 | 2 | Dmitry Smekhov | * блок данных BUF_NUM свободен для записи | 
| 17 | 2 | Dmitry Smekhov | * поле *PKG_EVEN* совпадает с ожидаемым для данного блока | 
| 18 | 2 | Dmitry Smekhov | |
| 19 | 2 | Dmitry Smekhov | Если процесс приёма данных завершается с сигналом *rx2link.pkg_good*=1, то блок данных помечается как содержащий данные. | 
| 20 | 2 | Dmitry Smekhov | |
| 21 | 2 | Dmitry Smekhov | Процесс *pr_stp_ready* анализирует флаг блока, если он содержит данные, то выставляется сигнал *rx_ready*=1. По этому сигналу данные должны быть прочитаны, после чтения пакета должен быть выставлен *rx_data_eof*=1, это помечает блок как свободный для записи, меняет ожидаемое значение *PKG_EVEN* и формирует подтверждение приёма блока данных. |