HDL FIFO
Хранение последовательности входных образцов в регистре «первым пришел — первым ушел» (FIFO).
Тип: SubSystem
Путь в библиотеке:
|
Описание
Блок HDL FIFO хранит последовательность входных образцов в регистре FIFO (first in, first out). Данные, записанные первыми в регистр FIFO, выходят первыми. Реализация блока по функциональности и поведению напоминает блок FIFO в аппаратных платформах.
Порты
Вход
#
In
—
сигнал ввода данных
скаляр
Details
Сигнал ввода данных в блок.
При записи данных в блок, самые новые данные помещаются в конец регистра. Блок записывает последующие данные следом за этой записью.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
Push
—
cигнал управления записью
скаляр
Details
Когда на этот порт поступает значение 1, блок помещает данные с порта In в конец регистра FIFO.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
Pop
—
сигнал управления чтением
скаляр
Details
Когда на этот порт поступает значение 1, блок выгружает первый элемент из регистра FIFO и удерживает это значение на порту Out.
| Если два или более входных порта управления срабатывают на одном временном шаге, сначала выполняется чтение по сигналу Pop, а затем запись по сигналу Push. |
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
rst
—
управляющий сигнал сброса
скаляр
Details
Когда на порт сброса поступает значение 1, он сбрасывает выходы Empty, Full и Num блока HDL FIFO.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
Выход
#
Out
—
сигнал вывода данных
скаляр
Details
Сигнал вывода данных из блока FIFO. При выполнении операции чтения из FIFO, данные, которые записали первыми в регистр FIFO, извлекаются из FIFO и удерживаются на выходе.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
Empry
—
сигнал индикации пустого регистра
скаляр
Details
Управляющий сигнал, выводимый из FIFO, равный 1, когда в регистре FIFO отсутствуют данные и невозможно выполнить операцию чтения.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
Full
—
сингал индикации заполненности регистра
скаляр
Details
Управляющий сигнал, выводимый из FIFO, который равен 1, когда регистр FIFO заполнен и не может принять больше данных.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
Num
—
количество записей
скаляр
Details
Количество данных, которые в данный момент находятся в регистре FIFO.
-
Num увеличивается на
1за каждые данные, которые вы записываете в FIFO. -
Num уменьшается на
1за каждые данные, которые вы считываете из FIFO.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
Параметры
Main group
# Register size — количество записей
Details
Укажите количество записей, которое может содержать регистр FIFO.
Минимальное значение для Register size – 4.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
#
Mode —
режим работы
Classic | FWFT
Details
Укажите режим работы FIFO.
Используя режим FWFT, вы можете заглянуть вперед и увидеть данные, находящиеся в начале очереди FIFO без необходимости выполнять операцию чтения. Режим FWFT особенно полезен, когда вы применяете обратное давление с интерфейсами AXI4-Stream.
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# The ratio of output sample time to input sample time — коэффициент частоты дискретизации
Details
Укажите отношение периода дискретизации на выходе к периоду дискретизации на входе.
По умолчанию это соотношение равно 1, что означает, что входы In и Push и выходы Out и Pop работают с одинаковой частотой дискретизации.
Входы и выходы могут работать с разным периодом дискретизации. Используйте целое положительное число или 1/N, где N – целое положительное число. Например, если ввести 1/2, то период дискретизации выходов будет в два раза меньше периода дискретизации входов, то есть выходы будут работать быстрее. Сигналы портов Full, Empty и Num работают с большей скоростью.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
#
Push onto full register —
условие переполнения на порту Push
Ignore | Warning | Error
Details
Укажите, как должен реагировать блок при записи в заполненный FIFO.
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
#
Pop empty register —
условие переполнения на порту Pop
Ignore | Warning | Error
Details
Укажите, как блок должен реагировать на чтение из пустого FIFO.
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# On empty register indicator port (Empty) — порт индикации пустого регистра
Details
Установите этот флажок, чтобы включить порт индикации пустого регистра.
Этот порт выводит 1, когда регистр FIFO пуст, и 0, когда FIFO содержит одну или несколько записей данных.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# On full register indicator port (Full) — порт индикации заполненности регистра
Details
Установите этот флажок, чтобы включить порт индикации заполненности регистра.
Этот порт выводит 1, когда регистр FIFO заполнен.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# On number of register entries port (Num) — порт информации о количестве записей в регистре
Details
Установите этот флажок, чтобы включить порт информации о количестве записей в регистре.
Этот порт выводит количество данных, которые в данный момент доступны в очереди FIFO.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# On local reset port (rst) — локальный порт сброса
Details
Установите этот флажок, чтобы включить дополнительный порт локального сброса rst.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
Signal settings
#
Data type —
тип данных
Float64 | Float32 | Float16 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Bool | Fixed-point
Details
Укажите тип данных. Задается как:
-
Float64 -
Float32 -
Float16 -
Int8 -
UInt8 -
Int16 -
UInt16 -
Int32 -
UInt32 -
Int64 -
UInt64 -
Int128 -
UInt128 -
Bool -
Fixed-point
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Data fixed-point type — тип данных с фиксированной точкой
Details
Укажите тип данных с фиксированной точкой.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
#
Signal type —
тип сигнала
Real | Complex
Details
Укажите тип сигнала. Задается как:
-
Real -
Complex
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Sample time — период дискретизации
Details
Период дискретизации, заданный как положительное число.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
Алгоритмы
Операция записи в FIFO
На этом рисунке показана операция записи. Входной порт Push выступает в качестве разрешающего сигнала для операции записи. На рисунке data_in обозначает этот сигнал.

Когда сигнал data_in равен 0, блок не записывает данные в FIFO, а выставляет флаг Empty.
Когда сигнал data_in становится равным 1, блок переводит сигнал din на входном порту In в конец регистра FIFO на следующем временном шаге. Сигнал Num указывает на количество данных в регистре FIFO. Каждый раз, когда вы записываете данные в FIFO, сигнал Num увеличивается на 1. На временном шаге 6 data_in равен 1. На следующем временном шаге data_in равен 7, данные записываются в FIFO. Сигнал Num увеличивается на 1, а флаг Empty отменяется.
Этот FIFO использует размер регистра, указанный параметром Register size. По умолчанию размер регистра равен 10. На рисунке, когда сигнал Num становится равным 10 на временном шаге 34, подается сигнал Full. После того как сигнал Full становится равным 1, если вы записываете в FIFO больше данных, блок генерирует предупреждение.
Классическая операция чтения FIFO
На этом рисунке показана операция чтения. Входной порт Pop выступает в качестве разрешающего сигнала для операции чтения. На рисунке read_en обозначает этот сигнал.

На рисунке показано, что когда сигнал read_en равен 1 на временном шаге 34, сигнал dout выводит самую старую запись в FIFO на следующем временном шаге 35. Флаг Full снят, сигнал Num уменьшается на 1, начиная с временного шага 35 по мере считывания данных из FIFO.
Когда сигнал Num становится равным 0, подается сигнал Empty. После того, как сигнал Empty станет равным 0, если вы считываете больше данных из FIFO, блок генерирует предупреждение.
Операция записи первого слова через FIFO
На этом рисунке показана операция записи, когда для параметра Mode установлено значение FWFT. Входной порт Push действует как разрешающий сигнал для операции записи. На рисунке write_en обозначает этот сигнал.

Когда сигнал write_en равен 0, блок не записывает данные в FIFO и выставляет флаг Empty.
Когда сигнал write_en становится равным 1, блок переводит значение сигнала din на входном порту In в конец регистра FIFO на следующем временном шаге. Сигнал Num указывает на количество данных в регистре FIFO. Каждый раз, когда вы записываете данные в FIFO, сигнал Num увеличивается на 1. На временном шаге 6, write_en равен 1. На следующем временном шаге 7, данные записываются в FIFO. Сигнал Num увеличивается на 1, а флаг Empty отменяется.
FIFO использует размер регистра, указанный параметром Register size. По умолчанию размер регистра равен 10. На рисунке, когда сигнал Num становится равным 13 на временном шаге 43, подается сигнал Full. В режиме FWFT FIFO может хранить еще 3 значений сверх своего заданного размера. После того, как сигнал Full становится равным 1, если вы записываете в FIFO больше данных, блок генерирует предупреждение.
Операция чтения из FIFO с переходом по первому слову
На этом рисунке показана операция чтения, когда для параметра Mode установлено значение FWFT. Входной порт Pop действует как разрешающий сигнал для операции чтения. На рисунке read_en обозначает этот сигнал.

В режиме FWFT первое значение, которое вы записываете в FIFO, попадает на выходной сигнал Out.
На рисунке read_en становится равным 1 на временном шаге 42, FIFO считывает первое значение сигнала data out на временном шаге 9. Вы можете использовать эту возможность, чтобы заглянуть вперед и увидеть данные, которые первыми были записаны в FIFO.
Когда сигнал Num становится равным 0, подается сигнал Empty. После того, как сигнал Empty становится равным 0, если вы считываете больше данных из FIFO, блок генерирует предупреждение.