Я понимаю работу FIFO, но мне кажется, что я что-то упускаю из-за его полезности.
При реализации FIFO в FPGA, скажем, для перекрестных тактовых доменов, кажется, что вы часто сталкиваетесь с ситуацией, когда FIFO заполнен, но есть данные, которые должны синхронизироваться в каждом цикле. Это может произойти, если механизм записи синхронизирует данные быстрее, чем механизм чтения считывает данные. Очевидно, что после заполнения FIFO он начнет игнорировать данные, пока у него не останется места для продолжения хранения данных.
Мой вопрос, разве это не имеет большого значения? Мы в основном просто теряем данные? Конечно, FIFO выполняет свою работу, но вся система просто выбрасывает данные
Я сделал два возможных вывода
1) В этом сценарии (где скорость входных данных больше скорости выходных данных), если мы действительно заботимся о том, чтобы не потерять какие-либо данные, возможно, FIFO не лучший способ пересечь эти домены (особенно если механизм записи гораздо быстрее часов, чем в домене чтения). Если это так, то есть ли лучший способ пересечь домены с часами, чем с FIFO? Может быть, ответ заключается в том, что вам нужно использовать другой элемент, например, дециматор, перед FIFO?
2) Мы накладываем ограничение на систему, которая гласит: «Вы можете писать только для количества данных Х (циклов, или времени и т. Д.)», Прежде чем FIFO потребуется время для очистки своих данных. Мне кажется неудовлетворительным, что мы должны на некоторое время отключить поток данных и подождать, пока FIFO освободит место, пока мы не продолжим запись. Но опять же, я новичок в цифровых системах и, возможно, это просто суровая реальность, к которой я не привык:)
Похоже, что наилучшее использование для FIFO при пересечении часовых доменов - это просто когда скорость передачи данных в FIFO и скорость передачи данных из FIFO одинаковы, потому что тогда он может идти в ногу с самим собой.