Контроль передачи¶
Надёжность передачи данных обеспечивают компоненты prq_link_out и prq_link_in
Компонент prq_link_out содержит память для четырёх пакетов по 256 слов. Сигнал tx_ready разрешает запись пакета в память. Для записи пакета надо выставить tx_data_title - заголовок пакета. tx_data и tx_data_we - данные пакета - от 1 до 256 слов, tx_data_eof - конец пакета. После получения tx_data_eof блок памяти помечается как занятый. Блок будет помечен как свободный, только после прихода подтверждения о доставке пакета. Может быть записан пакет меньшей длины чем 256 слов, но передаются всегда пакеты длиной 256 слов.
Процесс pr_stp проверяет блоки данных на занятость. Если блок содержит пакет для передачи, то он передаётся. Если нет, то проверяется следующий блок. Возможна ситуация, когда будет заполнен только один блок данных. В этом случае он будет передан несколько раз до момента прихода подтверждения. Если заполнено два или больше блоков, то подтверждение должно успеть прийти в процессе передачи следующих блоков и повторной отправки пакета не произойдёт.
Сигнал buf_empty( 3 downto 0 ) это флаги занятости блоков данных. Значение 1 - блок занят.
Сигнал flag_even( 3 downto 0 ) это флаг чётный/нечётный пакет. Он передаётся в бите PKG_EVEN слова команды.
- правильная контрольная сумма CRC1
- правильная сигнатура: SIG=0x0B
- пакет содержит данные: SOF=1
- блок данных BUF_NUM свободен для записи
- поле PKG_EVEN совпадает с ожидаемым для данного блока
Если процесс приёма данных завершается с сигналом rx2link.pkg_good=1, то блок данных помечается как содержащий данные.
Процесс pr_stp_ready анализирует флаг блока, если он содержит данные, то выставляется сигнал rx_ready=1. По этому сигналу данные должны быть прочитаны, после чтения пакета должен быть выставлен rx_data_eof=1, это помечает блок как свободный для записи, меняет ожидаемое значение PKG_EVEN и формирует подтверждение приёма блока данных.