Files
AD7766_fw/README.md
T

73 lines
4.2 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.
# AD7766 на Tang Primer 25K
Отладочная прошивка для AD7766: непрерывная оцифровка дифференциального входа
и выдача отсчётов по UART для просмотра в `F:\PyPrj\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`):
формат описан в одном месте, так что просмотр и запись не могут разойтись.