Тестируется еще один вариант форт-процессора. На этот раз это стековый процессор на основе подходов VLIW/EPIC. Напомню, что VLIW - это "сверхдлинное командное слово", а EPIC - "явный параллелизм команд". Это близкие вещи, и EPIC был предложен как развитие VLIW.
Особенность (или недостаток?) VLIW в том, что там исходно заложена возможность конфликта по доступу к данным. Например, связка R0 = R1 + R2; R3 = R0 + R5 не может выполняться параллельно, поскольку вторая инструкция использует результат первой. Поэтому код может получаться "рыхлым", и часть исполнительных устройств может простаивать.
Что получается со стеком. 1. За счет входных коммутаторов "проглатываются" слова, манипулирующие стеком. Т.е. если выполняется DUP +, то слово DUP реализуется на входных коммутаторах, которые подают на 1-й и 2-й входы АЛУ вершину стека. 2. Используется дерево АЛУ, а не параллельные АЛУ. Поэтому можно выполнить команду над двумя верхними числами на стеке, а с результатом выполнить операцию, привлекая третье сверху число.
Что получилось в итоге. 1. Относительно небольшой размер ядра в ячейках ПЛИС. Явный параллелизм позволил уложить логику декодирования фактически в обычные мультиплексоры, в итоге возможных действий получилось гораздо больше, чем привычных слов ядра Форта, а эти слова являются подмножеством возможных операций. 2. Умеренная частота. Пока тесты на 50 МГц (low-cost ПЛИС), с возможностью перехода на 80-100 на high-end. 3. Команда в 36 бит с возможностью использования литералов прямо в поле команды. В итоге такие вещи как @ ! и подобные также "глотают" один из операндов, делая ненужным лишний такт на помещение литерала на вершину стека перед использованием.
Зачем. Память в новых ПЛИС выросла в объеме, и от софт-ядра хочется умеренной частоты (чтобы удобно укладывалось в проекты общего назначения) при хорошем уровне соответствия Форту, а также возможности исполнения кода, скомпилированного из Си-подобного входного языка. В итоге сейчас есть 4 софт-ядра стековых процессоров различного назначения.
Тестируется еще один вариант форт-процессора. На этот раз это стековый процессор на основе подходов VLIW/EPIC. Напомню, что VLIW - это "сверхдлинное командное слово", а EPIC - "явный параллелизм команд". Это близкие вещи, и EPIC был предложен как развитие VLIW.
Особенность (или недостаток?) VLIW в том, что там исходно заложена возможность конфликта по доступу к данным. Например, связка R0 = R1 + R2; R3 = R0 + R5 не может выполняться параллельно, поскольку вторая инструкция использует результат первой. Поэтому код может получаться "рыхлым", и часть исполнительных устройств может простаивать.
Что получается со стеком. 1. За счет входных коммутаторов "проглатываются" слова, манипулирующие стеком. Т.е. если выполняется DUP +, то слово DUP реализуется на входных коммутаторах, которые подают на 1-й и 2-й входы АЛУ вершину стека. 2. Используется дерево АЛУ, а не параллельные АЛУ. Поэтому можно выполнить команду над двумя верхними числами на стеке, а с результатом выполнить операцию, привлекая третье сверху число.
Что получилось в итоге. 1. Относительно небольшой размер ядра в ячейках ПЛИС. Явный параллелизм позволил уложить логику декодирования фактически в обычные мультиплексоры, в итоге возможных действий получилось гораздо больше, чем привычных слов ядра Форта, а эти слова являются подмножеством возможных операций. 2. Умеренная частота. Пока тесты на 50 МГц (low-cost ПЛИС), с возможностью перехода на 80-100 на high-end. 3. Команда в 36 бит с возможностью использования литералов прямо в поле команды. В итоге такие вещи как @ ! и подобные также "глотают" один из операндов, делая ненужным лишний такт на помещение литерала на вершину стека перед использованием.
Зачем. Память в новых ПЛИС выросла в объеме, и от софт-ядра хочется умеренной частоты (чтобы удобно укладывалось в проекты общего назначения) при хорошем уровне соответствия Форту, а также возможности исполнения кода, скомпилированного из Си-подобного входного языка. В итоге сейчас есть 4 софт-ядра стековых процессоров различного назначения.
|