# 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`): формат описан в одном месте, так что просмотр и запись не могут разойтись.