Я разрабатываю основное ядро обработки изображений для FPGA и ASIC. Идея состоит в том, чтобы связать с ним стандартный процессор. Одна из проблем, которые у меня есть, - это «запрограммировать» это. Позвольте мне объяснить: у ядра есть декодер команд для моих «пользовательских» расширений. Например:Как включить и перевести пользовательские инструкции/расширение на стандартном уровне поддержки кода C/C++
vector_addition $vector[0], $vector[1], $vector[2] // (i.e. v2 = v0+v1)
и многие другие подобные этому. Эта операция отослана процессором через шину к ядру, используя процессор для петель, не-векторных операций и т.д., как это:
for (i=0; i<15;i++) // to be executed in the processor
vector_add(v0, v1, v2) // to be executed in my custom core
Программа написана на C/C++. Ядро нужно только саму команду, в машинном коде
- опкод = vector_add = 0x12h
- register_src_1 = v0 = 0x00h
- register_src_2 = v1 = 0x01h
register_dst = v2 = 0x02h
машинный код = opcore | v0 | v1 | v2 = 0x7606E600h
(или любой другой, просто contatenation различных областях, чтобы построить команду в двоичный)
После отправки его через шину к ядру, ядро может запросить все данные память с выделенными шинами и обрабатывать все без использования процессора. Большой вопрос: Как я могу перевести предыдущую инструкцию в шестнадцатеричное представление? (отправить его через автобус не проблема). Некоторые варианты, которые приходят на ум
- Run интерпретируемый код (перевести в машинный код во время выполнения в процессоре) -> очень медленно, даже с помощью какой-то инлайн макросъемки
- Компиляция пользовательских разделов с внешний пользовательский компилятор, загружает двоичный файл из внешней памяти и перемещает его в ядро с помощью некоторой уникальной команды -> трудно читать/понимать исходный код, слабую интеграцию с SDK, слишком много разделов, если код очень сегментирован
- JIT-компиляция - -> комплекс только для этого?
- Расширение компилятора -> кошмар!
- Пользовательский процессор, соединенный с настраиваемого ядра для обработки все: петли, указатели, выделение памяти, переменные ... -> слишком много работы
Проблема заключается в том о программном обеспечении/составителей, но для тех, имеют глубокие знания в этой теме, это SoC в FPGA, основным процессором является MicroBlaze, а IP Core использует шины AXI4.
Надеюсь, я объяснил это правильно ... Спасибо заранее!
Может быть, мне нужно короткое мое предложение ... Как добавить новые инструкции к сценарию [Code Generation] (http://en.wikipedia.org/wiki/Code_generation_%28compiler%29), который я использую (gcc/g ++) – amnl