docs: add README for accum
This commit is contained in:
39
rtl/accum/README.md
Normal file
39
rtl/accum/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Аккумулятор
|
||||||
|
Модуль аккумуляции данных для последующего усреднения. Принимает данные с входного потока АХI-Stream фиксированной ширины (задается параметрически), суммируя их сначала по окнам, а затем со значениями из предыдущей последовательности.
|
||||||
|
|
||||||
|
## Список парамтеров:
|
||||||
|
- DATA_WIDTH - ширина входных данных, получаемых с АЦП
|
||||||
|
- ACCUM_WIDTH - размер данных для аккумуляции, должен быть степенью числа 2. По умолчанию - 32
|
||||||
|
- N_MAX - максимальное число окон в последовательности. Должно быть степенью числа 2. Влияет на размер используемой памяти.
|
||||||
|
- WINDOW_SIZE - размер окна усреднения
|
||||||
|
- PACKET_SIZE - размер выходного пакета
|
||||||
|
|
||||||
|
## Иерархия:
|
||||||
|
```
|
||||||
|
├── accum_top - полная сборка аккумулятора
|
||||||
|
│ ├── accum - основная логика аккумуляции по окнам и последовательностям
|
||||||
|
│ │ ├── adder - модуль сложения по окнам
|
||||||
|
│ ├── out_axis_fifo - модуль для выдачи данных наружу в другом частотном домене
|
||||||
|
```
|
||||||
|
## Список входных портов:
|
||||||
|
- clk_in - частота входных данных
|
||||||
|
- rst - сброс всего
|
||||||
|
- [DATA_WIDTH-1:0] s_axis_tdata - входные данные
|
||||||
|
- s_axis_tvalid - валидность входных данных
|
||||||
|
- start - начало аккумуляции
|
||||||
|
- [31:0] smp_num - число сэмплов (должно быть кратно WINDOW_SIZE)
|
||||||
|
- [15:0] seq_num - число последовательностей аккумуляции
|
||||||
|
- eth_clk_in - частота для выходных данных на ethernet
|
||||||
|
- req_ready - готовность отправителя начать принимать данные
|
||||||
|
- m_axis_tready - готовность выходного axis
|
||||||
|
|
||||||
|
|
||||||
|
## Список выходных портов:
|
||||||
|
- send_req - сигнал начала отправки данных
|
||||||
|
- [7:0] m_axis_tdata - данные выходного axis
|
||||||
|
- m_axis_tvalid - валидность выходного axis
|
||||||
|
- m_axis_tlast - последний пакет в axis
|
||||||
|
- finish - конец отправки всех данных, полный цикл работы завершен
|
||||||
|
|
||||||
|
## Логика работы:
|
||||||
|
Модуль начинает работу при получении сигнала start. Сразу после начала работы можно подавать данные на входной axis, они будут суммироваться по WINDOW_SIZE штук и отправляться на хранение. Так будет сделано для последовательности длиной smp_num чисел, затем начинается новая последовательность - всего таких будет seq_num штук. Каждая последующая последовательность также суммируется по окнам, а затем полученные значения прибавляются к тем же значениям предыдущей последовательности. Таким образом, выполняется суммирование по двум осям, и из исходных данных seq_num по smp_num чисел остается вектор длиной 1 x (smp_num / WINDOW_SIZE). После накопления всех данных начинается выдача. Выдача осуществляется на выходной AXI stream, работающий в домене eth_clk, и имеющий ширину 8 бит - предполагается, что выдача пойдет на ethernet-udp. Когда поднят сигнал req_ready, модуль будет отправлять send_req (запрос отправки пакета), и по готовности m_axis_tready начнет выдавать пакет размер PACKET_SIZE байт. Если данные нельзя ровно разложить по пакетам, то в последнем пакете могут быть отправлены рандомные данные из памяти. После окончания отправки всех пакетов будет поднят сигнал finish.
|
||||||
Reference in New Issue
Block a user