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.
Значения |
|
Значение по умолчанию |
|
Имя для программного использования |
|
Настраиваемый |
Нет |
Вычисляемый |
Да |
# Отношение период дискретизации выхода к периоду дискретизации входа — коэффициент частоты дискретизации
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
Значения |
|
Значение по умолчанию |
|
Имя для программного использования |
|
Настраиваемый |
Нет |
Вычисляемый |
Да |
# Период дискретизации — период дискретизации
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, блок генерирует предупреждение.