docs: add controller READMEs

This commit is contained in:
Phil
2026-04-15 18:54:07 +03:00
parent eea031c6c1
commit f98051bc53
2 changed files with 69 additions and 0 deletions

62
rtl/controller/README.md Normal file
View File

@ -0,0 +1,62 @@
# Системный контроллер
Контроллер принимает входные пакеты udp с ethernet, передаваемые по axi stream, и выполняет настройку выходных регистров в соотвествии с содержимым этого пакета, а также синхронизирует сигналы между тремя clock domains - есть clk от ethernet, clk для ЦАП и clk для АЦП
## Список параметров:
- dac_data_width - битность данных ЦАП, <= 16bit
## Список входных портов:
- eth_clk_in - базовая входная частота
- dac_clk_in - входная частота ЦАП
- adc_clk_in - входная частота АЦП
- rst_n - общий reset
- s_axis [8 bit] - AXI stream slave для приема данных от ethernet udp (уже разобранный payload по байтам) - домен eth_clk
- finish - сигнал окончания приема данных с АЦП, домен adc_clk !
## Список выходных портов:
- dac_pulse_width[31:0] - выход pulse_width в домене dac_clk
- dac_pulse_period[31:0] - выход pulse_period в домене dac_clk
- dac_pulse_height[dac_data_width-1:0] - выход pulse_height в домене dac_clk
- dac_pulse_num[15:0] - выход pulse_num в домене dac_clk
---
- adc_pulse_period[31:0] - выход pulse_period в домене adc_clk
- adc_pulse_num[15:0] - выход pulse_num в домене adc_clk
---
- dac_start - start в домене dac_clk
- adc_start - start в домене adc_clk
---
- dac_rst - rst в домене dac_clk
- adc_rst - rst в домене adc_clk
## Логика работы:
по умолчанию после инициализации блок встает в состояние ожидания (*idle*), и становится *ready* для приема данных по axis.
далее ждет контрольный пакет. всего есть 3 вариации контрольных пакетов (в любом порядке), получаемых по axi stream:
```
8'b00001111 - soft reset
8'b11110000 - start
8'b10001000 - set_data
```
*soft reset* значит, что нужно отправить пульс rst на dac_rst и adc_rst, синхронизировав пульсы в их доменах. при этом сброс самого контроллера делать не нужно!
*start* значит, что нужно отправить пульс start на dac_start и adc_start в их доменах, желательно как можно "одновременее". при этом после этого блок перестает быть ready и ждет, пока не придет пульс finish, после этого он возвращается снова в idle состояние
set_data** значит, что следующие 96 бит = 12*8 байт, пришедшии по axis - это конфигурационная информация и ее нужно записать в внутренний регистр на 96 бит.
конфигурационный регистр на 96 бит делится так:
```
reg[31:0] - pulse_width
reg[63:32] - pulse_period
reg[79:64] - pulse_num
reg[79+dac_data_width:80] - pulse_height
```
соотвественно эти записанные значения должны выставляются на соотвествующие выходные сигналы в доменах dac_clk и adc_clk. выходы обновляются каждый раз, когда происходит set_data, и сигналы сохраняют своё значение до следующего set_data.
## Симуляция
Тесты запускаются автоматически через make.
```
cd tests
make sim
```
Должно выдать "All tests done" в конце симуляции.