Долго ленился писать код для этой железки. Но недели три назад взял себя в руки и начал потихоньку писать код.
Код писать надо на System Verilog и С++.
Ленился я не просто так, а потому как опечален был сильно говнистостью FT4222 микросхемы. Обещали в даташите "Up to 53.8Mbps", но по факту в самых тепличных условиях выдает 16 Mbps. Так что нужно было мне время, чтобы "принять жизнь такой какая она есть".
После того как написал все драйвера, долго не мог понять. Почему у меня сигнал с AD7357 приходит делённый на 2. AD7357 это двухканалная ADC, и выдает 4 MSps. Вроде бы немного, но даже при передаче по dual spi требуется 80 MHz частота, чтобы передать данные на Cyclone IV. Оказывается, что 6.25 наносекунд не хватает, чтобы сигнал по spi clock пробежался до ADC по длинному проводу, а потом вернулся обратно в FPGA. Причем данные не портятся, там стабильно читался старый бит. Длинный шлейф можно увидеть в центре фотки (теперь же платки соединенны максимально коротким шлейфом).
Ок, стал ожидать данные не через пол такта, а через целый такт. Данные стали приходить нужные но с ошибками. Тут я чуть не смалодушничал, и не решил воспользоваться "черной магией". Можно было бы подстроить задержку приема данных драйвера под длину шлейфа. Но нет! Пришлось укоротить шлейф. Тогда все 14-ть бит стали приходить как надо.
Вот еще одна картинка. Это шум считываемый с AD7357.
Получилось примерно 7-8 LSB шума. Всего у нас 16384 уровней. Т.е. отношение максимальный сигнал/шум примерно равно 2000 или 66 dB. С этим уже можно работать. При сужении полосы пропускания этот коэффициент будет расти, так что все 14-ть бит будут значимыми.
Следующий этап - научиться делать цифровые корректирующие фильтры для фазово-частотной характеристики аналогового фильтра.