Стековые микропроцессоры, или новое — это хорошо забытое новое
Данная статья продолжает цикл статей по описанию структур микропроцессоров для встроенного применения [5–8]. Были приведены описания регистрового процессора, процессора, работающего по схеме «память — аккумулятор». Настала очередь стекового процессора. Цель данной статьи — показать, для чего это надо и «как это сделано внутри». Кроме того, приводится краткое описание языка программирования Форт и Форт-систем.
Aвтор заранее просит прощения у читателей за очень сжатый, иногда почти «телеграфный» стиль изложения. Материалов по данной теме очень много, некоторые материалы заслуживают краткого описания, а некоторые хочется хотя бы упомянуть, чтобы читатели смогли все остальное узнать сами. Возможно, что в статье что-то не отражено или у вас есть какие-то материалы по этой тематике, — автор всегда готов обсудить заинтересовавшую вас тему. Возможно, результат обсуждения будет отражен в следующей статье.
Автор выражает свою благодарность всем фирмам и частным лицам, предоставившим свои материалы для написания данной статьи.
Где можно увидеть работающие Форт-системы? Начиная от космических «Шаттлов» на самом верху и до «Спасибо за покупку» на чеке из ближайшего магазина — вот таков диапазон применений Фортсистем.
Блок-схема стекового процессора приведена на рис.1. В отличие от «обычного» микропроцессора, стековый процессор содержит два стека — стек данных и стек возвратов. Стек возвратов используется для возвратов из подпрограмм, как и у «обычных» микропроцессоров, а вот стек данных — это «привилегия» стекового процессора. Именно через стек данных производится передача параметров при вычислениях.
Исторический экскурс
Нет еще такой машины времени, чтобы можно было заглянуть вперед и сказать, что и как будет применяться через 100–200 лет. Но на лекциях пофилософии нас учили, что развитие в природе идет по спирали. И если хочется узнать, что будет нас ждать впереди, лет через 10–20, то нужно оглянуться назад, посмотреть, что было там и «перенести» это на сегодняшнюю действительность. Итак, попробуем провести очень краткий исторический экскурс в эпохи «компьютерных динозавров», чтобы узнать, что нас ждет в будущем. Поскольку большинство читателей журнала «ходить, говорить и программировать начали одновременно», то за начало «исторической эры», естественно, выберем появление первых IBM PC. При этом все получится довольно привычно и «наукообразно», как в археологии. Итак, начнем наши раскопки.
Представим, что компьютерная история состоит из следующих эпох:
- эпохи первых компьютеров и «доисторических компьютеров»;
- эпоха первых однокристальных микропроцессоров;
- эпоха появления IBM PC;
- эпоха появления однокристальных микроконтроллеров;
- эпоха расцвета однокристальных микропроцессоров и IBM PC, появление RISC-микропроцессоров и микроконтроллеров;
- эпоха появления первых «систем-на-кристалле».
Как и любая другая историческая формация, каждая компьютерная эпоха проходит стадию зарождения, расцвета, спада и затем гибели. Но при этом все свои достижения каждая эпоха передает следующей за ней эпохе, где эти достижения трансформируются под текущие нужды, развиваются, и затем либо отмирают, либо наследуются следующими поколениями. Но поскольку талант инженеров, программистов, бизнесменов не зависит от той эпохи, в которую они творили, то нам будет полезно внимательно сопоставить направление деятельности людей, определявших уровень эпохи, с теми ресурсами, которые были в тот период у них в распоряжении.
Чтобы не утомлять читателя точными техническими данными, относящимися к тому или иному экспонату, позволим себе приводить только качественные оценки ресурсов процессоров. Поскольку основная сфера интересов автора — микропроцессорные системы и встроенные системы, то за базу для отсчета будем брать те ресурсы, которыми располагают современные микропроцессорные и встроенные системы.
Эпоха первых компьютеров и «доисторических компьютеров»
Погружаемся в доисторические времена. Программистов — всего только сотни. Языков программирования нет, Интернета нет, телеконференций, конечно, тоже нет. Как в таких условиях можно было что-то делать — с сегодняшней точки зрения совершенно не понятно. Ресурсов у машин крайне мало. Однако компьютеры производятся и продаются накоммерческих условиях. В обществе возникает потребность в Программном Обеспечении к компьютерам. Именно эта эпоха характеризуется тем, что у программистов очень много энтузиазма и желания работать. Происходит зарождение языков высокого уровня. Это приводит к облегчению труда программистов и к облегчению отладки программ. Поскольку аппаратных ресурсов мало, то возникает потребность в компиляции программ для систем с ограниченными ресурсами. Здесь необходимо отметить возникновение двух языков программирования, ориентированных насистемы реального времени, имеющие ограниченные ресурсы — языки С и Форт. Разрабатываются первые операционные системы.
Эпоха первых однокристальных микропроцессоров
«Доисторические компьютеры» продолжают бурно развиваться, их аппаратные ресурсы значительно выросли. Соответственно, спрос на «доисторические компьютеры» вызвал рост электронной технологии, а это в свою очередь позволило совершить качественный скачок в развитии — создать однокристальные микропроцессоры. Наиболее известный представитель этого класса — Intel 8080. Были, как положено, и другие представители, но у нас в стране о них мало что известно. Итак, что можно сказать о первых однокристальных микропроцессорах? Да почти тоже, что и об их старших братьях. Ресурсов у машин также крайне мало. И они также производятся и продаются на коммерческих условиях. И снова в обществе возникает потребность в Программном Обеспечении именно к этим компьютерам. И снова эта эпоха характеризуется тем, что у пользователей-программистов очень много энтузиазма и желания работать. Разрабатываются первые операционные системы, ориентированные на 8-разрядные микропроцессоры и на системы с минимальными аппаратными ресурсами. Появляются кросскомпиляторы.
Эпоха появления IBM PC
Развитие технологии электронной техники приводит к очередному скачку — появлению 16-разрядной однокристальной машины (кристалл Intel 8086 и IBM PC на его основе). Присмотритесь внимательно к вашей сегодняшней машине, и вы увидите, что могучий Р4 унаследовал черты и Intel 8086, и даже Intel 8080. Поскольку далее начинается «наша эра», то остальное сравнение этой эпохи с другими читатель может провести сам. Отметим только, что Программное Обеспечение довольно быстро подгоняется под имеющиеся ресурсы.
Эпоха появления однокристальных микроконтроллеров
Итак, мы добрались до очень интересной эпохи — эпохи появления однокристальных микроконтроллеров. В чем же суть этого явления и зачем фирма Intel за них взялась? Как говорится, «а ларчик просто открывался». Все дело в стоимости выполнения одной вычислительной операции. Одна отдельно взятая операция должна выполняться на все более и более дешевых аппаратных средствах, но объем продаж этих средств должен невероятно увеличиваться. Посмотрите предыдущие эпохи — при переходе от одной эпохи к другой происходит удешевление вычислений, при этом объем продаж аппаратных средств резко увеличивается.
Первые микроконтроллеры. Ресурсов настолько мало, что и говорить об этом трудно. Отладка занудная, память команд — по карте заказа или однократно программируемая. У некоторых представителей память команд внешняя.
Здесь мы вплотную подошли к стековым процессорам. NC4000, в дальнейшем переименованный в NC4016 (Novix, 1985), стал первым чипом, разработанным для непосредственного выполнения команд Форта. Он был реализован на матричном кристалле, два массива аппаратных стеков были вынесены наружу и подключались через дополнительные стековые шины. Два верхних элемента стека данных T и N, а также один элемент стека возвратов R были расположены во внутренних регистрах. Процессор выполнял большинство команд, включая вызов подпрограмм, за один такт, что позволяло водной 16-разрядной команде упаковывать несколько Форт-примитивов.
Эпоха расцвета однокристальных микропроцессоров и IBM PC, появление RISC-микропроцессоров имикроконтроллеров
Этот пункт хочется выделить, чтобы неупустить один довольно важный момент. К этой эпохе развитие электронной техники позволило интегрировать на кристалле значительные ресурсы. И что же происходит? Появляются первые микрокомпьютеры на кристалле. Это аналоги популярных микропроцессоров Intel80186 и Intel80386. Тоесть наступает момент, когда определяющим критерием при разработке микроконтроллера становится уже не технологический предел по числу вентилей в кристалле, а разработанное программное обеспечение.
Увеличение аппаратных ресурсов микроконтроллеров позволяет использовать языки программирования высокого уровня. А это, в свою очередь, приводит к возможности быстрого переноса отлаженных программ с одной аппаратной платформы на другую. Появляется множество структур микропроцессоров. Идет интенсивное развитие программных средств, в том числе и операционных систем реального времени.
Было еще одно знаменательное событие, которое произошло в эту эпоху. Однако это событие было довольно мало известно даже у нас в стране. В эту эпоху в СССР появились первые интегральные стековые процессоры, а если говорить более точно, то Форт-процессоры. Эти процессоры поддерживали набор команд, существующий только в языке Форт. В следующей публикации мы подробно рассмотрим принцип работы Форт-процессора, а в историческом исследовании необходимо отметить, что эта эпоха в нашей стране отмечена появлением первого отечественного микропроцессора, разработанного и внедренного в производство отечественной негосударственной фирмой. Это была фирма «Форт-Инфо», проект Дофин-1610, год выпуска — 1990.
Стековые процессоры сегодня
Типичный представитель — набор микросхем TDS9092 FORTH CHIPS, производимый фирмой Triangle Digital Services (www.triangledigital.com, рис. 2).
63B01Y0FP — микропроцессор с масочнозашитым Фортом и символическим ассемблером, с поддержкой многозадачного режима, часами реального времени, экранным редактором и поддержкой прерываний в Форте или ассемблере. Есть драйверы для шины I2C, алфавитно-цифровых ЖКИ, параллельных портов, двух последовательных портов, сторожевого таймера, клавиатуры и режимов малой мощности. Используется версия языка с расширенной 32-разрядной арифметикой, тригонометрией и функциями измерения скорости в реальном масштабе времени.
TDS9 — вентильная матрица, обеспечивающая 16 дополнительных параллельных портов (всего 35). Есть аппаратная поддержка для портов ЖКИ и для сканирования клавиатуры. Сторожевой таймер приводит систему в необходимое состояние в случае аварийного отказа. Сигналы выбора адреса используются для подключения внешней оперативной памяти и ППЗУ. Кроме того, есть резервные декодированные строки адреса для того, чтобы можно было непосредственно подключать внешние устройства типа АЦП.
В состав комплекта входят микросхемы RAM и PROM. PROM содержит коды прикладной программы, написанной на Форте или ассемблере. (Обратите внимание! В память программ пользователь загружает коды программы на языке высокого уровня!)
Кроме 8-разрядных решений фирма имеет также и 16-разрядные решения для Форт-систем, выполненные на базе стандартных микроконтроллеров.
Микропроцессор IGNITETM, разработанный фирмой Patriot Scientific Corporation (PTSC, www.ptsc.com),— это мощный 32-разрядный микропроцессор с очень высокой производительностью и плотностью упаковки команд, прекрасно исполняющий байт-коды Java, Forth и сгенерированные компиляторами языков C/C++ бинарные программы. Блок-схема приведена на рис. 3. Он имеет «безадресную архитектуру» ROSC (Removed Operand Set Computer — компьютер с безоперандным набором команд). Если его сравнить с RISC-микропроцессорами, то можно заметить, что у RISC-микропроцессоров часть кода команды (до 15 битов или больше в команде) тратится на определение трех возможных операндов для каждой команды. Архитектуре с нулевым операндом (стеком) эти биты операнда не нужны, таким образом, получаются намного более короткие команды, а следовательно, и меньший размер программы. Кодоперации этого микропроцессора «укладывается» в 8 бит, и за один цикл чтения 32-битного слова выполняется 4 команды. Кроме того, применение стека также позволяет сократить число регистров, выполнять сохранение в стеке и извлечение данных из стека в пределах одной процедуры, таким образом позволяя иметь более короткие последовательности команды и выполнять код быстрее.
В таблице 1 приведен пример выполнения программы для вычисления функции g5=g1–(g2+1)+g3–(g42) на RISC-процессоре и на процессоре IGNITE.
Эпоха появления первых систем на кристале, IP-ядра
Наконец, уважаемый читатель, мы выбрались из дебрей истории и дошли до сегодняшнего дня. Оглядываемся — и видим настольные компьютеры с невероятными ресурсами. Микроконтроллеры — любых сортов и мастей. И их ресурсы таковы, что иная «доисторическая машина» и мечтать об этом не могла. Однако, как зеленый росток из-под асфальта, упрямо лезет что-то новое, называемое «системой-на-кристалле» [4]. Причем суть этого явления все та же — сделать каждую вычислительную операцию дешевле, но объем продаж этих вычислительных средств невероятно увеличить. И вот опять ситуация напоминает то, что уже было, но, как мы помним, на новом, более высоком уровне. Рост технологии — появление FPGA, увеличение ресурсов FPGA, удешевление встроенных вFPGA микропроцессоров. И снова мы проходим по тому же витку спирали. Ресурсов увстроенных машин также крайне мало. Иснова в обществе возникает потребность вПрограммном Обеспечении именно к этим встроенным микроконтроллерам. И снова эта эпоха характеризуется тем, что у программистов очень много энтузиазма и желания работать. Только теперь в «игре» не одни любители-энтузиасты. В дело вступают мощные фирмы-производители микросхем FPGA. Разрабатываются первые инструментальные системы конфигурирования, отладки и тестирования, ориентированные навстроенные микропроцессоры и микроконтроллеры, работающие в системах с минимальными аппаратными ресурсами [7]. Нарис. 4 показано одно из окон программы конфигурации периферии встроенного процессора Nios фирмы Altera.
ного процессора Nios фирмы Altera. Как и следовало ожидать, кроме различных ядер с RISC-процессорами и IP-ядер, повторяющих стандартные микроконтроллеры, появляется множество различных разработок IP-ядер Форт-процессоров. Разработки выполняются в университетах студентами, любителями-одиночками, фирмами. Втаблице2 приведены описания двух типичных Форт-процессоров, выполненных в FPGA. Оба имеют типичные для Форт-процессоров архитектуры.
Необходимо добавить, что для процессора b16 его автор Bernd Paysan [16], отмечает, что в случае выполнения ядра процессора по технологии TSMC 0,5 < 0,4 мм2 с 3 слоями металлизации при питании 5 В (то есть на сегодняшний день это далеко не передовая технология) и со стеком, имеющим 8 элементов, может быть получена тактовая частота 100 МГц.
Однако встречаются и проекты, где преследуются цели получения максимальной производительности. Тогда на свет появляются продукты, подобные 4stack.
Ядро микропроцессора 4stack (http://www.jwdt.com/~paysan/4stack.html) использует набор команд, ориентированных на работу со стеками для четырех узлов обработки, выполненных как VLIW-сопроцессоры. Если бы процессор 4stack был выполнен по самой современной технологии, то он значительно превзошел бы по быстродействию такие высокопроизводительные DSP-устройства, как TMS 320C6x или TigerSHARC.
Процессор имеет четыре арифметико-логических устройства и выполняет четыре операции со стеками, две операции load/store и две операции модификации адреса. Два блока DSP MAC и два сопроцессора для операций с плавающей точкой (один сумматор и один умножитель), позволяют производить высокоэффективную обработку сигналов и трехмерные геометрические вычисления. Именно поэтому процессор 4stack имеет достаточную производительность, которая может быть использована в блоках цифрового телевидения.
Упрощение архитектуры VLIW приводит, с одной стороны, к сокращению количества транзисторов, а с другой — к сокращению связей внутри кристалла и уменьшению энергопотребления. Для сравнения можно сопоставить Athlon с его приблизительно 20 миллионами транзисторов. Он потребляет 40 Вт при 1 ГГц, в то время как ядро процессора 4stack, выполненное по той же самой технологии, по предварительной оценке, будет потреблять 1 Вт при той же частоте 1 ГГц.
Применение стека, как было сказано выше, очень увеличивает плотность команды. В то время как нормальный RISC-процессор использует для одной команды 32 бита, процессор 4stack одновременно выполняет 8операций в 64 битах. Архитектура VLIW может не всегда заполнять каждый слот операции, однако в том случае, когда заполнено не менее двух слотов операции, процессор 4stack уже имеет выигрыш по производительности. Это позволяет лучше использовать память программы, сокращая цену чипа (меньший кэш команд) и системные затраты (меньше оперативной памяти). Выполнение переходов без дополнительных циклов ожидания позволяет производить быстрое выполнение обычной и объектно-ориентированной рабочей программы (быстро обработать перетранслированный Java-код). Процессор 4stack имеет защиту памяти, виртуальную память, различные режимы supervisor/user и другие вещи, которые обычно имеют центральные процессоры ПК. В то же время большинство центральных процессоров, применяемых в ПК, не имеют аппаратной поддержки DSP.
Появление JAVA-процессоров — новый виток в гонке
Распространение интернет-технологий вызвало потребность создания устройств широкого применения, таких, как справочные терминалы, домашние устройства для доступа в Интернет и т. д. Для этих целей были созданы процессоры, непосредственно исполняющие байт-код Java. Java-процессоры также используют архитектуру стека. Далее приведены описания только двух представителей из семейства Java-процессоров.
Ядро микропроцессора picoJava фирмы Sun Microsystems (рис. 5, [15–18]) было разработано в конце 1990-х годов, оно предназначено для выполнения байт-кода Java так, как определено в Java Virtual Machine (JVM). Оно может также выполнять код C/C++ с эффективностью сопоставимых архитектур RISC-процессоров.
При разработке ядра процессора picoJava были применены очень интересные технические решения, направленные на повышение быстродействия. Полное описание работы ядра — это тема отдельной статьи, поэтому здесь хочется только кратко упомянуть одно решение — технологию Instructions Folding. Традиционная работа стековой машины представлена на рис. 6, на верхнем, зеленом поле. Для того чтобы обработать две переменные Var-1 и Var-2, выполняются следующие действия: сначала одна, затем вторая переменная заносится на вершину стека, после чего над ними выполняется требуемая операция, результат которой заносится в определенное место памяти. На обработку тратится 4 такта.
На нижнем, синем поле, представлена диаграмма работы ядра процессора picoJava. После того как ядро получает очередную команду, производится анализ этой команды на «совместимость». До 4 команд может быть объединено в один folder, после чего они «совмещаются» в одну команду и выполняются. На диаграмме показано, что обработка двух переменных Var-1 и Var-2 объединена вместе с записью результата в одну команду, которая выполняется за один такт.
Примером применения технологии picoJava-II может служить микропроцессор Fujitsu MB86799. Он состоит из ядра picoJava-II, внешней интерфейсной шины и интерфейса шины PCI. Он имеет кэш команд 8 кбайт, кэш данных 8 кбайт, кэш стека с 64 входами и сопроцессор для операций с плавающей точкой (рис. 7). MB86799 может работать с внешней максимальной частотой 33 МГц и внутренней частотой 66 МГц. Соотношение внутренней и внешней частоты может быть от 2 до 5. Чип потребляет 360 мВт от источника питания 2,5 В при тактовой частоте 66 МГц.
Дальнейшим развитием этого направления стал микропроцессор MB92901 (рис. 8). Он выполнен по технологии «0.25µm/4 layered Al», имеет питание 2,5/3,3 В, кэш команд 8 кбайт, кэш данных 8 кбайт и шину данных для подключения памяти с разрядностью в 32 бита. Синхрочастота — 66 МГц. Периферийные блоки: контроллер прерываний (до16 каналов), сторожевой таймер, таймеры (3 канала), системный таймер, порт для последовательной связи, UART, 8-разрядный порт I/O. Корпус — LQFP-208P.
Тенденция развития Java-микропроцессоров на базе ядра picoJava представлена на рис.9. Микропроцессоры будут развиваться в двух направлениях: первое — для высокопроизводительных устройств, второе — для переносных устройств с малым энергопотреблением.
LavaCORE — 32-разрядное ядро Java-процессора, предназначенное для реконфигурируемых аппаратных средств и оптимизированное для применения в Xilinx Virtex-II. Оно разработано фирмой Derivation Systems, Inc. (DSI) (www.derivation.com), являющейся партнером фирмы Xilinx и может быть загружено с сайта Xilinx IP Center (www.xilinx.com/ipcenter). Ресурсы, занимаемые ядром процессора на кристалле, ихарактеристики микропроцессора приведены в таблице 3.
Примечание:
* Все входывыходы ядра процессора подключены ко входам-выходам кристалла.
Ядро процессора непосредственно выполняет байт-код Java-аппаратным способом. LavaCORE выполнено как soft-ядро процессора с набором программных инструментальных средств для выполнения Java-приложения и конфигурирования процессора.
На рис. 10 приведена блок-схема ядра LavaCORE с дополнительными модулями. Ядро процессора состоит из блока целочисленных вычислений, программируемых таймеров, регистрового файла и контроллера прерывания. Дополнительные модули включают местную память, внутреннюю память, расположенную в FPGA, аппаратный блок кодирования, блок вычислений с плавающей точкой и сборщик мусора. Варианты конфигурации позволяют произвести выбор того, какие команды байт-кода Java могут быть опущены или перенесены из аппаратных средств в программное обеспечение, а также выбрать размеры кэша и разрядность шины данных (32, 16 или 8 бит).
На рис. 11 изображена диаграмма интерфейса LavaCORE. Сигналы интерфейса (табл. 4) включают в себя сигналы синхрочастоты, сброс, захват, подтверждение захвата, интерфейс памяти и флажки состояния. Ядро содержит в себе регистровый файл 3232бита, три 8-битовых регистра команд, буфер выборки команд (что позволяет уменьшить время доступа к памяти), поддержку кэширования и 32-разрядное арифметико-логическое устройство, выполняющее целочисленные и логические операции.
Появляются первые гибридные «системы-на-кристалле»
Так можно было бы назвать кристалл, состоящий из двух областей — аппаратного микроконтроллера и FPGA, который может конфигурироваться пользователем. Поскольку в качестве аппаратного микроконтроллера в таких системах стековые процессоры пока не используются, то в данном разделе ограничимся упоминанием сайтов фирм Altera, Triscend, Atmel и др., где имеются достаточно подробные описания.
Заканчивая обзор
Как мы видим из проведенного небольшого исторического исследования, постепенное развитие технологии приведет к удешевлению «систем-на-кристалле» и гибридных «систем-на-кристалле». На первых порах ресурсов для «систем-на-кристалле» будет мало (это мы видим уже сейчас). Поскольку аппаратные ресурсы встроенных микроконтроллеров ограничены, то ситуация будет напоминать эпоху первых микропроцессоров.
И еще несколько слов о том, «кто заказывает музыку». Как упоминалось выше, наступает некоторый уровень развития технологии электронной техники, когда уже нетребования технологии определяют, сколько и каких ресурсов можно разместить на кристалле. Теперь архитектуру кристалла будет определять необходимость поддержки определенного языка программирования сопределенным набором команд. И чем проще архитектура микропроцессора, требуемая для поддержания языка высокого уровня, тем раньше это произойдет. Можно ожидать, что удешевление ресурсов для «систем-на-кристалле» приведет к еще большему увеличению рынка сбыта этих устройств.
Таким образом, применение стековых машин становится наиболее целесообразным для небольших встроенных применений, так как позволяет получить поддержку языка высокого уровня и упростить отладку системы. Однако применение Форт-процессоров будет, как и на предыдущих этапах, тормозиться отсутствием квалифицированных программистов, с одной стороны, а с другой стороны — отсутствием свободно распространяемого программного обеспечения для встроенных систем.
Литература
- Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализация. Л.: Машиностроение. 1988.
- Бураго А.Ю., Кириллин В.А., Романовский И.В. Форт — язык для микропроцессоров. Ленинградская организация общества «Знание» РСФСР. 1989.
- Броуди Л. Начальный курс программирования на языке ФОРТ. М.: «Финансы и статистика». 1990.
- Кривченко И. Системы на кристалле: общее представление и тенденции развития //Компоненты и Технологии. 2001. № 6.
- Каршенбойм И. Микропроцессор своими руками // Компоненты и Технологии. 2002. № 6, 7.
- Каршенбойм И. Микропроцессор своими руками-2. Битовый процессор // Компоненты и Технологии. 2003. № 7, 8.
- Каршенбойм И. Микропроцессор для встроенного применения Nios. Система команд и команды, определяемые пользователем // Компоненты и Технологии. 2002. № 8, 9.
- Каршенбойм И. Микропроцессор для встроенного применения Nios. Конфигурация шин и периферии // Компоненты и Технологии. 2002. № 2, 3, 4, 5.
- Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx //Компоненты и Технологии. 2003. № 4.
- Купман Ф. Stack Computers. http://www.ece.cmu.edu/~koopman/stack.html.
- Leong P.H.W., Tsang P.K., Lee T.K.. MSL16. Китайский Университет Гонконга.
- b16 — A Forth Processor in an FPGA. Bernd Paysan. http://www.jwdt.com/paysan/b16.html.
- Зубинский А. Прагматичные процессоры //Компьютерное обозрение. 2001. № 17.
- PicoJava Overview. http://www.sun.com/microelectronics/picoJava/overview.html.
- В. Коржов. PicoJava I — первый процессор Java. Сети. 1997. № 1.
- Харлан Макгэн, Майк О’Коннор. PicoJava:Механизм непосредственного выполнения байт-кода Java // Открытые системы. 1999. № 1. http://osp.admin.tomsk.ru/os/1999/01/17.htm.
- Роберт Макмиллан. Sun готовит новые микросхемы Java. SunWorld. http://www.airport.sakhalin.ru/ospru/java/1997/05/05.htm.