Отрабатываем протокол valid/ready и конвейеры на микроархитектурном тренажере

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Чем хорош FPGA-хаб на Хабре это еще и тем что тема протокола valid/ready время от времени тут всплывает. И это действительно важно так как valid/ready является одним из основных протоколов организации управления потоком (flow-control). Понимание valid/ready для микроархитектора так же необходимо как необходимо понимание закона ома электрику.

Да вот только проблема в том что, существует крайне мало литературы на эту тему. А в тех немногих книгах, разные авторы, как правило, толкуют концепцию valid/ready приводя в пример частные случаи его использования.

Так некоторые авторы трактуют ready как (read enable) то есть необходимое условие для получения valid данных от приемника. Другие же говорят что ready это как бы подтверждение принятых данных приемником и начинают трактовать всю концепцию valid/ready как некий аналог механизма работающего по схеме "запрос/подтверждение". Третьи все это дело привязывают к AXI-stream который в принципе даже не протокол, а интерфейс, где приемник может быть "не жадным" - то есть не давать ready по умолчанию. Четвертые ожидают valid на интерфейсе передатчика и дополнительно регистрируют valid данные в регистре внедряя сложную логику с конечными автоматами которая, как правило, не позволяет передавать данные между приемником и потребителем в каждом такте. И так далее.

Фишка в том что valid/ready в принципе может трансформироваться в каждый из этих приведенных частных случаев.

Так откуда все эти сложности с объяснением простого протокола состоящего всего из двух сигналов?

Вообще, не проще ли объяснять протокол valid/ready не на уровне регистровых передач, а немного абстрагировавшись, на уровне передач между очередями (FIFO)? Очередь так же как и регистр является хранилищем данных и при этом, такие две важные концепции flow-control как валидность данных и backpressure уже по определению ассоциированы с понятием "очередь".

На прошлом занятии мы как раз отработали концепцию очереди FIFO на микроархитектурном тренажере - hdlgadgets. В этот раз мы возьмем два FIFO буфера (которые образуют конвейер с valid/ready рукопожатиями) и будем менять flow-control логику конвейера.

Мы покажем что valid/ready это не только механизм передачи данных от одной очереди к другой, но еще и метод для организации разного рода логического функционала между очередями.

Если до этого момента вы не сталкивались с протоколом valid/ready, то будете приятно удивлены как легким движением руки (а если точнее, написанием пары строк на верилоге) мы можем реализовывать разного рода функционал взяв за основу конвейер из двух FIFO.

В общем, смотрим видео, устанавливаем тренажер, практикуемся с верилогом. Вопросы и комментарии постим в комментах.

Источник: https://habr.com/ru/articles/773550/


Интересные статьи

Интересные статьи

В последней статье мы настроили FUSB302 на получение сообщений USB PD и успешно получили «оповещение о возможностях» от БП с USB-C. В этой же статье мы обратимся к спецификации PD, спарсим сообщение...
Компьютерная компания Стива Джобса NeXT выпустила клавиатуру в 1988 году. Не имея опыта работы с электроникой, я попытался заставить её работать через USB. Чтобы сделать это, мне пришлось копнуть намн...
Продолжаем беседовать с разработчиками экосистемы сервисов Serverless. В прошлый раз Глеб Борисов рассказал о возможностях и перспективах функций в Yandex.Cloud, сегодня ...
Доброго времени суток!В современном мире всё больше появляется заявлений о потенциальной угрозе со стороны квантовых компьютеров по отношению к используемым протоколам кр...
Сегодня мы рассмотрим подраздел 1.7а и раздел 5.4 экзаменационной тематики ICND2. Это описательные темы, то есть Cisco не требует от вас их углубленного изучения. Вы просто должны знать, что озна...