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/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)
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 мс модельного времени).
Запись с железа
py -3 tools/uart_capture.py --list
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.
Живой просмотр
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):
формат описан в одном месте, так что просмотр и запись не могут разойтись.