Сэмплер
Модуль выполняет задачу сбора данных с выхода АЦП, их обработки, упаковки и передачи дальше с помощью AXI Stream интерфейса.
Дополнительно реализован механизм синхронизации с внешним генератором через сигналы sample_req и sample_done, позволяющий запускать сбор строго по запросу и подтверждать завершение выборки.
Список параметров
DATA_WIDTH Ширина входных данных, получаемых с АЦП.
PACK_FACTOR Количество отсчетов, собираемых в один выходной пакет.
PROCESS_MODE Режим интерпретации входного кода:
0— прямой код1— дополнительный код
Список входных портов
clk_in Сигнал тактирования выходного интерфейса.
rst Сброс модуля и остановка работы.
[DATA_WIDTH-1:0] data_in Входной сигнал с АЦП.
out_of_range Флаг выхода значений данных за допустимый диапазон:
0— данные валидны1— данные невалидны и игнорируются
[31:0] smp_num Количество валидных отсчетов, которое необходимо собрать после получения запроса на выборку.
sample_req
Сигнал запроса на запуск выборки.
При его активации модуль начинает сбор данных и переходит в активное состояние (enable = 1).
Список выходных портов
[DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata
Урезанный AXI Stream формат, выходные данные.
Ширина шины определяется как произведение битности данных и фактора упаковки.
m_axis_tvalid
Урезанный AXI Stream формат, сигнал валидности выходных данных.
Формируется при готовности очередного пакета.
sample_done
Сигнал завершения выборки.
Поднимается после того, как модуль собрал количество валидных отсчетов, равное smp_num.
Логика работы
На каждом такте принимаются:
data_in— значение АЦПout_of_range— флаг допустимости значения
Если out_of_range = 1, данные считаются невалидными, игнорируются и не попадают во внутренний буфер.
Если out_of_range = 0, данные считаются корректными и используются для дальнейшей обработки.
Преобразование данных
Если PROCESS_MODE = 1, входные данные интерпретируются как дополнительный код и преобразуются перед упаковкой.
Если PROCESS_MODE = 0, данные передаются без преобразования (прямой код).
Запуск выборки
Сбор данных начинается только после прихода сигнала sample_req.
При этом:
- фиксируется значение
smp_num - внутренний счетчик собранных отсчетов обнуляется
- модуль переходит в активное состояние (
enable = 1)
Пока enable = 1, модуль принимает только валидные отсчеты и считает их.
Упаковка данных
Внутренний буфер заполняется до количества данных, равного PACK_FACTOR.
Если PACK_FACTOR = 1
Каждый валидный отсчет сразу формирует выходной пакет:
- данные передаются в
m_axis_tdata - формируется импульс
m_axis_tvalid
Если PACK_FACTOR > 1
Данные последовательно накапливаются во внутреннем сдвиговом буфере.
Когда буфер полностью заполнен:
- формируется пакет упакованных данных
- поднимается
m_axis_tvalid
После этого начинается сбор следующего пакета.
Завершение выборки
Когда количество собранных валидных отсчетов достигает значения smp_num:
- поднимается сигнал
sample_done - внутренние счетчики сбрасываются
- буфер очищается
enableсбрасывается в0
Это означает полное завершение текущего цикла выборки.
Симуляция
Тесты запускаются автоматически через make.
cd tests
make sim
При успешном завершении теста высвечивается "ALL PASSED".