Взять и пример моего устройства:
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, что делает вас управляемым прерыванием процессора.
Короче говоря, нет ничего плохого в том, что вы много выигрываете, выгружая такие задачи из ЦП и освобождая много вычислительной мощности. При этом вы также упростите свою систему.
Надеюсь, это поможет.