Files
reflectometer_fpga_project/rtl/sampler/README.md
2026-05-15 16:41:18 +03:00

5.5 KiB
Raw Blame History

Сэмплер

Модуль выполняет задачу сбора данных с выхода АЦП, их обработки, упаковки и передачи дальше с помощью 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".