Files

73 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

# AD7766 на Tang Primer 25K
Отладочная прошивка для AD7766: непрерывная оцифровка дифференциального входа
2026-08-11 12:19:34 +03:00
и выдача отсчётов по UART для просмотра в `Signal_analayzer`.
MCLK 1.000 МГц -> ODR 125 kSPS -> дециматор sinc^1 /10 -> **12 500 Гц** ->
кадры по 50 отсчётов -> UART 921600.
Параметры и обоснования со ссылками на даташит — [docs/design.md](docs/design.md).
Распиновка — [docs/pinout.md](docs/pinout.md).
## Состав
| Файл | Назначение |
|:--|:--|
| `src/Top.vhd` | верхний уровень: только экземпляры и связи, без логики |
| `src/SPI_Master.vhd` | битовый уровень обмена: CS, SCLK, защёлка SDO |
| `src/SPI_Ctrl.vhd` | MCLK, сброс через SYNC/PD, запуск чтения по спаду DRDY |
| `src/decimator.vhd` | усреднение по 10 отсчётам |
| `src/fifo_top.vhd` | буфер отсчётов, заглушка под IP-ядро Gowin |
| `src/Packets_creator.vhd` | сборка кадра с CRC-16 |
| `src/UART.vhd` | передатчик, взят из `zvp_da_common` без изменений |
| `src/led_status.vhd` | индикация частотой мигания |
| `src/AD7766.cst` | привязка выводов |
| `tb/ad7766_model.vhd` | поведенческая модель АЦП по Table 3 |
| `tb/tb_top.vhd` | сквозной тест: модель -> ПЛИС -> UART -> разбор кадра |
| `tools/uart_capture.py` | приём кадров, запись `.raw` и `.bin` |
| `tools/uart_live.py` | живой просмотр: осциллограмма, спектр, счётчики |
## Симуляция (GHDL)
```bash
ghdl -a --std=08 --workdir=build src/fifo_top.vhd src/UART.vhd src/led_status.vhd src/SPI_Master.vhd src/SPI_Ctrl.vhd src/decimator.vhd src/Packets_creator.vhd src/Top.vhd tb/ad7766_model.vhd tb/tb_top.vhd && ghdl -e --std=08 --workdir=build tb_top && ./tb_top --stop-time=20ms
```
Модель выдаёт группами по 10 одинаковых слов, поэтому усреднённый отсчёт обязан
совпасть со значением группы побитово. Число проверяемых кадров задаётся
`-gFRAMES=N` (один кадр ~4 мс модельного времени).
## Запись с железа
```bash
py -3 tools/uart_capture.py --list
```
```bash
py -3 tools/uart_capture.py --port COM5 --seconds 10 --out test1
```
Получаются `test1.raw` (весь поток как пришёл, для отладки канала),
`test1.bin` (только отсчёты, читается `read_24bit_bin()`) и `test1.log`.
В `Signal_analayzer` для этих данных: `'FS': 12500`, `'V_REF': 5`.
## Живой просмотр
```bash
py -3 tools/uart_live.py --port COM10
```
Осциллограмма, спектр и счётчики кадров в реальном времени — чтобы посмотреть
сигнал до того, как писать запись. Управление кнопками внизу окна: запись,
автомасштаб, вычитание постоянной составляющей, вид спектра, пауза. Те же
действия продублированы клавишами `r`, `a`, `d`, `s`, `f`, выход — `q`.
Запись встроена в просмотр по необходимости: COM-порт держит один процесс,
и запустить `uart_capture.py` на том же порту параллельно нельзя. Для записи
без просмотра остаётся `uart_capture.py` — он же нужен, когда важно
фиксированное время записи.
Разбор кадров у обоих инструментов общий (`FrameParser` в `uart_capture.py`):
формат описан в одном месте, так что просмотр и запись не могут разойтись.