Документация Engee

HDL FIFO

Хранение последовательности входных образцов в регистре «первым пришел — первым ушел» (FIFO).

Тип: SubSystem

Путь в библиотеке:

/Basic/Additional/Discrete/HDL FIFO

Описание

Блок HDL FIFO хранит последовательность входных образцов в регистре FIFO (first in, first out). Данные, записанные первыми в регистр FIFO, выходят первыми. Реализация блока по функциональности и поведению напоминает блок FIFO в аппаратных платформах.

Порты

Вход

# In — сигнал ввода данных
скаляр

Details

Сигнал ввода данных в блок.

При записи данных в блок, самые новые данные помещаются в конец регистра. Блок записывает последующие данные следом за этой записью.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Bool, Fixed-point

Поддержка комплексных чисел

Да

# Push — cигнал управления записью
скаляр

Details

Когда на этот порт поступает значение 1, блок помещает данные с порта In в конец регистра FIFO.

Типы данных

Bool

Поддержка комплексных чисел

Нет

# Pop — сигнал управления чтением
скаляр

Details

Когда на этот порт поступает значение 1, блок выгружает первый элемент из регистра FIFO и удерживает это значение на порту Out.

Если два или более входных порта управления срабатывают на одном временном шаге, сначала выполняется чтение по сигналу Pop, а затем запись по сигналу Push.
Типы данных

Bool

Поддержка комплексных чисел

Нет

# rst — управляющий сигнал сброса
скаляр

Details

Когда на порт сброса поступает значение 1, он сбрасывает выходы Empty, Full и Num блока HDL FIFO.

Типы данных

Bool

Поддержка комплексных чисел

Нет

Выход

# Out — сигнал вывода данных
скаляр

Details

Сигнал вывода данных из блока FIFO. При выполнении операции чтения из FIFO, данные, которые записали первыми в регистр FIFO, извлекаются из FIFO и удерживаются на выходе.

Типы данных

Bool

Поддержка комплексных чисел

Да

# Empry — сигнал индикации пустого регистра
скаляр

Details

Управляющий сигнал, выводимый из FIFO, равный 1, когда в регистре FIFO отсутствуют данные и невозможно выполнить операцию чтения.

Типы данных

Bool

Поддержка комплексных чисел

Нет

# Full — сингал индикации заполненности регистра
скаляр

Details

Управляющий сигнал, выводимый из FIFO, который равен 1, когда регистр FIFO заполнен и не может принять больше данных.

Типы данных

Bool

Поддержка комплексных чисел

Нет

# Num — количество записей
скаляр

Details

Количество данных, которые в данный момент находятся в регистре FIFO.

  • Num увеличивается на 1 за каждые данные, которые вы записываете в FIFO.

  • Num уменьшается на 1 за каждые данные, которые вы считываете из FIFO.

Типы данных

Float64

Поддержка комплексных чисел

Нет

Параметры

Main group

# Register size — количество записей

Details

Укажите количество записей, которое может содержать регистр FIFO.

Минимальное значение для Register size4.

Значение по умолчанию

10

Имя для программного использования

RSize

Настраиваемый

Нет

Вычисляемый

Да

# Mode — режим работы
Classic | FWFT

Details

Укажите режим работы FIFO.

Используя режим FWFT, вы можете заглянуть вперед и увидеть данные, находящиеся в начале очереди FIFO без необходимости выполнять операцию чтения. Режим FWFT особенно полезен, когда вы применяете обратное давление с интерфейсами AXI4-Stream.

Значения

Classic | FWFT

Значение по умолчанию

Classic

Имя для программного использования

Mode

Настраиваемый

Нет

Вычисляемый

Да

# Отношение период дискретизации выхода к периоду дискретизации входа — коэффициент частоты дискретизации

Details

Укажите отношение периода дискретизации на выходе к периоду дискретизации на входе.

По умолчанию это соотношение равно 1, что означает, что входы In и Push и выходы Out и Pop работают с одинаковой частотой дискретизации.

Входы и выходы могут работать с разным периодом дискретизации. Используйте целое положительное число или 1/N, где N – целое положительное число. Например, если ввести 1/2, то период дискретизации выходов будет в два раза меньше периода дискретизации входов, то есть выходы будут работать быстрее. Сигналы портов Full, Empty и Num работают с большей скоростью.

Значение по умолчанию

1

Имя для программного использования

Ratio

Настраиваемый

Нет

Вычисляемый

Да

# Push onto full register — условие переполнения на порту Push
Ignore | Warning | Error

Details

Укажите, как должен реагировать блок при записи в заполненный FIFO.

Значения

Ignore | Warning | Error

Значение по умолчанию

Warning

Имя для программного использования

AssertPushOntoFullReg

Настраиваемый

Нет

Вычисляемый

Да

# Pop empty register — условие переполнения на порту Pop
Ignore | Warning | Error

Details

Укажите, как блок должен реагировать на чтение из пустого FIFO.

Значения

Ignore | Warning | Error

Значение по умолчанию

Warning

Имя для программного использования

AssertPopEmptyReg

Настраиваемый

Нет

Вычисляемый

Да

# On empty register indicator port (Empty) — порт индикации пустого регистра

Details

Установите этот флажок, чтобы включить порт индикации пустого регистра.

Этот порт выводит 1, когда регистр FIFO пуст, и 0, когда FIFO содержит одну или несколько записей данных.

Значение по умолчанию

true (включено)

Имя для программного использования

EmptyPortOn

Настраиваемый

Нет

Вычисляемый

Да

# On full register indicator port (Full) — порт индикации заполненности регистра

Details

Установите этот флажок, чтобы включить порт индикации заполненности регистра.

Этот порт выводит 1, когда регистр FIFO заполнен.

Значение по умолчанию

true (включено)

Имя для программного использования

FullPortOn

Настраиваемый

Нет

Вычисляемый

Да

# On number of register entries port (Num) — порт информации о количестве записей в регистре

Details

Установите этот флажок, чтобы включить порт информации о количестве записей в регистре.

Этот порт выводит количество данных, которые в данный момент доступны в очереди FIFO.

Значение по умолчанию

true (включено)

Имя для программного использования

NumPortOn

Настраиваемый

Нет

Вычисляемый

Да

# On local reset port (rst) — локальный порт сброса

Details

Установите этот флажок, чтобы включить дополнительный порт локального сброса rst.

Значение по умолчанию

false (выключено)

Имя для программного использования

ResetPortOn

Настраиваемый

Нет

Вычисляемый

Да

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

Значения

Float64 | Float32 | Float16 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Bool | Fixed-point

Значение по умолчанию

Float64

Имя для программного использования

DType

Настраиваемый

Нет

Вычисляемый

Да

# Data fixed-point type — тип данных с фиксированной точкой

Details

Укажите тип данных с фиксированной точкой.

Значение по умолчанию

fixdt(1,16,0)

Имя для программного использования

DataTypeStrFixed

Настраиваемый

Нет

Вычисляемый

Да

# Signal type — тип сигнала
Real | Complex

Details

Укажите тип сигнала. Задается как:

  • Real

  • Complex

Значения

Real | Complex

Значение по умолчанию

Real

Имя для программного использования

SType

Настраиваемый

Нет

Вычисляемый

Да

# Период дискретизации — период дискретизации

Details

Период дискретизации, заданный как положительное число.

Значение по умолчанию

1

Имя для программного использования

STime

Настраиваемый

Нет

Вычисляемый

Да

Алгоритмы

Операция записи в FIFO

На этом рисунке показана операция записи. Входной порт Push выступает в качестве разрешающего сигнала для операции записи. На рисунке data_in обозначает этот сигнал.

hdl fifo 1 hdl fifo 2 hdl fifo 3 hdl fifo 4 hdl fifo 5

Когда сигнал 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 обозначает этот сигнал.

hdl fifo 6 hdl fifo 7 hdl fifo 8 hdl fifo 9 hdl fifo 10

На рисунке показано, что когда сигнал read_en равен 1 на временном шаге 34, сигнал dout выводит самую старую запись в FIFO на следующем временном шаге 35. Флаг Full снят, сигнал Num уменьшается на 1, начиная с временного шага 35 по мере считывания данных из FIFO.

Когда сигнал Num становится равным 0, подается сигнал Empty. После того, как сигнал Empty станет равным 0, если вы считываете больше данных из FIFO, блок генерирует предупреждение.

Операция записи первого слова через FIFO

На этом рисунке показана операция записи, когда для параметра Mode установлено значение FWFT. Входной порт Push действует как разрешающий сигнал для операции записи. На рисунке write_en обозначает этот сигнал.

hdl fifo 11 hdl fifo 12 hdl fifo 13 hdl fifo 14 hdl fifo 15

Когда сигнал 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 обозначает этот сигнал.

hdl fifo 16 hdl fifo 17 hdl fifo 18 hdl fifo 19 hdl fifo 20

В режиме FWFT первое значение, которое вы записываете в FIFO, попадает на выходной сигнал Out.

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

Когда сигнал Num становится равным 0, подается сигнал Empty. После того, как сигнал Empty становится равным 0, если вы считываете больше данных из FIFO, блок генерирует предупреждение.