NS32000 , иногда называемый 32k , представляет собой серию микропроцессоров , производимых National Semiconductor . Проектные работы начались около 1980 года, и он был анонсирован на Международной конференции по твердотельным схемам в апреле 1981 года. Первый представитель семейства появился на рынке в 1982 году, недолгое время известный как 16032, прежде чем стать 32016. [1] Это был первый микропроцессор общего назначения на рынке, который использовал 32-битные данные внутри: Motorola 68000 имел 32-битные регистры и инструкции для выполнения 32-битной арифметики, но использовал 16-битное АЛУ для арифметических операций с данными, и, таким образом, требовал в два раза больше времени, чем 32016, для выполнения этих арифметических операций. [2] [3] Однако 32016 содержал много ошибок и часто не мог работать на своей номинальной скорости. Эти проблемы, а также наличие в остальном похожего 68000, который был доступен с 1980 года, привели к тому, что он не получил широкого распространения на рынке, несмотря на значительный интерес на начальном этапе.
Затем последовало несколько улучшенных версий, включая 32032 1985 года , которая по сути была исправленной версией 32016 с внешней 32-битной шиной данных. Хотя она предлагала скорость примерно на 50% выше, чем 32016, ее превзошел 32-битный Motorola 68020 , выпущенный годом ранее. 32532 , выпущенный в 1987 году, превзошел современный Motorola 68030 почти в два раза, но к этому времени основной интерес к микропроцессорам переключился на платформы RISC , и эта в остальном превосходная конструкция также почти не нашла применения.
National работала над дальнейшими улучшениями в 32732 , но в конечном итоге отказалась от попыток конкурировать в области центрального процессора (ЦП). Вместо этого базовая архитектура 32000 была объединена с несколькими системами поддержки и перезапущена как микроконтроллер Swordfish . Он имел определенный успех на рынке, прежде чем был заменен архитектурой CompactRISC в середине 1990-х годов.
Серия NS32000 ведет свою историю от попытки National Semiconductor создать однокристальную реализацию архитектуры VAX-11 . [4] VAX хорошо известен своей высоко «ортогональной» архитектурой набора инструкций (ISA), в которой любая инструкция может быть применена к любым данным. Например, ADD
инструкция может сложить содержимое двух регистров процессора или одного регистра со значением в памяти, двух значений в памяти или использовать регистр в качестве смещения относительно адреса. Такая гибкость считалась образцом дизайна в эпоху компьютеров со сложным набором инструкций (CISC). [3]
National подала в суд на Digital Equipment Corporation (DEC) в Калифорнии , чтобы гарантировать законность разработки, но когда DEC перенесла иск в Массачусетс , родной штат DEC, иск был отозван, и вместо него была разработана архитектура Series 32000. Хотя новая архитектура набора инструкций не была совместима с VAX-11, она сохранила свою высоко « ортогональную » философию проектирования. То есть, каждая инструкция могла использоваться с любым типом данных. Статьи того времени также называли это «симметричным». [3]
Первоначальное семейство процессоров состояло из ЦП NS16032 и маломощного варианта NS16C032, оба имели 16-битный путь данных и, таким образом, требовали двух машинных циклов для загрузки одного 32-битного слова. Оба могли использоваться с блоком управления памятью NS16082 (MMU), который обеспечивал поддержку 24-битной виртуальной памяти для физической памяти объемом до 16 МБ. NS16008 был урезанной версией с 8-битным внешним путем данных и без поддержки виртуальной памяти, которая имела уменьшенное количество выводов и, таким образом, была несколько проще в реализации. [3] Ранние анонсы семейства включали NS16016 с 16-битной шиной данных, и как NS16008, так и NS16016 должны были иметь режим эмуляции для Intel 8080 , работающего на скорости, в четыре раза превышающей скорость этого процессора. [5]
В то же время National Semiconductor также анонсировала две будущие версии, NS32032 и NS32132. Первая была по сути версией NS16032 с 32-битной внешней шиной данных, что позволяло ей считывать данные с удвоенной скоростью. Этот проект должен был быть выпущен в 1984 году. NS32132 была версией с 29-битными внутренними адресами и 32-битными внешними, что позволяло ей адресовать полные 4 ГБ памяти. Она должна была быть выпущена в 1985 году. [3]
Все они также могут быть использованы с блоком операций с плавающей точкой (FPU) NS16081. [3]
Процессоры имеют 8 32-битных регистров общего назначения, а также ряд регистров специального назначения:
(Дополнительные системные регистры не перечислены).
Набор инструкций во многом соответствует модели CISC с инструкциями с 2 операндами, операциями «память-память», гибкими режимами адресации и кодированием инструкций с байтовым выравниванием переменной длины. Режимы адресации могут включать до двух смещений и двух косвенных обращений к памяти на операнд, а также масштабируемую индексацию, что делает максимально возможную инструкцию 23 байтами. Фактическое количество инструкций намного меньше, чем у современных процессоров RISC.
В отличие от некоторых других процессоров, автоматическое увеличение базового регистра не предусмотрено; единственным исключением является режим адресации «вершины стека», который выталкивает источники и выталкивает назначения. Уникально, что размер смещения кодируется в его наиболее значимых битах: 0, 10 и 11 предшествуют 7-, 14- и 30-битным знаковым смещениям. (Хотя процессоры в остальном последовательно имеют прямой порядок байтов, смещения в потоке инструкций хранятся в порядке прямого порядка байтов).
Операнды общего назначения указываются с помощью 5-битного поля. К нему может быть добавлен индексный байт (определяющий индексный регистр и 5-битный базовый адрес) и до 2 смещений переменной длины на операнд.
Первый чип в серии изначально назывался 16032, но позже был переименован в 32016, чтобы подчеркнуть его 32-битную внутреннюю часть. Это контрастирует с его основным конкурентом в этой области, Motorola 68000 (68k) 1979 года. 68k использовал 32-битные инструкции и регистры, но его арифметико-логическое устройство (АЛУ), которое управляет большей частью общей задачи обработки, было всего 16-битным. Это означало, что ему приходилось дважды циклически пропускать 32-битные данные через АЛУ для завершения операции. Напротив, NS32000 имеет 32-битное АЛУ, поэтому 16-битные и 32-битные инструкции выполняются за одинаковое время.
32016 впервые был поставлен в 1982 году в 46-контактном корпусе DIP . Чтобы поместить 32-битный чип в 46-контактный корпус, требовалось, чтобы шина данных была шириной 16 бит и чтобы контакты были общими с 24-битной адресной шиной . При совместном использовании контактов внешнее оборудование должно было фиксировать адрес для адреса памяти, пока контакты использовались в режиме данных, и это приводило к задержке в 1 цикл при каждом доступе. Таким образом, хотя внутренняя 32-битная реализация повышает производительность, малое количество контактов снова ее снижает.
Это, возможно, был первый 32-битный чип, который достиг массового производства и продажи (по крайней мере, по данным маркетинга National). Однако в отчете, опубликованном в июне 1983 года, было отмечено, что National «обещает объемы производства этим летом» в размере 16032 деталей, «отправляя образцы в течение нескольких месяцев», с выборкой сопроцессора с плавающей точкой «в этом месяце». [6]
Хотя введение 1982 года датируется примерно на два года позже 68k, 68k еще не был широко распространен на рынке, а 32016 вызвал значительный интерес. К сожалению, ранние версии были полны ошибок и редко могли работать на своей номинальной скорости. К 1984 году, спустя два года, список исправлений все еще содержал пункты, указывающие неконтролируемые условия, которые могли привести к остановке процессора, вызывая сброс.
Первоначальная дорожная карта продукта предусматривала части 6 МГц и 10 МГц в 1983 году и части 12 МГц и 14 МГц в 1984 году. [3] Однако сообщения в прессе в 1984 году указывали на трудности в соблюдении этой дорожной карты, поскольку, как сообщается, потребовалось пять месяцев, чтобы увеличить частоту частей с 6 МГц до 8 МГц, и представители оценивали еще «два, три или пять месяцев», чтобы увеличить частоту до 10 МГц. Сообщалось, что две неуказанные микросхемы из пяти в чипсете были причиной этих проблем. [7] В статье начала 1985 года о рабочей станции Whitechapel MG-1 на базе 32016 отмечалось, что блок управления памятью 32081 «страдал от ошибок» и был расположен на собственной плате, предоставляющей аппаратные исправления. [8] В 1986 году Texas Instruments анонсировала «полностью квалифицированный набор микросхем 10 МГц TI32000 32-битного микропроцессора», состоящий из центрального процессора TI32016 и блока управления памятью TI32082 в качестве 48-контактных устройств, блока управления синхронизацией TI32201 и блока с плавающей точкой TI32081 в качестве 24-контактных устройств, а также блока управления прерываниями TI32202 в качестве 40-контактного устройства, с набором микросхем из пяти устройств «по цене 289 долларов США в партиях по 100 единиц». [9]
National изменила свою методологию проектирования, чтобы сделать возможным запуск детали в производство, и система проектирования на основе языка «Z» была разработана совместно с Университетом Тель-Авива, недалеко от центра проектирования «NSC» в Герцлии , Израиль. Язык «Z» похож на современные Verilog и VHDL , но имеет синтаксис, подобный синтаксису Pascal, и оптимизирован для проектирования двухфазных часов . Однако к тому времени, когда плоды этих усилий стали ощущаться в дизайне, на рынке уже появилось множество машин 68k, в частности Apple Macintosh , а 32016 так и не получил широкого распространения.
32016 имеет 16-битную внешнюю шину данных , 24-битную внешнюю адресную шину и полный 32-битный набор инструкций . Он также включает интерфейс сопроцессора , позволяющий подключать сопроцессоры, такие как FPU и MMU, в качестве одноранговых узлов к основному процессору. MMU основан на виртуальной памяти с подкачкой по требованию , что является самой необычной функцией по сравнению с подходом сегментированной памяти, используемым конкурентами, и стало стандартом для того, как сегодня проектируются микропроцессоры. Архитектура поддерживает механизм перезапуска инструкций при ошибке страницы, что намного чище, чем подход Motorola к сбросу внутреннего состояния при ошибке страницы, которое необходимо считывать обратно, прежде чем инструкция будет продолжена.
Хотя его часто сравнивали с набором инструкций 68k, это было отвергнуто сотрудниками NSC; одной из ключевых маркетинговых фраз того времени была «Элегантность — это всё», сравнивающая высокоортогональную Series 32000 с «kludge». Одним из ключевых отличий является использование Motorola регистров адреса и регистров данных, при этом инструкции работали только с регистрами адреса или данных. Series 32000 имеет регистры общего назначения, описанные в технической документации как регистры «адрес-данные». [10]
32032 был представлен в 1984 году. Он почти полностью совместим с 32016, но имеет 32-битную шину данных (хотя сохраняет 24-битную адресную шину) для несколько более высокой производительности, описанной как «производительность мини-компьютера», сравнимую с производительностью системы VAX-11. [11] : 39 Был также 32008, 32016 с шиной данных, урезанной до 8 бит для недорогих приложений. Он философски похож на MC68008 и столь же непопулярен.
National также выпустила ряд связанных вспомогательных микросхем, таких как блок с плавающей точкой NS32081 (FPU), блок управления памятью NS32082 (MMU), прямой доступ к памяти NS32203 (DMA) и контроллеры прерываний NS32202 . С полным набором, а также микросхемами памяти и периферийными устройствами стало возможным построить 32-разрядную компьютерную систему, способную поддерживать современные многозадачные операционные системы, что ранее было возможно только на дорогих мини-компьютерах и мэйнфреймах .
В 1985 году National Semi представила NS32332, значительно улучшенную версию 32032. Согласно техническому описанию, усовершенствования включают «добавление нового специализированного оборудования адресации (состоящего из высокоскоростного ALU, устройства сдвига барабана и регистра адреса), очень эффективную увеличенную (20 байт) очередь предварительной выборки инструкций, новый интерфейс/протокол шины системы/памяти, протокол ведомого процессора повышенной эффективности и, наконец, усовершенствования микрокода». Также были новые MMU NS32382, FPU NS32381 и (очень редкий) интерфейс NS32310 к Weitek FPA. Совокупный прирост производительности NS32332 от этих усовершенствований сделал его всего на 50 процентов быстрее, чем оригинальный NS32032, и, следовательно, меньше, чем у основного конкурента, MC68020 .
National Semi представила NS32532 в начале 1987 года. Работая на частотах 20, 25 и 30 МГц, это была полностью переработанная внутренняя реализация с пятиступенчатым конвейером, интегрированным кэшем/MMU и улучшенной производительностью памяти, что сделало его примерно в два раза производительнее, чем конкурирующие MC68030 и i80386 . На этом этапе архитектуры RISC начали проникать, и основными конкурентами стали теперь столь же мертвые AM29000 и MC88000 , которые считались более быстрыми, чем NS32532. Для плавающей точки NS32532 использовал существующий интерфейс NS32381 или NS32580 к Weitek FPA. [12] NS32532 был основой PC532 , проекта оборудования «общественного достояния», и одного из немногих, создавших полезную машину, работающую под управлением реальной операционной системы (в данном случае Minix или NetBSD ).
Полумифический NS32732 (иногда называемый NS32764), задуманный как высокопроизводительный преемник NS32532, так и не появился на рынке.
Производная от NS32732 под названием Swordfish была нацелена на встраиваемые системы и появилась примерно в 1990 году. Swordfish имеет интегрированный блок с плавающей точкой, таймеры, контроллеры DMA и другие периферийные устройства, обычно не доступные в микропроцессорах. Он имеет 64-битную шину данных и внутренне разогнан с 25 до 50 МГц. Главным архитектором Swordfish является Дональд Альперт, который впоследствии руководил архитектурной группой, проектировавшей Pentium . Внутренняя микроархитектура Pentium похожа на предыдущую Swordfish.
Swordfish фокусировался на высокопроизводительных лазерных принтерах PostScript , и производительность была исключительной в то время. Конкурирующие решения могли отрисовывать около одной новой страницы в минуту, но демонстрационный блок Swordfish печатал шестнадцать страниц в минуту, ограничиваясь только механикой лазерного двигателя. На каждой странице он печатал, сколько времени он простаивал, ожидая завершения работы двигателя.
Кристалл Swordfish огромен, и в конечном итоге было решено полностью отказаться от проекта, и продукт так и не был запущен в производство. Уроки, полученные при разработке Swordfish, были использованы для разработки CompactRISC. Вначале были и CompactRISC-32, и CompactRISC-16, разработанные с использованием «Z». National так и не выпустила на рынок чип с ядром CompactRISC-32. Исследовательский отдел National работал с Мичиганским университетом над разработкой первой синтезируемой модели Verilog, и Verilog использовался с CR16C и далее.
Версии старой линейки NS32000 для недорогих продуктов, такие как NS32CG16, NS32CG160, NS32FV16, NS32FX161, NS32FX164 и NS32AM160/1/3, все основанные на NS302CG16, были представлены с 1987 года.
Эти процессоры имели определенный успех на рынке лазерных принтеров и факсов , несмотря на интенсивную конкуренцию со стороны чипов AMD и Intel RISC . Особенно следует отметить NS32CG16. Ключевое отличие между ним и NS32C016 заключается в интеграции дорогостоящего блока управления синхронизацией (TCU), который генерирует необходимые двухфазные тактовые импульсы из кристалла, и удалении поддержки сопроцессора с плавающей точкой, что освободило место в микрокоде для полезного набора инструкций BitBLT, что значительно повышает производительность в операциях лазерного принтера, делая этот чип с 60 000 транзисторами быстрее, чем MC68020 с 200 000 транзисторами. NS32CG160 — это CG16 с таймерами и периферийными устройствами DMA, в то время как чипы NS32FV/FX16x имеют дополнительную функциональность DSP поверх ядра CG16 BitBLT для рынка факсов и автоответчиков . Позже их дополняет NS32GX32 на базе NS32532. В отличие от предыдущих чипов, не было дополнительного оборудования. NS32GX32 — это NS32532 без MMU, продаваемый по привлекательной цене для встраиваемых систем. В начале это был просто отмеченный чип. Неясно, был ли чип переработан для производства с меньшими затратами.
Существуют технические описания для NS32132, по-видимому, разработанного для многопроцессорных систем. Это NS32032, расширенный арбитром. Использование шины NS32032 составляет около 50 процентов из-за его очень компактного набора инструкций или его очень медленного конвейера, как бы выразились конкуренты. Действительно, одно из предложенных применений NS32032 было частью «отказоустойчивой транзакционной системы», использующей «два 32032 параллельно и сравнивающей результаты на альтернативных циклах памяти для обнаружения мягких ошибок». [6] Чип NS32132 позволяет подключать пару ЦП к одной и той же системе памяти без значительных изменений печатной платы. Прототипные системы были созданы Diab Data AB в Швеции , но не работали так хорошо, как однопроцессорная система MC68020, разработанная той же компанией.
В июне 2015 года Удо Мёллер выпустил полную реализацию процессора NS32000 на языке Verilog на OpenCores . [19] Полностью программно совместимая с ЦП NS32532 с FPU N32381, она значительно быстрее при реализации на ПЛИС , [20] работая на более высокой тактовой частоте и используя меньше циклов на инструкцию.
Недавно мы переименовали наши 32-разрядные микропроцессорные продукты из семейства NS16000 в Series 32000. Эта программа вступила в силу сразу после подписания соглашения с Texas Instruments, Inc. в качестве нашего второго источника для Series 32000.
регистры адресов-данных доступны для всех инструкций. Таким образом, компилятор имеет свободу в использовании регистров и не должен выполнять много работы по ведению домашнего хозяйства. Архитектура также позволяет использовать регистры адресов-данных в качестве аккумуляторов, регистров данных и указателей адресов. Это представляет собой большое улучшение по сравнению с машинами, которые позволяют использовать только несколько регистров в качестве указателей адресов, создавая узкое место в вычислениях адресов, очень важной функции в программировании на языках высокого уровня.