Разработка или подбор контроллера управления для встраиваемой системы на ПЛИС – актуальная и не всегда тривиальная задача.
Зачастую выбор падает в пользу широко распространённых IP-ядер, имеющих развитую аппаратно-программную структуру — поддержку высокопроизводительных шин, периферийных устройств, прикладного ПО и, в некоторых случаях, операционных систем (в основном Linux, Free-RTOS).
Одной из причин такого выбора является желание обеспечить достаточную производительность и иметь под рукой готовые инструменты для разработки программного обеспечения.
В случае, если используемая в проекте ПЛИС не содержит аппаратных процессорных ядер, реализация полноценного процессорного ядра может оказаться избыточной, либо привести к усложнению его программного обеспечения, а значит, привести к увеличению затрат на его разработку.
разработка.
Кроме того, универсальное программное ядро так или иначе будет занимать дефицитные ресурсы программируемой логики.
Специализированный программный процессор будет более оптимальным решением с точки зрения экономии логических ресурсов – за счет адаптированной системы команд, небольшого количества регистров и ширины данных (до кратных 8 бит).
Согласование с периферийными устройствами — это, прежде всего, проблема согласования шины и протокола.
Многопоточная архитектура процессора может заменить сложную систему обработки прерываний.
Программные процессоры на основе стека и контекст потока
Обычно многопоточные процессоры имеют одно ALU и несколько наборов регистров (иногда называемых «теневыми» регистрами) для хранения контекста потока, следовательно, чем больше потоков требуется, тем больше накладные расходы на логику и память.Среди многообразия архитектур ядер программных процессоров следует выделить стековую архитектуру.
Такие процессоры часто называют процессорами Форта, поскольку чаще всего их ассемблер естественным образом поддерживает подмножество команд языка Форт. Стековые процессоры обладают интересным свойством — малым размером контекста потока.
Поскольку роль регистров выполняет стек, при переключении на другой поток не обязательно иметь полный набор регистров общего назначения — достаточно переключить указатель стека [1].
В простейшем случае контекст потока может быть ограничен небольшим набором указателей — стеком, стеком возврата и счетчиком команд потока.
При наличии нескольких специализированных вычислительных потоков компактность многопоточной схемы будет важнее пиковой производительности, а задача реализации процессорной системы на ПЛИС минимального объема актуальна в свете, например, новое семейство «Спартан-7», количество ячеек в устройствах которого невелико.
Идеи и методы реализации многопоточного программного процессора представлены в [1].
Развитие работ в этом направлении привело к появлению свободного компилятора Python для процессоров стековой архитектуры [2].
Это решает задачу разработки системного программного обеспечения для мягкого процессора.
Более того, благодаря простому синтаксису и поддержке различных парадигм программирования этот язык популярен и удобен для начинающих программистов.
Инструменты для упрощенного проектирования IP-ядра
Также известен инструментарий MyHDL [3], позволяющий описывать аппаратные модули и узлы на языке Python. Синтаксис описания проще, чем у VHDL, а сами инструменты менее требовательны к системным ресурсам, чем собственные среды разработки.Помимо самого описания, MyHDL позволяет описывать тестовые последовательности и логически моделировать работу модулей [4].
Потенциально совместное использование инструментов MyHDL и Уж позволит разработать программный процессор и компилятор языка высокого уровня для него на одном языке, что снизит сложность задачи.
В частности, это будет полезно в проектах, связанных с начальным обучением программированию, развитием цифровых технологий и систем управления.
На данный момент предложенные подходы к начальному обучению работе с программируемой логикой находятся на стадии поиска эффективных решений и не всегда методологически непротиворечивы [5-7].
Единый стиль описания может помочь сгладить сложности в процессе освоения ПЛИС; кроме того, некоторые популярные конструкторы и комплекты с программируемыми блоками используют Python для задания рабочей программы.
Комбинированные логические схемы и последовательные автоматы достаточно легко описываются и моделируются [8,9], из чего можно сделать вывод, что, придерживаясь определенной концепции, довольно просто описать прототип многопоточного программного процессора на поведенческом уровне.
.
Реализация простого многопоточного процессора в MyHDL
С учетом идей и базовой архитектуры процессора, предложенных в [1], разрабатываемый процессор будет иметь следующие особенности: Гарвардская архитектура с раздельными памятью программ и данных, в память данных физически отображаются стеки, для хранения данных предусмотрены наборы теневых регистров.контекст потока.
Однотактные и конвейерные решения для начальной реализации не очевидны, а с учетом того, что программный процессор не требует сверхвысокой производительности, цикл инструкций процессора можно сделать многотактным.
В первом приближении достаточно четырех этапов выполнения: чтение контекста потока, выборка операндов в регистры кэша, выполнение команды, переход на следующий поток.
Размер программной памяти, данных, размеры стека и количество потоков задаются параметрически с помощью ряда переменных:
На вход процессора подаются тактовый сигнал и сигнал сброса, а также шины данных и адреса для внешних устройств (дополнительные сигналы не являются обязательными).bits=16 Nthread=8 RAMsize=256 ROMsize=2048 STACKsize=8 RS_BASE=64 DS_BASE=8
Ядро процессора будет включать в себя переключатель состояния процессора, счетчик текущих потоков, наборы указателей стека и счетчиков программ для каждого потока, регистры текущего контекста, память данных и программ.
Сама микроархитектура ядра реализована через ряд функций, отвечающих за генерацию последовательных схем.
Счетчик состояний процессора реализован просто — обнуляется по сигналу сброса, в противном случае — инкрементируется для каждого такта.
Логика работы процессорных узлов на каждом этапе исполнения описывается отдельной функцией: def gor(reset, clk, dat, prt):
Теги: #python #FPGA #pls #FPGA #pls #многопоточность #программируемая логика #микропроцессорная архитектура #фортные процессоры.
-
Можешь Оказать Мне Услугу?
19 Oct, 24 -
Как Вам Новые Цвета Пробок На Яндексе?
19 Oct, 24 -
Чего Можно Ожидать От Lua 5.2?
19 Oct, 24 -
Пожалуйста, Оцените
19 Oct, 24 -
Введение В Rxjava: Почему Rx?
19 Oct, 24 -
Windows + Linux + Swap + Данные
19 Oct, 24 -
Логотипы. Дизайн Google
19 Oct, 24