Я немного переделал тест FTDI COM-порта - оставил PLL, но не делю частоту, а чуть сдвинул фронт сигнала. Результат - один бит занимает 6 тактовых сигналов на частоте 100МГц. Из графика SignalTap однозначно декодируются принятые байты.
Все же мне кажется что работает какой-то протокол, возможно D2XX. На сайте FTDI две версии драйверов VCP (Virtual COM Port) и D2XX. Но разные страницы на сайте (VCP и D2XX) ведут на загрузку одного и того же драйвера. (Тут я уже запутался)
В общем, предполагаю что используется какой-то синхронный протокол с разделение времени и некоторый интервал отведён для UART. Сейчас ещё попытаюсь поэксперементировать с драйверами. И похоже что источник такого поведения связан вот с этим:
FTDI Порт A
FTDI Порт B
Работа ведётся с портом B, а у него не включен режим VCP. Т.е. решение проблемы может быть в драйверах или, как вариант, переписать модуль UART под этот протокол с разделением времени.
Кстати, если кто смотрел тестовый проект, то там есть вариант срабатывания теста по таймауту. Я не могу понять почему успеваю нажать несколько клавиш до его срабатывания.
state_length <= state_length + 1'b1;
if( (counter != 0) && (state_length > 26040) )
begin
hit <= 1'b1;
counter <= 0;
end
Этот фрагмент работает если состояние на линии RXD не изменилось. В одну секунду он выполняется 100 000 000 раз. По идее, он должен срабатывать сразу после нажатия клавиши, но срабатывает после приблизительно одной-двух секунд. Вот это мистика, которую я не могу объяснить. Разве что схема синхронизируется меньшей частотой, а не 100MHz.
Есть один момент, чтобы TimeQuest не ругался, я создал файл с расширением sdc, добавил в проект и прописал в нём следующую строку:
create_clock -name {QUARTZ} -period 10.000 -waveform { 0.000 5.000 } [get_ports {CLK100MHZ}]
Вроде бы так описываются констрейны? И уже саму схему тактирую сигналом QUARTZ. А если выкинуть из проекта PLL, то SignalTap не может поймать клок.
Есть у кого-нибудь какие-нибудь идеи как запустить COM порт?
Наконец, ещё некоторое неудобствво по сравнению с Марсоходом-2. При заливке SOF в Марсоход-2 не нужно обрывать терминальную сессию. В случае Марсоход-3 нужно закрыть терминал, иначе SOF файл не зальётся в ПЛИС. Мелочь, но не очень удобно.