Попробую еще раз задать вопрос на форуме, хотя уже и без особой надежды на ответ.
Есть задача - научиться подавать в ПЛИС длинные последовательности бит (от 10^6 байт по 6 бит).
Имеется отладочная плата Actel, на которой установлена микросхема USB->RS232, а на PC установлен виртуальным COM-порт. Таким образом физически RS232 нигде не существует, однако для всех приложений существует COM-порт, в который я могу писать данные, а для ПЛИС существует 2 контакта RX и ТХ для передачи данных.
Теперь собственно к проблеме.
Поскольку физические ограничения на скорость существует только по USB, я пишу данные со скорость 1.5МБит секунду.
В среде Матлаб это выглядит так
Код
s = serial('COM2');
s.BaudRate=1.5*10^6;
fopen(s);
fwrite(s,'!&!');
fclose(s);
s.BaudRate=1.5*10^6;
fopen(s);
fwrite(s,'!&!');
fclose(s);
Данные пишутся как надо, на осциллографе я вижу требуемые сигналы, длительной одного байта - 4.8 мкс.
Пакеты данных так же передаются как надо, без трудностей,байт за байтом
Код
fwrite(s,'ABCDEFGHIJKLM');
Далее, задача состоит в том, чтобы организовать обмен данными между ПЛИС и PC
Прием->Передача->Прием->Передача
Для чистоты опыта задача прием пока выключен, то есть я пробую выполнить 2 команды передачи последовательно
Код
fwrite(s,'A');
fwrite(s,'B');И вот тут случается странное. Длительность байт не меняется, однако между самими байтами возникает интервал в 80мс. То есть 4мкс порт занят передачей, потом 80мс ждет, потом передает следующий байт.

Откуда возникает эта задержка и как с ней бороться? Одно из временных решений - увеличить размер входного буфера до 1024 бит, и тогда передача будет идти не 4 мкс, а 4 мс, пауза сохранится прежней 80мс. Но КПД по прежнему просто несерьезный.
Где узкое место и чего дожидается система?