diff --git a/Labs/06.AXI-Stream/README.md b/Labs/06.AXI-Stream/README.md index 971a808..b08af54 100644 --- a/Labs/06.AXI-Stream/README.md +++ b/Labs/06.AXI-Stream/README.md @@ -393,7 +393,7 @@ endmodule При поступлении пакета данных происходит декремент кредитного счётчика, то есть, счётчик уменьшается на 1. Таким образом, выпустив в конвейер N пакетов, кредитный счётчик достигает значения "0". Если значение кредитного счётчика нулевое, то сигнал `ready_o` опускается и отправитель более не готов принимать данные до момента, когда ему "вернут кредит". #### Получатель данных -Основным элементом получателя данных является FIFO. Очень важно то, чтобы FIFO имело глубину, равную максимальному значению кредитного счетчика (N). Идея заключается в том, что FIFO должен иметь возможность "подхватить" все пакеты с данными, попавшие в конвейер, и, в определённый момент покинувшие его. Таким образом, при гипотетической ситуации, при которой `ready_i` никогда не поднимается в "1", кредитный механизм не потеряет ни одного пакета данных -- все пакеты, выпущенные отправителем, после обработки, окажутся в FIFO приёмника данных. +Основным элементом получателя данных является FIFO. Очень важно то, чтобы FIFO имело глубину, равную максимальному значению кредитного счетчика (N). Идея заключается в том, что FIFO должен иметь возможность "подхватить" все пакеты с данными, попавшие в конвейер, и, в определённый момент покинувшие его. Таким образом, при гипотетической ситуации, при которой `ready_i` никогда не поднимается в "1", кредитный механизм не потеряет ни одного пакета данных — все пакеты, выпущенные отправителем, после обработки, окажутся в FIFO приёмника данных. Когда происходит handshake и данные из FIFO отправляются наружу, покидая кредитный механизм, происходит инкремент (увеличение на 1) кредитного счётчика, то есть, возврат кредита. По сути, возврат кредита является сообщением для отправителя данных "в FIFO освободилось место для одного пакета данных, поэтому можно безопасно начать обработку ещё одного пакета". @@ -418,23 +418,24 @@ AXI Stream (Advanced eXtensible Interface Stream) — это протокол д Интерфейс AXI Stream содержит следующие основные и обязательные сигналы: 1. `ACLK` (Сигнал тактовой частоты) -2. `ARESETn` (Сигнал сброса) -- Асинхронный сброс интерфейса (активный уровень — низкий) +2. `ARESETn` (Сигнал сброса) — Асинхронный сброс интерфейса (активный уровень — низкий) 3. `TVALID` (Valid — Валидность данных) Указывает, что master готов передать данные. Этот сигнал генерирует Master. Данные на шине считаются действительными только при `TVALID` = 1. 4. `TREADY` (Ready — Готовность приёмника). Указывает, что приёмник готов принять данные. Этот сигнал генерируется Slave. Передача данных происходит только при одновременной активности `TVALID` и `TREADY` (handshake). При этом в спецификации интерфейса AXI Stream существует важные правила, определяющие работу сигналов `TVALID` и `TREADY` -* Slave может удерживать `TREADY` = 1 во то время, когда `TREADY` = 0. +* Slave может удерживать `TREADY` = 1 во то время, когда `TVALID` = 0. * Slave может опускать `TREADY` в 0 в любой момент времени и "слушающий этот сигнал" Master должен это учитывать. -* Однажды выставив `TVALID` в 1 Master более **не имеет права** выставлять `TVALID` в 0 до момента, пока не произойдёт рукопожатие и транзакция. То есть, Master не имеет права "передумать", выставляя флаг валидности. +* Однажды выставив `TVALID` в 1 Master более **не имеет права** выставлять `TVALID` в 0 до момента, пока не произойдёт рукопожатие. То есть, Master не имеет права "передумать", выставляя флаг валидности. +* После выставления `TVALID` = 1 Master также не имеет права изменять передаваемые данные и сопутствующие управляющие сигналы до момента рукопожатия. Иными словами, если `TVALID` = 1, а `TREADY` = 0, данные должны оставаться неизменными. -5. `TDATA` -- Основная шина для передачи данных. +1. `TDATA` — Основная шина для передачи данных. Разрядность: Может быть 8, 16, 32, 64, 128 бит и т.д. (зависит от реализации). Если вернуться к началу данной лабораторной работы, то можно убедиться в том, что обязательный набор сигналов AXI Stream представляет из себя просто интерфейс valid-ready. -Рассмотрим пример транзакции по минимальному интерфейсу AXI Stream -- мы не увидим никаких значимых отличий от valid-ready. На временной диаграмме показана передача трёх транзакций. +Рассмотрим пример транзакции по минимальному интерфейсу AXI Stream — мы не увидим никаких значимых отличий от valid-ready. На временной диаграмме показана передача трёх транзакций.