Files
2026-04-15 18:56:46 +03:00

62 lines
3.9 KiB
Markdown
Raw Permalink 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.

# Системный контроллер
Контроллер принимает входные пакеты 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" в конце симуляции.