Как отображенная память IOs считывается процессором? - PullRequest
1 голос
/ 19 апреля 2020

Я учусь на карте IOs. До сих пор я узнал, что центральный процессор читает и пишет в указанный c адрес памяти для записи или чтения на определенное устройство ввода-вывода. Традиционно, устройства ввода-вывода, используемые для генерации прерывания, и вот как ЦП использовал, чтобы знать, что устройство ввода-вывода завершило обработку, и у него есть результаты, которые будут использованы ЦП.

Но в отображенном в память ввод-выводе такого положения нет, верно? Итак, насколько мне известно (что не имеет смысла), читать, если устройство ввода-вывода дало какой-либо результат ЦПУ или нет, ЦПУ необходимо go и читать память каждый раз. Разве это не плохо? Это хуже, чем опрос, верно? потому что это добавляет циклы для чтения из памяти.

Что мне здесь не хватает? Пожалуйста, помогите.

1 Ответ

1 голос
/ 19 апреля 2020

Взять и пример моего устройства:

MEMORY {
   IRAM        : origin = 0x0,         len = 0x30000
   CACHE_L2    : origin = 0x30000,     len = 0x10000
   SDRAM       : origin = 0x80000000,  len = 0x1000000
   FPGA_A1     : origin = 0x90000000,  len = 0x1000
   FPGA_A2     : origin = 0xA0000000,  len = 0x1000
   WATCHDOG    : origin = 0xB0000000,  len = 0x1
}

Это для моего C6713 DSP. Он разделяет память с двумя FPGA FPGA_1 и FPGA_2 и разделяет память с процессором PowerP C в секции SDRAM. Это то, что можно назвать примером устройства отображения памяти. Две FPGA в основном обрабатывают преобразование AD C, импульсный, цифровой ввод-вывод и защиту. Придерживаемся AD C.

  • Обычный C6713 будет обрабатывать AD C при 50use c. На том же уровне мы бы выполнили наш контроль l oop. Может быть, мы можем увеличить sh до 25use c, но мы потребляем все больше и больше ресурсов процессора, и C6713 будет делать все меньше и меньше с каждым увеличением скорости выборки.
  • Принимая во внимание, что ПЛИС выполняет AD C преобразование за 1 использование c. Таким образом, к тому времени, когда первый элемент управления l oop начинает работу, FPGA уже произвела 50 значений. Но нашему элементу управления oop не нужно все, что он может go, чтобы память просто выполнила операцию чтения, и у него есть все необходимые значения.

Итак, выгрузив его на устройство с отображенной памятью , Мы

  • Освободили C6713 от операции AD C. (То есть много вычислительной мощности высвобождается)
  • Только при операции чтения из памяти C6713 будет иметь новое значение.

Итак, теперь, чтобы ваш ЦП считал значение, вы можете либо запланировать операцию чтения на вашем ЦП, убедившись, что он всегда получает новое значение, либо вы можете сконфигурировать свою ПЛИС, в этом конкретном случае сгенерировать прерывание через каждые 50 использований c, что делает вас управляемым прерыванием процессора.

Короче говоря, нет ничего плохого в том, что вы много выигрываете, выгружая такие задачи из ЦП и освобождая много вычислительной мощности. При этом вы также упростите свою систему.

Надеюсь, это поможет.

...