Добрый день! Никогда не занимался программированием АРМов, поэтому вопрос соответствующего уровня)
Итак, АРМ завязан с ПЛИСом через шину EIM. Просматривая исходник утилиты fpga_test, я обнаружил следующую конфигурацию:
Используя эту конфигурацию, я написал бенчмарк, который измеряет скорость чтения и записи по EMI, примерно так:
for (j = 0; j < 1000000; j++)
{
n = *CS1_ptr;
n = *CS1_ptr;
... //много раз, каждый раз по шине передается в режиме мультиплексирования по 1му и 2му BCLK 2х16бит адреса, по 3му и 4му BCLK 2х16 бит данных, ПЛИСка просто записывает в DA магическое число.
}
Измеренная скорость чтения составила примерно 15 мегайбайт в секунду. Скорость записи немного больше.
Вопрос. Можно ли сделать быстрее? Пропускной способности в 15 мб/с мне катастрофически не хватает. Я пытался менять конфигурацию, но безуспешно, т.к. 5000-страничный мануал содержит слишком лаконичное для меня описание назначения битов.
В частности, изменение битов BCD (Burst clock divisor) с 01 на 00 (деление на 1 вместо деления на 2) не дало вообще никакого изменения быстродействия.
Можно, вот только как все выстроить чтоб повысить быстродействие, боюсь, что кроме Вас этим вряд ли кто озадачится (тем более, какие биты регистров конфигурации за что отвечают).
Моя задача была показать функциональнось, часть таймингов явно завышены, рвзбираться с тем как их уменьшить я не стал.
1) подредактировать FPGA автомат взаимодействия с шиной - разместить входные триггеры в IOPAD области, в противном случае будет слабоконтроллируемый путь пин-триггер с величиной до нескольких наносекунд, только не ждите того, что прописав констрайны регистры туда лягут, нужно перепроверять после PAR
2) после этого можно увеличивать частоту шины, уменьшать тайминги задержек и установок
3) испоьзовать burst режим - передается только один адрес и несколько слов данных подряд