Files
reflectometer_fpga_project/rtl/generator/README.md
2026-06-09 16:47:16 +03:00

92 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Генератор
Модуль выполняет задачу формирования последовательности импульсов заданной амплитуды, длительности и периода.
Дополнительно реализован механизм синхронизации с модулем сэмплера через сигналы `request` и `done`, позволяющий запускать сбор данных для каждого импульса и ожидать подтверждения завершения выборки перед переходом к следующему импульсу.
---
## Список параметров
### DATA_WIDTH
Ширина выходных данных генератора.
### ZERO_LEVEL
Уровень сигнала в состоянии отсутствия импульса (базовый уровень сигнала).
Типовые значения:
- `8192` — середина диапазона ЦАП
- `0` — нулевой уровень
---
## Список входных портов
### clk_dac
Сигнал тактирования модуля.
### rst
Сброс модуля и остановка генерации.
### start
Сигнал запуска последовательности импульсов.
При его активации модуль фиксирует все входные параметры и начинает генерацию.
Повторный запуск во время активной генерации блокируется с помощью внутреннего сигнала `enable`.
### [31:0] pulse_width
Длительность активной части импульса (в тактах).
### [31:0] pulse_period
Полный период импульса (в тактах).
### [DATA_WIDTH-1:0] pulse_height
Амплитуда импульса.
### [15:0] pulse_num
Количество импульсов, которое необходимо сгенерировать.
### request
Сигнал запроса на синхронизацию от сэмплера для текущего импульса.
---
## Список выходных портов
### dac_wrt
Выходной сигнал разрешения записи сигнала
### [DATA_WIDTH-1:0] dac_out
Выходное значение амплитуды сигнала.
Во время активной части импульса равно `pulse_height`, вне импульса — `ZERO_LEVEL`.
### done
Сигнал запроса на запуск синхронизации с сэмплером для текущего импульса.
Поднимается в начале каждого нового импульса и снимается после получения `request`.
---
## Логика работы
После прихода сигнала `start` модуль:
- фиксирует входные параметры генерации
- поднимает `enable = 1`
- выполняет `pulse_num` циклов работы
- - типичный цикл состоит в ожидании синхронизации (`synced`), после чего запуск генерации импульса
Синхронизация представляет из себя простое рукопожатие с внешним модулем, имеющим сигналы `request`/`done` работающими в соответствии с этими сигналами генератора. Один из модулей, входит в ожидание и ставит на свой done активный уровень, после чего ждет, пока второй, запаздывающий модуль не войдет в свой режим ожидания, и не выставит для своего done активный уровень. Для каждого из модулей, на следующий такт после выставления активного уровня, производится проверка своего request. Так, при получении активного request (иными словами активного done от внешнего модуля), модуль незамедлительно опускает уровень своего done и начинает работать. Done подымается до активного уровня хотя-бы на один такт работы соответствующего модуля.
---
## Симуляция
Тесты запускаются автоматически через make.
```
cd tests
make sim
```
При успешном завершении теста высвечивается "ALL PASSED".