Данный репозиторий содержит реализацию синхронных FIFO (First In, First Out): класссический FIFO с сигналами wr, rd; AXI-Stream FIFO; Multi Push Multi Pop FIFO.
.
├── README.md
├── RTL
│ ├── axis_fifo_fr.sv
│ ├── axis_fifo.sv
│ ├── mpmp_ram.sv
│ ├── multi_push_multi_pop_fifo.sv
│ └── sc_fifo.sv
└── SIM
├── axis_fifo
│ ├── axis_fifo_tb.sv
│ ├── wave.do
├── mpush_mpop
│ ├── multi_push_multi_pop_fifo_tb.sv
│ ├── wave.do
└── sc_fifo
├── sc_fifo_tb.sv
└── wave.doДиректория RTL - содержит RTL-код для синтеза в FPGA/ASIC
-
axis_fifo.sv - AXI-Stream FIFO с регистровыми входами и выходами (в т.ч. сигналами ready)
-
axis_fifo_fr.sv - то же, что и axis_fifo.sv, но с расширенным списком портов
-
mpmp_ram.sv - FIFO для модуля multi_push_multi_pop_fifo.sv
-
multi_push_multi_pop_fifo.sv - FIFO с N-вталкиваниями и N-выталкиваниями
-
sc_fifo.sv - класссический FIFO
Директория SIM - содержит файлы для тестирования модулей из директории RTL.
Директория axis_fifo - набор файлов для тестирования модулей axis_fifo.sv и axis_fifo_fr.sv
- axis_fifo_tb.sv - тестбенч с автоматической генерацией случайных воздействий
- wave.do - подгрузка сигналов в окно wave для ModelSim/QuestaSim через пункт Tools-Tcl-Execute Macro
Директория mpush_mpop - набор файлов для тестирования модуля multi_push_multi_pop_fifo.sv
- multi_push_multi_pop_fifo_tb.sv - тестбенч с автоматической генерацией случайных воздействий
- wave.do - подгрузка сигналов в окно wave для ModelSim/QuestaSim через пункт Tools-Tcl-Execute Macro
Директория sc_fifo - набор файлов для тестирования модуля sc_fifo.sv
- sc_fifo_tb.sv - тестбенч с автоматической генерацией случайных воздействий
- wave.do - подгрузка сигналов в окно wave для ModelSim/QuestaSim через пункт Tools-Tcl-Execute Macro
Параметры:
- T_DATA_WIDTH - ширина шины данных
- SIZE - размер FIFO в словах
Интерфейсы:
Common
- clk - тактовый сигнал для работы модуля
- reset_n - асинхронный сброс по заднему фронту
AXI-Stream Sink
- s_data_i - шина данных
- s_valid_i - сигнал валидности входных даннных
- s_ready_o - сигнал готовности принимать данные
AXI-Stream Source
- m_data_o - шина данных
- m_valid_o - сигнал валидности выходных даннных
- m_ready_i - сигнал готовности выдавать данные
Status
- fifo_empty_o - сигнал информирует об отсутствии данных в FIFO
- fifo_full_o - сигнал информирует о полном заполнении FIFO
Список параметров и сигналов аналогичен axis_fifo, добавляются дополнительные статусные сигналы:
- fifo_usedw_o - указывает сколько слов данных на текущий момент записано в FIFO
- fifo_avalwd_o - указывает сколько слов данных на текущий момент доступно для записи в FIFO
Параметры:
- WIDTH_DATA - ширина шины данных
- SIZE_FIFO - размер FIFO в словах
- AMOUNT_PUSH_POP - максимальное количество одновременных вталкиваний или выталкиваний в/из FIFO
Интерфейсы:
Common
- clk - тактовый сигнал для работы модуля
- reset_n - асинхронный сброс по заднему фронту
Push
- push - количество данных для вталкивания
- push_data - данные для вталкивания
- can_push - количество доступных вталкиваний (больше этой величины пользователь не имеет права выставить значение push'а)
Pop
- pop - количество данных выталкивания
- can_pop - количество доступных выталкиваний (больше этой величины пользователь не имеет права выставить значение pop'а)
- pop_data - значение вытолкнутых данных
- pop_resp количество вытолкнутых данных. Этот сигнал вводится из-за того, что данные из памяти возвращаются не сразу, а с некоторой задержкой, поскольку в противном случае будут проблемы с таймингами.
Параметры:
- data_width - ширина шины данных
-
fifo_depth - глубина FIFO (вместимость FIFO равна
$2^{fifo_depth}$ слов)
Интерфейсы:
Common
- clk - тактовый сигнал для работы модуля
- reset_n - асинхронный сброс по заднему фронту
Write
- wr - сигнал записи в FIFO
- data_in - данные для записи в FIFO
Read
- rd - сигнал чтения из FIFO
- data_out - прочитанные данные
Status
- full - сигнал информирует о полном заполнении FIFO
- empty - сигнал информирует об отсутствии данных в FIFO
- use_words - количество слов, содержащихся в данный момент в FIFO
- clear - синхронная очистка FIFO