ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
902708
Evgeny_CD, Архитектор (08.02.2019 23:52, просмотров: 1058)
Nuvoton NUC970 -> и "малоканальность" DMA. http://caxapa.ru/837495.html
Всем хорошо 970, кроме одного маленького нюанса - всего 2 канала DMA. 980 содержит 2 DMA контроллера, по 10 каналов в каждом, и это позволяет (теоретически) эффективно работать с периферией. Но нет варианта без криптографии, что создает известные трудности. У 970 есть версии без криптографии, но мало DMA. Просто как в известной миниатюре про больших и маленьких раков :( 2 канала DMA - это, по сути, обслужить "на всю катушку" один Ethernet контроллер. А их два в некоторых чипах. DMA Host имеет встроенный DMA, что конечно хорошо, но мало. Все остальные коммуникационные интерфейсы становятся малополезными из-за сильной нагрузки на процессор. 56к ОЗУ - это некоторое спасение, но не полное. Когда процессор начинает таскать данные в/из периферии, нас будет сильно мучить разная тактовая ядра и периферийных шин. CPU - 300 MHz DRAM - 150 MHz 16 бит AHB - 150 MHz APB - 75 MHz - вот тут большая часть периферии сидит. Ethernet - 256 байт FIFO, отдельно TX, RX, сидят на AHB. LDM/STM в режиме ARM - 16 слов за 16 тактов по шине процессора (одна половина операции - прочитать в регистры; не учтены расходы тактов на саму команду и спасение/сохранения банка регистров). 16 слов мы прочитали из FIFO периферии за 32 такта (150 МГц) и записали по адресу, который закеширован - 16 тактов. 48 тактов/16 слов/64 байта. 256 байт - 192 такта. 1к - 768 тактов. 10 Мбайт - 7 680 000 тактов. 20 мбайт - 15 360 000 тактов. У меня получилось 0,75 байта на такт. В приложенной презе на 64 стр. 0.64 байта на такт на некоем асм куске. Там еще немало накладных расходов, так что умножаем на 1.5 = 23 040 000 тактов. Будем считать 24м тактов. Или 8% от 300 МГц. 100М Ethernet способен пропустить 20Мбайт/сек дуплексного потока, а мы только на передачу/прием такого потока в память затратили 8..10% производительности процессора. DMA не бесплатен, он блокирует шину (здесь нет многобанкового ОЗУ), но за счет многослойного шинного коммутатора и способности процессора выполнять регистровые операции "внутри себя" не все так плохо, потери будут раза в 3-4 меньше от описанного выше. Куча всякой мелкой периферии чревата нагрузкой на кеш команд обработчиками прерываний от такой периферии. Видимо, код таких обработчиков стоит хранить в 56к ОЗУ, может часть данных тоже. В целом, NUC хороши ценой, -40 и богатой периферией, но не стоит забывать, что ожидать полной скорости от всей периферии наивно. У кого какой опыт работы с этими камнями?