Процессор как сделать: Процессор своими руками — Robohunter

Содержание

Процессор своими руками — Robohunter

Сколько я себя помню, всегда мечтал сделать процессор. Наконец, вчера я его сделал. Не бог весть что: 8 бит, RISC, текущая рабочая частота — 4 кГц, но он работает. Пока что в программе моделирования логических цепей, но все мы знаем: «сегодня — на модели, завтра — на деле!».

Под катом несколько анимаций, краткое введение в двоичную логику для самых маленьких, короткий рассказ про основные микросхемы логики процессора и, собственно, схема.
 

Двоичная система счисления (для тех, кто не в курсе) — это такая система счисления, в которой нет цифр больше единицы. Такое определение многих сбивает с толку, пока они не вспомнят, что в десятичной системе счисления нет цифр больше девятки. 

Двоичная система используется в компьютерах потому, что числа в ней легко кодировать напряжением: есть напряжение — значит, единица; нет напряжения — значит, ноль. Кроме того, «ноль» и «один» легко можно понимать как «ложно» и «истинно». Более того, большая часть устройств, работающих в двоичной системе счисления, обычно относится к числам как к массиву «истинностей» и «ложностей», то есть оперирует с числами как с логическими величинами. Для самых маленьких и тех, кто не в курсе, я расскажу и покажу, как работают простейшие элементы двоичной логики.

 

Элемент «Буфер»


Представьте, что вы сидите в своей комнате, а ваш друг — на кухне. Вы кричите ему: «Друг, скажи, в коридоре горит свет?». Друг отвечает: «Да, горит!» или «Нет, не горит». Ваш друг — буфер между источником сигнала (лампочкой в коридоре) и приемником (вами). Более того, ваш друг — не какой-нибудь там обычный буфер, а буфер управляемый. Он был бы обычным буфером, если бы постоянно кричал: «Лампочка светится» или «Лампочка не светится». 

 

Элемент «Не» — NOT


А теперь представьте, что ваш друг — шутник, который всегда говорит неправду. И если лампочка в коридоре светится, то он скажет вам «Нет, в коридоре совсем-совсем темно», а если не светится — то «Да, в коридоре свет горит». Если у вас есть такой друг на самом деле, значит, он воплощение элемента «Не». 

 

Элемент «Или» — OR


Для объяснения сути элемента «Или» одной лампочки и одного друга, к сожалению, не хватит. Нужно две лампочки. Итак, у вас в коридоре две лампочки — торшер, к примеру, и люстра. Вы кричите: «Друг, скажи, хотя бы одна лампочка в коридоре светит?», и ваш друг отвечает «Да» или «Нет». Очевидно, что для ответа «Нет» все лампочки обязательно должны быть выключены. 

 

Элемент «И» — AND


Та же самая квартира, вы, друг на кухне, торшер и люстра в коридоре. На ваш вопрос «В коридоре обе лампочки горят?» вы получаете ответ «Да» или «Нет». Поздравляю, теперь ваш друг — это элемент «И». 

 

Элемент «Исключающее Или» — XOR


Повторим еще раз эксперимент для элемента «Или», но переформулируем свой вопрос к другу: «Друг, скажи, в коридоре только одна лампочка светит?». Честный друг ответит на такой вопрос «Да» только в том случае, если в коридоре действительно горит только одна лампочка. 

 

Четвертьсумматор


Четвертьсумматором называют элемент «Исключающее Или». Почему? Давайте разберемся.
Составим таблицу сложения для двух чисел в двоичной системе счисления:
0+0= 0
0+1= 1
1+0= 1
1+1= 10

Теперь запишем таблицу истинности элемента «Исключающее Или». Для этого обозначим светящуюся лампочку за 1, потухшую — за 0, и ответы друга «Да»/«Нет» как 1 и 0 соответственно.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

Очень похоже, не так ли? Таблица сложения и таблица истинности «Исключающего Или» совпадают полностью, кроме одного-единственного случая. И этот случай называется «Переполнение».

 

Полусумматор

При переполнении результат сложения уже не помещается в столько же разрядов, во сколько помещались слагаемые. Слагаемые — два однозначных числа (одна значащая цифра, понимаете?), а сумма — уже двузначное (две значащих цифры). Две цифры одной лампочкой («Светится»/«Не светится») уже не передать. Нужно две лампочки. Нужно — сделаем! 

Кроме XOR, для сумматора нам потребуется элемент «И» (AND).
0 XOR 0 = 0 0 AND 0 = 0
0 XOR 1 = 1 0 AND 1 = 0
1 XOR 0 = 1 1 AND 0 = 0
1 XOR 1 = 0 1 AND 1 = 1

Тадам! 
0+0= 00
0+1= 01
1+0= 01
1+1= 10

Наша вундервафля полусумматор работает. Его можно считать простейшим специализированным процессором, который складывает два числа. Полусумматор называется полусумматором потому, что с его помощью нельзя учитывать перенос (результат работы другого сумматора), то есть нельзя складывать три однозначных двоичных числа. В связи с этим из нескольких одноразрядных полусумматоров нельзя сделать один многоразрядный. 

Я не буду вдаваться в подробности работы полных и многоразрядных сумматоров, просто надеюсь, что основную идею вы уловили.
 

Мультиплексор


Предлагаю снова включить воображение. Итак, представьте. Вы живете в частном одноквартирном доме, возле двери этого дома стоит ваш почтовый ящик. Выходя на прогулку, вы замечаете странного почтальона, который стоит возле этого самого почтового ящика. И вот что он делает: достает кучу писем из сумки, читает номер на почтовом ящике, и в зависимости от номера на ящике бросает в него то или иное письмо. Почтальон работает мультиплексором. Он определенным образом (номер на конверте) определяет, какой отправить сигнал (письмо) по сигнальной линии (почтовый ящик). 

Мультплексоры состоят обычно только из сочетаний элементов «И», «Или» и «Не». У одноразрядного мультиплексора один вход называется «выбор адреса», два входа с общим названием «входной сигнал» и один выход, который так и называется: «выходной сигнал». 

Когда на «выбор адреса» подается 0, то «выходной сигнал» становится таким же, как первый «входной сигнал». Соответственно, когда на «выбор» подается 1, то «выходной сигнал» становится равным второму «входному сигналу».

 

Демультиплексор


А вот эта штучка работает с точностью до наоборот. На «выбор адреса» даем адрес, на «вход данных» даем данные, на выходе с номером «адрес» имеем данные со входа.

 

Счетчик


Для понимания работы счетчика вам опять понадобится ваш друг. Позовите его из кухни (надеюсь, он не сильно там скучал, и, главное, не съел всю вашу еду), и попросите делать вот что: пусть он запомнит число 0. Каждый раз, когда вы будете прикасаться к нему, он должен прибавить единицу к тому числу, которое помнит, сказать результат и запомнить его. Когда результат будет равен (допустим) 3, он должен выкрикнуть «Абракадабра!» и отвечать при следующем прикосновении, что сейчас он помнит число 0. Немного сложно? Смотрите:

Вы прикасаетесь к другу. Друг говорит «Один».
Вы прикасаетесь к другу. Друг говорит «Два».
Вы прикасаетесь к другу. Друг говорит «Три». Друг выкрикивает «Хабрахабр!». Критическая атака! Вы временно парализованы и не можете двигаться. 
Вы прикасаетесь к другу. Друг говорит «Ноль».

Ну, и так далее. Очень просто, верно? 
Вы, конечно, поняли, что ваш друг сейчас — это счетчик. Прикосновение к другу можно считать «тактирующим сигналом» или, попросту говоря, сигналом продолжения счета. Крик «Абракадабра» показывает, что запомненное значение в счетчике — максимальное, и что при следующем тактирующем сигнале счетчик будет установлен в ноль. Есть два отличия двоичного счетчика от вашего друга. Первое: настоящий двоичный счетчик выдает запомненное значение в двоичном виде. Второе: он всегда делает только то, что вы ему говорите, и никогда не опускается до дурацких шуточек, способных нарушить работу всей процессорной системы.

 

Триггер


Давайте продолжим издеваться над вашим несчастным (возможно, даже воображаемым) другом. Пусть теперь он запомнит число ноль. Когда вы касаетесь его левой руки, он должен запоминать число ноль, а когда правой — число один. При вопросе «Какое число ты помнишь?» друг должен всегда отвечать то число, которое запоминал — ноль или один. 

Простейшей запоминающей ячейкой является RS-триггер («триггер» значит «переключатель»). RS-триггер может хранить в себе один бит данных («ноль»/«один»), и имеет два входа. Вход Set/Установка (совсем как левая рука вашего друга) записывает в триггер «один», а вход Reset/Сброс (соответственно, правая рука) — «ноль». 

 

Регистр


Немного сложнее устроен регистр. Ваш друг превращается в регистр тогда, когда вы просите его что-нибудь запомнить, а потом говорите «Эй, напомни мне, что я говорил тебе запомнить?», и друг правильно отвечает.

Регистр обычно может хранить в себе чуть больше, чем один бит. У него обязательно есть вход данных, выход данных и вход разрешения записи. С выхода данных вы в любой момент можете прочитать то, что в этом регистре записано. На вход данных вы можете подавать те данные, которые хотите в этот регистр записать. Можете подавать данные до тех пор, пока не надоест. В регистр все равно ничего не запишется до тех пор, пока на вход разрешения записи не подать один, то есть «логическую единицу».

 

Сдвиговый регистр


Вы когда-нибудь стояли в очередях? Наверняка стояли. Значит, вы представляете, каково быть данными в сдвиговом регистре. Люди приходят и становятся в конец очереди. Первый человек в очереди заходит в кабинет к большой шишке. Тот, кто был вторым в очереди, становится первым, а тот, кто был третьим — теперь второй, и так далее. Очередь — это такой хитрый сдвиговый регистр, из которого «данные» (ну, то есть люди) могут убегать по делам, предварительно предупредив соседей по очереди. В настоящем сдвиговом регистре, разумеется, «данные» из очереди сбегать не могут. 

Итак, у сдвигового регистра есть вход данных (через него данные попадают в «очередь») и выход данных (из которого можно прочитать самую первую запись в «очереди»). Еще у сдвигового регистра есть вход «сдвинуть регистр». Как только на этот вход приходит «логическая единица», вся очередь сдвигается.

Есть одно важное различие между очередью и сдвиговым регистром. Если сдвиговый регистр расчитан на четыре записи (например, на четыре байта), то первая в очереди запись дойдет до выхода из регистра только после четырех сигналов на вход «сдвинуть регистр».

 

Оперативная память

Если много-много триггеров объединить в регистры, а много-много регистров объединить в одной микросхеме, то получится микросхема оперативной памяти. У микросхемы памяти обычно есть вход адреса, двунаправленный вход данных (то есть в этот вход можно записывать, и с него же можно считывать) и вход разрешения записи. На вход адреса подаем какое-нибудь число, и это число выберет определенную ячейку памяти. После этого на входе/выходе данных мы можем прочитать то, что записано в эту самую ячейку. 

Теперь мы одновременно подадим на вход/выход данных то, что хотим в эту ячейку записать, а на вход разрешения записи — «логическую единицу». Результат немного предсказуем, не так ли?
 

BitBitJump

Процессоры иногда делят на CISC — те, которые умеют выполнять много разных команд, и RISC — те, которые умеют выполнять мало команд, но выполняют их хорошо. Одним прекрасным вечером мне подумалось: а было бы здорово, если бы можно было сделать полноценный процессор, который умеет выполнять всего одну команду. Вскоре я узнал, что существует целый класс однокомандных процессоров — OISC, чаще всего они используют команду Subleq (вычесть, и если меньше или равно нулю, то перейти) или Subeq (вычесть, и если равно нулю, то перейти). Изучая различные варианты OISC-процессоров, я нашел в сети сайт Олега Мазонки, который разработал простейший однокомандный язык BitBitJump. Единственная команда этого языка так и называется — BitBitJump (скопировать бит и перейти по адресу). Этот, безусловно эзотерический, язык является полным по Тьюрингу — то есть на нем можно реализовать любой компьютерный алгоритм. 

Подробное описание BitBitJump и ассемблер для этого языка можно найти на сайте разработчика. Для описания алгоритма работы процессора достаточно знать следующее:

1. При включении процессора в регистрах PC, A и B записаны 0
2. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр A
3. Увеличиваем PC
4. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
5. Увеличиваем PC
6. Записываем в ячейку с адресом, записанным в регистре B, содержимое бита с адресом А.
7. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
8. Записываем в регистр PC содержимое регистра B
9. Переходим к пункту 2 нашего плана
10. PROFIT!!!

К сожалению, алгоритм бесконечный, и потому PROFIT достигнут не будет.

 

Собственно, схема

Схема строилась стихийно, поэтому правят бал в ней страх, ужас и кавардак. Тем не менее, она работает, и работает прилично. Чтобы включить процессор, нужно:

1. Ввести программу в ОЗУ
2. Нажать на включатель
3. Установить счетчик в положение 4 (это можно делать и аппаратно, но схема стала бы еще более громоздкой)
4. Включить тактовый генератор

Как видите, использованы один регистр, один сдвиговый регистр, одна микросхема ОЗУ, два двоичных счетчика, один демультиплексор (представленный компараторами), два мультиплексора и немного чистой логики.

Можете скачать схему в формате circ для программы Logisim, и поиграться.

 

Что дальше?

Во-первых, можно увеличить разрядность процессора — заменив 8-битные элементы на 16-битные.
Во-вторых, можно вынести ОЗУ из процессора, и добавить несложную схему, которая будет приостанавливать процессор, изменять ОЗУ и снова включать процессор. Такая схема будет выполнять функции простого контроллера ввода-вывода. Тогда можно будет сделать на базе этого процессора калькулятор, контроллер или еще какую-нибудь забавную бесполезную штуку.
В-третьих, можно воплотить всю эту схему в железе. Что я собираюсь сделать. Как только сделаю — обязательно расскажу и покажу.

Спасибо всем за внимание! 

P.S. Ссылки (для тех, кому лень читать):
1. Процессоры URISC — ru.wikipedia.org/wiki/Urisc
2. Сайт языка BitBitJump — mazonka.com/bbj/index.html
3. Программа для моделирования логических схем Logisim — http://ozark.hendrix.edu/~burch/logisim/
4. Самодельный URISC (ORISC) процессор для Logisim — narod.ru/disk/31367690001/oo.circ.html

Источник: HabraHabr

Микропроцессор своими руками. Часть 1.1. — Компоненты и технологии

Введение

В этой статье приведен пример разработки микроконтроллера в FPGA. Статья может быть интересна как студентам и начинающим разработчикам, так и профессионалам, которые имеют опыт разработки устройств, и в том числе и в FPGA, но по тем или иным причинам не имели возможности разрабатывать и использовать «встроенные в FPGA» микропроцессоры. Дальше приведено два вступления — для студентов и для профессионалов. Хочется чтобы для каждой из этих групп читателей данная статья представляла определенный интерес. Но поскольку мотивация для прочтения этой статьи для двух групп разная, то далее следуют два вступления.

Все статьи цикла:

Все файлы, приведенные в данной статье, будут доступны в Интернете на сайте автора
www.iosfk.narod.ru.

Введение для студентов

К написанию этой статьи меня подтолкнуло следующее: моя дочь, которая учится в довольно известном питерском вузе, сейчас «проходит» курс микропроцессоров. Но «проходит» — это именно то слово, которое здесь наиболее уместно. Ибо заучивание слов лектора и скромные «лабы» — так и мы учили когда-то курс ЭВМ. Но чтобы было понятно, о чем идет речь, придется сделать небольшой экскурс в недавнюю, для меня, историю.

Мой опыт работы с ЭВМ начинается с кошмарных воспоминаний о машине, по-моему это был «Проминь», которую установили на нашей кафедре в ЛЭТИ, где я, тогда еще студент четвертого курса, работал на полставки лаборантом. Итак, год, наверное, 1975-й. И курсовики и дипломы с применением расчетов на ЭВМ еще только входили в моду. И вот курсовик «Расчет трансформатора в баке с маслом» — название именно потому и запомнилось, что это была моя первая попытка автоматизировать инженерный труд при помощи ЭВМ, как сказали бы теперь. Мне, как сотруднику кафедры, разрешили провести часть расчетов на ЭВМ. Был написан алгоритм, составлена программа и вот уже получено время для работы на машине. Дальше — беда.

Оказывается что в машине, где команды задавались специальными кодирующими планками, которые нужно было втыкать в специальное наборное поле, не хватает команд умножения для реализации моего алгоритма. Даже после того, как я сбегал на соседнюю кафедру и одолжил там планки для умножения от такого же «Проминя», выяснилось, что не хватает двух команд. Конечно, курсовик был рассчитан на логарифмической линейке.

Вернемся в сегодняшний день. Многие из сегодняшних студентов просто не представляют, насколько стремительно меняется техника. Но в темпе изменения техники должны меняться и приоритеты для инженерного труда, и методики обучения. Так, как учились вчера, уже нельзя учиться сегодня. Сегодня молодой инженер, не умеющий пользоваться ORCAD’ом, PICAD’ом, симуляторами электрических цепей типа Electronics Workbench, не способный описать схему на VHDL и написать сотню строчек кода на С++, достоинтолько сожаления. Если вчера было модно программировать видеоигры, базы данных и бухгалтерские программы, то сегодня рынок уже поменялся.

Сегодня открылся новый огромный рынок — программирование FPGA. Если 2–3 года тому назад программирование FPGA понималось как разработка периферии к стандартным микропроцессорам, то теперь ситуация коренным образом изменилась. Теперь наступило время «систем на кристалле». Более подробно об этом будет написано во введении для профессионалов. Программирование FPGA в скором времени плавно перейдет в разработку заказных микросхем — «систем на кристалле». И первые российские успехи в этом направлении уже есть (см. Л1).

Итак, заканчивая это вступление, нужно сказать следующее. Если вас не учат этому в вашем ВУЗе — требуйте, требуйте также настойчиво, как требуют тушенку в рекламе. Вы имеете на это право. Если вы не научитесь этому сейчас, то дальше догонять других будет очень тяжело. Но, если научиться современным технологлиям в вузе нет возможности, то вспомните, что сказал Скруджу МакДаку его папа: «Скрудж, работай головой, а не руками». Большая часть из программ, выпускаемых крупными и известными фирмами — производителями ПО, имеют студенческую версию, т. е. они совершенно бесплатны. Они доступны на сайтах самих фирм и их дилеров. Что касается Altera, то фирма рассылает CD, на котором есть и студенческая версия ПО, статьи и описания на микросхемы. Для того, чтобы данная статья послужила в полную меру, возьмите книгу Л2. К книге также приложен CD с необходимым ПО и примерами по обучению ПО MAXPLUS.

Введения для профессионалов

Время, скажем так, стандартных микросхем заканчивается. Начинается новое время — время «систем на кристалле». Разработка самих систем, частей таких систем — библиотечных мегафункций или ядер, становится не только заманчивой перспективой, но и реальностью. Причем прибыльной реальностью.Так, по данным из Интернета, фирма, продающая лицензию на свое ядро процессора для телекоммуникаций, получает за каждую продажу лицензии 150 тыс. долл. единовременно, и по 7 долл. с каждой выпущенной поих лицензии микросхемы за первый год выпуска и по 2 долл. с каждой микросхемы за последующие годы. Представьте, что это процессор для сотового телефона или видеокарты, и посчитайте.

За последние полгода технологический рывок изготовителей микросхем привел к тому, что появились микросхемы, способные работать с ядром процессора на частоте до 300 МГц. Ресурс, который можно занять для проекта, так-же вырос. Появились аппаратные блоки, например, процессор ARM7TDMI в микросхемах серии «Экскалибур» или умножители в серии «Стратикс». А это значит, что микропроцессор, реализованный в FPGA, способен составить конкуренцию DSP средней производительности. А при выполнении блоков, выполняющих умножение и деление по заданному пользователем алгоритму, микропроцессор, реализованный в FPGA и ориентированный на конкретную задачу пользователя, будет иметь производительность не ниже, а, может быть, и выше, чем самые быстрые DSP.

Рост популярности того или иного направления можно оценить по количеству сайтов в Интернете, на которых отражаются интересы разработчиков.

Фирмы-производители микросхем предлагают различные ядра, оптимизированные под их продукцию, для встраивания в проекты пользователя, например http://www.altera.com/ipmegastore/index.html.

Фирма Triscend предлагает 40-MHz 8051-ядро на кристалле, с FPGA, доступной пользователю. Аналогичный продукт есть и у фирмы Atmel Corp. — FPSLIC. Более подробное описание по предлагаемым продуктам приведено в Л3, 4.

Фирма Altera предлагает микроконтроллеры на ядре an ARM9T (http://www.arm.com/) или на ядре MIPS32 4K (http://www.mips.com/).

Часть проекта фирмы Altera ™ по встроенным решениям, процессор Excalibur, а также его вариант реализации — программное ядро встроенного процессора Nios ™. Nios — это встраиваемый процессор общего назначения, с перестраиваемой конфигурацией, который легко вписывается в устройство Altera APEX ™, оставляя большинство логики, доступной для размещения там периферийных устройств и пользовательских функций.

Встраиваемое ядро процессора Nios — конвейерный RISC-процессор, в котором команды выполняются за один цикл частоты синхронизации. Более подробно об этом процессоре можно прочитать в Л5 — 13.

Кроме широко известных сайтов фирм-производителей, появились и поддерживаются и наши, российские сайты, такие, как www.asicdesign.ru, белорусский http://nit.gsu.unibel.by/IEESD-2000.

Проекты и их части перепродаются как интеллектуальная собственность, то есть они становятся товаром. Сайт по перепродаже проектов — http://www.hellobrain.com/.

Но вместе с тем существуют и развиваются некоммерческие центры, такие, как сайты предлагающие открытые проекты, — и www.opencores.org. Есть также и сайты, поддерживающие разработку именно процессоров в FPGA http://www.fpgacpu.org/.

Рост интереса к разработке именно процессоров отражением в росте публикаций открытых проектов на сайте www.opencores.org. Сейчас там предлагается 35 проектов микропроцессоров от крошечного tiny8 до 32-битного Yellow Star.

Что же касается российских разработчиков и разработчиков стран СНГ, то здесь несколько иная ситуация. Фирмы-производители микросхем имеют программу по поддержке партнеров-разработчиков ядер (мегафункций). Это и реклама, и сервис, и многое другое. Но для российских разработчиков попасть в партнеры пока еще практически невозможно, и это резко ограничивает их возможности.

Преимущество микроспроцессора, «встроенного в FPGA»

«Встроенные в FPGA» микропроцессоры и микроконтроллеры на их основе имеют главное преимущество перед обычными микроконтроллерами средней производительности: они абсолютно синхронны со всем остальным проектом, расположенным в этой же микросхеме. Если устройство, которое вы проектируете, работает в реальном времени и с большими потоками данных, которые вы должны извлекать из периферии и отдавать в периферию, то задача синхронизации становится достаточно серьезной.

Все быстрые «мелкие» микроконтроллеры работают асинхронно (относительно периферии в Altera), и не имеют аппаратного входа «Готовность», поэтому они могут синхронизироваться с периферией только программно, а для программной привязки их к синхронному проекту в Altera нужно, во-первых, несколько команд процессора, что займет несколько тактов синхрочастоты, во-вторых, это также требует ресурса микросхемы FPGA и, в-третьих, занимает довольно много места на плате.

Быстрые «крупные» процессоры имеют возможность аппаратной синхронизации по входу «Готовность», но дороги и занимают еще больше места на плате. Да и применение «крупного» процессора для небольших задач нецелесообразно. А это значит, что при том же быстродействии ядра процессора получится выигрыш по производительности в 2–3 раза.

Следующее преимущество — специализированные команды пользователя. Это значит, что проектируя микроконтроллер, пользователь может произвести предварительное программирование и определить в потоке команд, выполняемых процессором, группы наиболее часто повторяющихся команд. Если теперь группу таких команд объединить в одну специализированную команду, то быстродействие процессора для данного класса задач увеличится, а программировать его станет легче. Специализированные команды пользователя (см. например, описание команд процессора NIOS), могут быть однотактные или мгоготактные. Они могут выполняться в ALU микропроцессора или в дополнительном вычислительном блоке, подключаемом к ALU, например FFT, FIR и т. д.

Еще одно преимущество — микроконтроллер становится «невидимым». То есть микроконтроллер конечно есть, просто увидеть его уже нельзя. Это не шкаф, не каркас, не набор плат и даже не корпус микросхемы. Это теперь просто файл, который входит в другой файл. Но что удивительно, свои функции он выполняет не хуже, а часто лучше, чем его «старший брат».

И последнее, что необходимо отметить — микроконтроллер получает ту периферию и в таком количестве, как нужно пользователю.

Периферия же может быть самой экзотической: от простого UART’a и до контроллеров Ethernet MAC 10/100 или сопроцессоров DSP.

Среди библиотечных элементов, описывающих периферию для микропроцессора, доступны следующие:

  • универсальный Асинхронный Приемопередатчик (UART),
  • таймер,
  • параллельный ввод — вывод (PIO),
  • интерфейс SRAM,
  • SDRAM-контроллер,
  • интерфейс FLASH памяти,
  • последовательный периферийный интерфейс (SPI),
  • контроллер I2C,
  • модулятор ширины импульса (PWM),
  • IDE-контроллер диска,
  • контроллер Локальной сети 10/100 Ethernet (MAC),
  • контроллер USB.

Конечно, этот список далеко не полный, но он дает представление о том, какой уровень разработок библиотечных элементов достигнут. Подключив требуемые библиотечные элементы, можно сформировать необходимый для конкретного применения микроконтроллер.

У нас же есть конечный автомат, зачем нам что-то еще?

Часто можно услышать такие рассуждения: «Для обработки чего-то сложного 16-битного или 32-битного, конечно, применим процессор. Но вот для чего-то мелкого зачем нам эти программы, ассемблеры и т. д. У нас же есть конечный автомат, ну и еще пригоршня триггеров. Обойдемся и этим».

Чтобы сравнить микроконтроллер с конечным автоматом, необходимо сравнить трудоемкость следующих работ:

  • Чтобы в новом проекте реализовать заданную последовательность действий, можно либо каждый раз заново создавать конечный автомат, либо взять уже готовый микроконтроллер, адаптировать его к заданным условиям, и, написав небольшую программу, запустить. Причем написание программы для микроконтроллера намного проще написания конечного автомата на языках AHDL, VHDL и так далее.
  • Чтобы изменить алгоритм работы конечного автомата, необходимо его полностью переписывать, что требует много времени и сил, в микроконтроллере достаточно изменить микропрограмму.
  • Чтобы исправить ошибку в конечном автомате, необходимо переработать весь проект, в котором описан автомат, а в варианте микроконтроллера можно только переписать программу.
  • Конечный автомат должен иметь ограниченное количество состояний, так как это требует дополнительных логических ячеек, в то время как микроконтроллер по количеству состояний ограничен только объемом памяти программ, а это на несколько порядков больше.
  • И последнее, но очень существенное добавление. Конечный автомат при увеличении количества состояний становится все более и более медленнодействующим, так как рост числа дополнительных логическихячеек приводит к увеличению времени прохождения сигнала. Каждое изменение автомата может привести к необходимости повторной верификации проекта.

Команды, выполняемые микропроцессором, определены по времени выполнения и не зависят от программы, выполняемой на данном процессоре. Поэтому микропроцессор обычно выполняется с требуемым быстродействием, и это быстродействие не зависит от конкретного применения, от изменений илидоработок программы при отладке.

Если интерес к этой теме еще не пропал, то не стоит дожидаться, пока статический автомат в ваших устройствах разрастется в жуткого «монстра», при доработках и отладках, и от него придется отказаться. Тогда все остальное в этой статье тоже должно быть интересно и для вас.

Здесь конец лирике и начало проекта

Материал, приведенный в данной статье, написан на основе реальной разработки, описанной в Л14. Упрощенная модель микропроцессора, описанная в данной статье, служит только примером для разработки или изучения. Но тем не менее, она может быть легко доработана для практического использования.

Методика разработки позволяет оценить трудоемкость, определить ресурс, необходимый для реализации микроконтроллера в FPGA. Весь процесс разработки будет состоять из следующих этапов:

  1. Разработка задания на проектирование.
  2. Разработка блок-схемы микропроцессора.
  3. Разработка полей кодов операций.
  4. Разработка кодов команд.
  5. Описание на AHDL блоков, входящих в микропроцессор.
  6. Описание микропроцессора на AHDL.
  7. Написание микропрограммы.
  8. Симуляция микропроцессора с микропрограммой.
  9. Выводы.

Что мы хотим получить?

Известный герой детских сказок любил сначала закапывать деньги, а потом долго не мог вспомнить, что он делал накануне вечером и куда делись деньги. Чтобы у нас с вами такого не произошло, попробуем сначала «нарисовать известное поле». На старом языке этот этап назывался разработкой технического задания. Итак, мы хотим спроектировать:

  1. RISC-процессор, потому что не хочется делать разборку многословных команд. Пусть все наши команды выполняются за один такт синхрочастоты.
  2. Применим для процессора Гарвардскую структуру. Будем считать, что загрузка памяти команд нам не нужна и все команды будут храниться в памяти команд, что и происходит при инициализации микросхемы. Назовем память команд — Program Space (PS). Ограничим область адресов PS 16 битами. Далее возможна страничная адресация памяти, но для большинства случаев и этого уже будет достаточно. Для конкретной реализации микропроцессора введем параметр, описывающий разрядность шины адресов PS.
  3. Расположим память данных в отдельной области памяти. Назовем ее Data Space (DS). Ограничим область адресов DS также 16-ю битами. Для конкретной реализации микропроцессора введем параметр, описывающий разрядность шины адресов DS.
  4. Представим область ввода-вывода в виде набора регистров, дадим им номера 0..15.
  5. Для реализации режима реального времени потребуется вход запроса прерывания — IRQ.
  6. Чтобы отрабатывать прерывания и вызовы подпрограмм, нам будет необходим стек.
  7. Необходимо задать разрядность шины данных. Выберем для определенности разрядность, равную 16 битам.
  8. Будем считать, что системный сигнал СБРОС, действующий внутри кристалла, будет применяться и для нашего микропроцессора.

Построение ядра микропроцессора

Для упрощения положим, что:

  • аккумулятор/регистр общего назначения будет один,
  • область DS будет состоять из одного регистра,
  • область ввода-вывода тоже будет состоять из одного регистра,
  • применим самую простую структуру выборки данных из памяти, то есть асинхронную выборку и без конвейера команд,
  • будем считать, что вход запроса прерывания выставляется синхронно с тактовой частотой и длительность входа запроса — 1 такт синхрочастоты.

Данные упрощения сделаны только для сокращения текстов описаний, так как в рамках журнальной статьи приводить обширные описания довольно затруднительно. Тем не менее, счетчик адресов DS полностью аналогичен счетчику адресов PS. Увеличение количества регистров связано только с увеличением описания в области дешифратора управляющих сигналов, которые вырабатываются при операциях записи в эти регистры и с мультиплексором выходных шин от регистров на внутреннюю шину микропроцессора.

Вход запросов прерывания обычно обслуживается контроллером прерывания, который фиксирует запрос по фронту или по уровню и выставляет вектор прерывания. Контроллер прерывания может быть рассмотрен отдельно и не является необходимым звеном для данного проекта. Таким образом, приведенные сокращения не должны оказывать существенного влияния на излагаемый материал.

На основании задания и сделанных упрощений на микропроцессор получим архитектуру, показанную на рис. 1.

Микропроцессор состоит из набора следующих блоков:

Узел контроля для выработки управляющих воздействий на все блоки микропроцессора — ALU,
Счетчика адресов памяти программ — PS_CNT,
Блока памяти программ — PS,
Блока памяти данных — DS,
Стека — Stack,
Регистров — Rg0 и Rg1.

На входы микропроцессора подадим сигнал синхрочастоты — CLK и сигнал запроса прерывания — IRQ.

Системный сигнал СБРОС подается на микропроцессор, так же как и на все остальные блоки системы (здесь он не показан).

Выходами микропроцессора будут сигналы с выходов регистров Rg0 и Rg1.

Счетчик команд, при загрузке микросхемы или при инициализации системы по сигналу СБРОС, устанавливается в состояние 0 и далее производит счет адресов памяти программ.

Адреса поступают на вход блока PS. Данные, хранящиеся в памяти программ, выбираются в соответствии с поступившим адресом.

Далее данные с выхода PS поступают в ALU.

Для ALU — это будут коды команд микропроцессора. Блоки DS, Stack, Rg0 и Rg1 обмениваютя сигналами с блоком ALU по одной внутренней шине данных.

Сигнал со входа IRQ поступает на ALU и дешифрируется в ALU как код команды, причем сигнал IRQ имеет приоритет в выполнении над кодом команды, поступившим в ALU от PS.

Выберем команды, отвечающие нашим задачам

Опишем группы команд, которые должен исполнять микропроцессор.

  1. Служебные команды:
    NOP Нет операции
  2. Группа команд загрузки:
    LDI Reg, < C > Загрузка в регистр.приемник константы – (данных из памяти команд по текущему адресу )
  3. Группа команд пересылки:
    MOV Reg, Reg Запись содержимого одного регистра в другой
    MOV Reg, [Mem] Запись содержимого регистра в память
    MOV [Mem], Reg Запись из памяти в регистр
  4. Команды ветвления:
    JMP Addr Переход по абсолютному адресу
    CALL Addr Вызов подпрограммы (с записью адреса возврата в стек)
    RET Возврат из подпрограммы (по содержимому стека)

Для изучения принципов работы микропроцессора, такого набора команд будет достаточно. На практике набор команд можно дополнять и расширять до необходимого для выполнения конкретного набора задач пользователя. Арифметические операции убраны из списка команд, так как выполнение математических операций в FPGA достаточно описано, и в рамках данной статьи они не рассматриваются.

Определим поля команд

Чтобы определить поля команд необходимо определить наибольшее требуемое поле для выполнения заданных команд. Очевидно, что для данного набора команд самое большое поле требуется для команды MOV Reg, [Mem] и MOV [Mem], Reg. Поле [Mem] — имеет разрядность 16 бит, поле Reg — 4 бита (для 16 регистров). Поэтому выберем разрядность памяти PS — 24 бита. Тогда команда непосредственной записи из памяти в регистр будет выглядеть так:

23….Коп – 4 бита…20 19…..Reg – 4 бита …16 15 …Mem – 16 бит.. 0

Команда MOV Reg, Reg пересылки из регистра в регистр будет выглядеть так:

23….Коп – 4 бита…20 19…..Reg – 4 бита …16 3 … Reg – 4 бита.. 0

Команда LDI Reg < C > — непосредственная загрузка в регистр-приемник данных из памяти команд по текущему адресу:

23….Коп – 4 бита…20 19…..Reg – 4 бита …16 15 …Const – 16 бит.. 0

Команда JMP Addr — команда безусловного перехода по абсолютному адресу будет выглядеть так:

23….Коп – 4 бита…20 15 …Mem – 16 бит.. 0

Команда CALL Addr — команда безусловного вызова подпрограммы по абсолютному адресу будет выглядеть так:

23….Коп – 4 бита…20 15 …Mem – 16 бит.. 0

Команда RET команда безусловного возврата из подпрограммы или из прерывания будет выглядеть так:

23….Коп – 4 бита…20

Команда NOP — «Нет операции» будет выглядеть так:

23….Коп – 4 бита…20

Итак, нам нужно получить восемь команд для микропроцессора, и, как мы видим, поле кода операции разрядностью в 4 бита позволяет иметь 16 команд. Необходимо отметить, что для более мощных процессоров выбор полей кодов операций — очень серьезная задача, которая и определяет, насколько эффективным будет процессор для конкретного набора команд.

Определим коды операций команд

После того как поля команд определены, и мы знаем разрядность поля кодов операций, можно определить коды операций команд.

Наиболее просто определить код команды NOP — здесь нет никаких требований, кроме одного — этот код команды должен быть на входе ALU при получении им сигнала «СБРОС». Так как дальнейшее развитие проекта неминуемо приведет к конвейеризации и прочим профессиональным «хитростям», то рекомендуем выбрать код команды NOP = 0.

Чтобы несколько упростить визуальное восприятие команд, применим следующую кодировку: пусть команды переходов будут расположены в зоне кодов от 8 до H»F». Тогда шестнадцатиричные коды операций команд будут такие:

0 — NOP
1 — JMP
2 — CALL
3 — RET
8 — MOV Reg, Reg
9 — MOV Reg, [Mem]
А — MOV [Mem], Reg
B — LDI Reg < C >

Примеры кодов команд

Команда NOP будет иметь код 000000, а JPM 1234 — команда безусловного перехода по адресу 1234 — будет иметь код команды — 101234, MOV 9, 5 — команда пересылки данных из регистра 5 в регистр 9 будет иметь вид 890005 и т. д.

Определим требования к стеку

Для данной задачи применим стек глубиной 8 вложений и разрядностью равной разрядности шине адресов PS. Реализуем стек в отдельной от PS и DS области — на массиве регистров.

Определим требования к прерываниям

Применим следующее решение: при поступлении запроса прерывания будем выполнять переход по фиксированному адресу с занесением адреса возврата в стек.

Определим требования к программному обеспечению

Одним из основных требований к разработке встроенного ПО для микроконтроллеров является требование о необходимости инструментального ПО, то есть нам будет, как минимум, необходим редактор и ассемблер. Для более сложных проектов могут потребоваться симуляторы работы программы, языки высокого уровня, операционные системы и т. д.

Что касается редактора, то существуют такие редакторы, как EditPlus2 (
http://www.editplus.com), Prisma, и другие редакторы текста, позволяющие выделять ключевые слова по списку, формируемому пользователем.

Для удобства написания программ можно также создать собственный ассемблер, что сейчас не является трудной задачей даже для среднего программиста. Такой ассемблер ставит в соответствие удобную для восприятия мнемонику с реальными командами микропроцессора.

Однако, и довольно часто, разработчики применяют систему команд тех микропроцессоров к которым они привыкли и к которым уже существуют инструментальные средства разработки ПО. Здесь на первом месте микропроцессоры с системой команд MCS-51, а на втором месте PICmicro. Для этих микропроцессоров имеются как средства разработки, так и огромные библиотеки разработанных программ.

Поскольку проект, описываемый здесь, посвящен только описанию микропроцессора, то дальнейшее описание требований к инструментальному ПО мы опускаем. Будем считать, что у нас есть ассемблер, который преобразует мнемонические коды команд в машинные коды и формирует файл инициализации памяти команд, совместимый с ПО MaxPlus.

Заключение по этапу разработки задания

Мы произвели разработку задания на микропроцессор, выполняющий основные функции, такие, как пересылки данных, ветвление программы, обработка прерываний.

Продолжение следует.

Написание простого процессора и окружения для него / Хабр

Здравствуйте! В этой статье я расскажу какие шаги нужно пройти для создания простого процессора и окружения для него.


Для начала нужно определиться с тем, каким будет процессор. Важны такие параметры как:


Архитектуры процессоров можно разделить по размеру инструкций на 2 вида (на самом деле их больше, но другие варианты менее популярны):


Основное их отличие в том, что RISC процессоры имеют одинаковый размер инструкций. Их инструкции простые и выполняются сравнительно быстро, тогда как CISC процессоры могут иметь разный размер инструкций, некоторые из которых могут выполняться достаточно продолжительное время.

Я решил сделать RISC процессор во многом похожий на MIPS.

Я это сделал по целому ряду причин:


  • Довольно просто создать прототип такого процессора.
  • Вся сложность такого вида процессоров перекладывается на такие программы как ассемблер и/или компилятор.

Вот основные характеристики моего процессора:


  • Машинное слово и размер регистров — 32 бита
  • 64 регистра (включая счетчик команд)
  • 2 типа инструкций

Register type(досл. Регистровый тип) выглядит вот так:

Особенность таких инструкций заключается в том, что они оперируют с тремя регистрами.

Immediate type(досл. Немедленный тип):

Инструкции этого типа оперируют с двумя регистрами и числом.

OP — это номер инструкции, которую нужно выполнить (или же для указания, что эта инструкция Register type).

R0, R1, R2 — это номера регистров, которые служат операндами для инструкции.

Func — это дополнительное поле, которое служит для указания вида Register type инструкций.

Imm — это поле куда записывается то значение, которое мы хотим явно предоставить инструкции в качестве операнда.


  • Всего 28 инструкций

Полный список инструкций можно посмотреть в github репозитории.

Вот лишь пару из них:

nor r0, r1, r2

NOR это Register type инструкция, которая делает логическое ИЛИ НЕ на регистрах r1 и r2, после записывает результат в регистр r0.

Для того, чтобы использовать эту инструкцию нужно изменить поле OP на 0000 и поле Func на 0000000111 в двоичной системе счисления.

lw r0, n(r1)

LW это Immediate type инструкция, которая загружает значение памяти по адресу r1 + n в регистр r0.

Для того, чтобы использовать эту инструкцию в свою очередь нужно изменить поле OP на 0111, а в поле IMM записать число n.


После создания ISA можно приступить к написанию процессора.

Для этого нам нужно знание какого нибудь языка описания оборудования. Вот некоторые из них:


  • Verilog
  • VHDL (не путать с предыдущим!)

Я выбрал Verilog, т.к. программирование на нем было частью моего учебного курса в университете.

Для написания процессора нужно понимать логику его работы:


  1. Получение инструкции по адресу Счетчика команд (PC)
  2. Декодирование инструкции
  3. Выполнение инструкции
  4. Прибавление к Cчетчику команды размера выполненной инструкции

И так до бесконечности.

Получается нужно создать несколько модулей:


Разберем по отдельности каждый модуль.


Регистровый файл

Регистровый файл предоставляет доступ к регистрам. С его помощью нужно получать значения каких то регистров, или изменять их.

В моем случае у меня 64 регистра. В один из регистров записывается результат операции над двумя другими, так что мне нужно предоставить возможность изменять только один, а получать значения из двух других.


Декодер

Декодер это тот блок, который отвечает за декодирование инструкций. Он указывает какие операции нужно выполнить АЛУ и другим блокам.

Например, инструкция addi должна сложить значение регистра $zero(Он всегда хранит 0) и 20 и положить результат в регистр $t0.

addi $t0, $zero, 20

На этом этапе декодер определяет, что эта инструкция:


  • Immediate type
  • Должна записать результат в регистр

И передает эти сведения следующим блокам.


АЛУ

После управление переходит в АЛУ. В нем обычно выполняются все математические, логические операции, а также операции сравнения чисел.

То есть, если рассмотреть ту же инструкцию addi, то на этом этапе происходит сложение 0 и 20.


Другие

По мимо вышеперечисленных блоков, процессор должен уметь:


  • Получать и изменять значения в памяти
  • Выполнять условные переходы

Тут и там можно увидеть как это выглядит в коде.


После написания процессора нам нужна программа, которая бы преобразовывала текстовые команды в машинный код, чтобы не делать этого вручную. Поэтому нужно написать ассемблер.

Я решил реализовать его на языке программирования Си.

Так как мой процессор имеет RISC архитектуру, то для того, чтобы упростить себе жизнь, я решил спроектировать ассемблер так, чтобы в него можно было легко добавлять свои псевдоинструкции(комбинации из нескольких элементарных инструкций или из других псевдоинструкций).

Можно реализовать это с помощью структуры данных, хранящей в себе тип инструкции, ее формат, указатель на функцию, которая возвращает машинные коды инструкции, и ее название.

Обычная программа начинается с объявления сегмента.

Для нас достаточно двух сегментов .text — в котором будет храниться исходный код наших программ — и .data — в котором будет хранится наши данные и константы.

Инструкция может выглядеть вот так:

.text
    jie $zero, $zero, $zero # Ветвление
    addi $t1, $zero, 2 # $t1 = $zero + 2
    lw $t1, 5($t2) # $t1 = *($t2 + 5)
    syscall 0, $zero, $zero # syscall(0, 0, 0)
    la $t1, label# $t1 = label

Сначала указывается название инструкции, потом операнды.

В .data же указываются объявления данных.

.data
    .byte 23        # Константа размером 1 байт
    .half 1337      # Константа размером 2 байта
    .word 69000, 25000  # Константы размером 4 байта
    .asciiz "Hello World!"  # Константная нуль терминируемая строка (Си строка)
    .ascii  "12312009"  # Константная строка (без терминатора)
    .space 45       # Пропуск 45 байтов

Объявление должно начинаться с точки и названия типа данных, после же идут константы или аргументы.

Удобно парсить (сканировать) ассемблер файл в таком виде:


  1. Сначала сканируем сегмент
  2. Если это .data сегмент, то мы парсим разные типы данных или .text сегмент
  3. Если это .text сегмент, то мы парсим команды или .data сегмент

Для работы ассемблеру нужно проходить исходный файл 2 раза. В первый раз он считает по каким смещениям находятся ссылки (они служат для), они обычно выглядят вот так:

    la  $s4,    loop          # Загружаем адрес loop в s4

loop:   # Ссылка!

    mul $s2, $s2, $s1   # s2 = s2 * s1
    addi $s1, $s1, -1    # s1 = s1 - 1
    jil $s3, $s1, $s4   # если s3 < s1 то перейди на метку 

А во второй проход можно уже и генерировать файл.


В дальнейшем, можно запускать выходной файл из ассемблера на нашем процессоре и оценивать результат.

Также готовый ассемблер можно использовать в Си компиляторе. Но это уже позже.

Ссылки:


Как на самом деле производят процессоры

Песок. В наших ком­пью­те­рах в бук­валь­ном смыс­ле песок, вер­нее — состав­ля­ю­щий его крем­ний. Это основ­ной эле­мент, бла­го­да­ря кото­ро­му в ком­пью­те­рах всё рабо­та­ет. А вот как из пес­ка полу­ча­ют­ся ком­пью­те­ры.

Что такое процессор

Про­цес­сор — это неболь­шой чип внут­ри ваше­го ком­пью­те­ра или теле­фо­на, кото­рый про­из­во­дит все вычис­ле­ния. Об осно­ве вычис­ле­ний мы уже писа­ли — это тран­зи­сто­ры, кото­рые собра­ны в сум­ма­то­ры и дру­гие функ­ци­о­наль­ные бло­ки.

Если очень упро­щён­но — это слож­ная систе­ма кра­нов и труб, толь­ко вме­сто воды по ним течёт ток. Если пра­виль­ным обра­зом соеди­нить эти тру­бы и кра­ны, ток будет течь полез­ным для чело­ве­ка обра­зом и полу­чат­ся вычис­ле­ния: сна­ча­ла сум­мы, потом из сумм мож­но полу­чить более слож­ные мате­ма­ти­че­ские опе­ра­ции, потом чис­ла­ми мож­но зако­ди­ро­вать текст, цвет, пик­се­ли, гра­фи­ку, звук, 3D, игры, ней­ро­се­ти и что угод­но ещё.

Кремний

Почти все про­цес­со­ры, кото­рые про­из­во­дят­ся в мире, дела­ют­ся на крем­ни­е­вой осно­ве. Это свя­за­но с тем, что у крем­ния под­хо­дя­щая внут­рен­няя атом­ная струк­ту­ра, кото­рая поз­во­ля­ет делать мик­ро­схе­мы и про­цес­со­ры прак­ти­че­ски любой кон­фи­гу­ра­ции.

Самый доступ­ный источ­ник крем­ния — песок. Но крем­ний, кото­рый полу­ча­ет­ся из пес­ка, на самом пер­вом эта­пе недо­ста­точ­но чистый: в нём есть 0,5% при­ме­сей. Может пока­зать­ся, что чисто­та 99,5% — это кру­то, но для про­цес­со­ров нуж­на чисто­та уров­ня 99,9999999%. Такой крем­ний назы­ва­ет­ся элек­трон­ным, и его мож­но полу­чить после цепоч­ки опре­де­лён­ных хими­че­ских реак­ций.

Когда цепоч­ка закан­чи­ва­ет­ся и оста­ёт­ся толь­ко чистый крем­ний, мож­но начи­нать выра­щи­вать кри­сталл.

Кристалл и подложка

Кри­стал­лы — это такие твёр­дые тела, в кото­рых ато­мы и моле­ку­лы веще­ства нахо­дят­ся в стро­гом поряд­ке. Про­ще гово­ря, ато­мы в кри­стал­ле рас­по­ло­же­ны пред­ска­зу­е­мым обра­зом в любой точ­ке. Это поз­во­ля­ет точ­но пони­мать, как будет вести себя это веще­ство при любом воз­дей­ствии на него. Имен­но это свой­ство кри­стал­ли­че­ской решёт­ки исполь­зу­ют на про­из­вод­стве про­цес­со­ров.

Самые рас­про­стра­нён­ные кри­стал­лы — соль, дра­го­цен­ные кам­ни, лёд и гра­фит в каран­да­ше.

Боль­шой кри­сталл мож­но полу­чить, если крем­ний рас­пла­вить, а затем опу­стить туда зара­нее под­го­тов­лен­ный малень­кий кри­сталл. Он сфор­ми­ру­ет вокруг себя новый слой кри­стал­ли­че­ской решёт­ки, полу­чив­ший­ся слой сде­ла­ет то же самое, и в резуль­та­те мы полу­чим один боль­шой кри­сталл. На про­из­вод­стве он весит под сот­ню кило­грамм, но при этом очень хруп­кий.


Гото­вый кри­сталл крем­ния.

После того, как кри­сталл готов, его наре­за­ют спе­ци­аль­ной пилой на дис­ки тол­щи­ной в мил­ли­метр. При этом диа­метр тако­го дис­ка полу­ча­ет­ся око­ло 30 сан­ти­мет­ров — на нём будет созда­вать­ся сра­зу несколь­ко десят­ков про­цес­со­ров.

Каж­дую такую пла­стин­ку тща­тель­но шли­фу­ют, что­бы поверх­ность полу­чи­лась иде­аль­но ров­ной. Если будут зазуб­ри­ны или шеро­хо­ва­то­сти, то на сле­ду­ю­щих эта­пах диск забра­ку­ют.


Гото­вые отпо­ли­ро­ван­ные пла­сти­ны крем­ния.

Печатаем транзисторы

Когда дис­ки отпо­ли­ро­ва­ны, на них мож­но фор­ми­ро­вать про­цес­со­ры. Про­цесс очень похож на то, как рань­ше печа­та­ли чёрно-белые фото­гра­фии: бра­ли плён­ку, све­ти­ли свер­ху лам­пой, а сни­зу кла­ли фото­бу­ма­гу. Там, куда попа­дал свет, бума­га ста­но­ви­лось тём­ной, а те места, кото­рые закры­ло чёр­ное изоб­ра­же­ние на плён­ке, оста­ва­лись белы­ми.

С тран­зи­сто­ра­ми всё то же самое: на диск нано­сят спе­ци­аль­ный слой, кото­рый при попа­да­нии све­та реа­ги­ру­ет с моле­ку­ла­ми дис­ка и изме­ня­ет его свой­ства. После тако­го облу­че­ния в этих местах диск начи­на­ет про­во­дить ток чуть ина­че — силь­нее или сла­бее.

Что­бы так поме­нять толь­ко нуж­ные участ­ки, на пути све­та поме­ща­ют фильтр — пря­мо как плён­ку в фото­пе­ча­ти, — кото­рый закры­ва­ет те места, где менять ниче­го не надо.

Потом полу­чив­ший­ся слой покры­ва­ют тон­ким сло­ем диэлек­три­ка — это веще­ство, кото­рое не про­во­дит ток, типа изо­лен­ты. Это нуж­но, что­бы слои про­цес­со­ра не вза­и­мо­дей­ство­ва­ли друг с дру­гом. Про­цесс повто­ря­ет­ся несколь­ко десят­ков раз. В резуль­та­те полу­ча­ют­ся мил­ли­о­ны мель­чай­ших тран­зи­сто­ров, кото­рые теперь нуж­но соеди­нить меж­ду собой.

Соединяем всё вместе

То, как соеди­ня­ют­ся меж­ду собой тран­зи­сто­ры в про­цес­со­ре, назы­ва­ет­ся про­цес­сор­ной архи­тек­ту­рой. У каж­до­го поко­ле­ния и моди­фи­ка­ции про­цес­со­ров своя архи­тек­ту­ра. Все про­из­во­ди­те­ли дер­жат в сек­ре­те тон­ко­сти архи­тек­ту­ры, пото­му что от это­го может зави­сеть ско­рость рабо­ты или сто­и­мость про­из­вод­ства.

Так как тран­зи­сто­ров мно­го, а свя­зей меж­ду ними нуж­но сде­лать нема­ло, то посту­па­ют так: нано­сят токо­про­во­дя­щий слой, ста­вят фильтр и закреп­ля­ют про­вод­ни­ки в нуж­ном месте. Потом слой диэлек­три­ка и сно­ва токо­про­во­дя­щий слой. В резуль­та­те выхо­дит бутер­брод из про­вод­ни­ков, кото­рые друг дру­гу не меша­ют, а тран­зи­сто­ры полу­ча­ют нуж­ные соеди­не­ния.


Токо­про­во­дя­щие дорож­ки круп­ным пла­ном. На фото они уже в несколь­ко сло­ёв и не меша­ют друг дру­гу.

В чём сложность

Совре­мен­ные про­цес­со­ры про­из­во­дят­ся на нано­мет­ро­вом уровне, то есть раз­ме­ры эле­мен­тов изме­ря­ют­ся нано­мет­ра­ми, это очень мало.

Если, напри­мер, во вре­мя печа­ти очень тол­стый маль­чик упа­дёт на пол в сосед­нем цехе, еле замет­ная удар­ная вол­на про­ка­тит­ся по пере­кры­ти­ям заво­да и печат­ная фор­ма немно­го сдви­нет­ся, а напе­ча­тан­ные таким обра­зом тран­зи­сто­ры ока­жут­ся бра­ко­ван­ны­ми. Пылин­ка, попав­шая на пла­сти­ну во вре­мя печа­ти — это, счи­тай, загуб­лен­ное ядро про­цес­со­ра.

Поэто­му на заво­дах, где дела­ют про­цес­со­ры, соблю­да­ют­ся жёст­кие стан­дар­ты чисто­ты, все ходят в мас­ках и костю­мах, на всех воз­ду­хо­во­дах сто­ят филь­тры, а сами заво­ды нахо­дят­ся на сей­сми­че­ских подуш­ках, что­бы толч­ки зем­ной коры не меша­ли про­из­во­дить про­цес­со­ры.

Крышка и упаковка

Когда дорож­ки гото­вы, диск отправ­ля­ют на тесты. Там смот­рят на то, как рабо­та­ет каж­дый про­цес­сор, как он гре­ет­ся и сколь­ко ему нуж­но энер­гии, заод­но про­ве­ря­ют на брак.

В зави­си­мо­сти от резуль­та­тов про­цес­со­ры с одной пла­сти­ны могут полу­чить раз­ную мар­ки­ров­ку и про­да­вать­ся по раз­ной сто­и­мо­сти. Те про­цес­со­ры, кото­рые полу­чи­лись более удач­ны­ми, ста­но­вят­ся доро­ги­ми сер­вер­ны­ми про­дук­та­ми. Те, где кто-то рядом чих­нул или вздох­нул, име­ют неко­то­рые несо­вер­шен­ства и дефек­ты, их могут отпра­вить на потре­би­тель­скую линию.

После тестов диск раз­ре­за­ют на гото­вые про­цес­сор­ные ядра.


Пла­сти­на со мно­же­ством оди­на­ко­вых про­цес­сор­ных ядер.
Робот выре­за­ет ядра из гото­вой пла­сти­ны.

После это­го к ядру про­цес­со­ра добав­ля­ют кон­так­ты, что­бы мож­но было вста­вить его в мате­рин­скую пла­ту, и накры­ва­ют крыш­кой. Чёр­ный или метал­ли­че­ский пря­мо­уголь­ник, из кото­ро­го тор­чат нож­ки, — это как раз крыш­ка.

Крыш­ка выпол­ня­ет две функ­ции: защи­ща­ет сам кри­сталл от повре­жде­ний и отво­дит от него теп­ло во вре­мя рабо­ты. Дело в том, что мил­ли­о­ны тран­зи­сто­ров при рабо­те нагре­ва­ют­ся, и если про­цес­сор не осту­жать, то он пере­гре­ет­ся и кри­сталл может испор­тить­ся. Что­бы тако­го не про­изо­шло, на крыш­ку про­цес­со­ра ста­вят воз­душ­ные куле­ры или дела­ют водя­ное охла­жде­ние.

Система на чипе

Чипы про­цес­со­ров уже настоль­ко малень­кие, что под одной крыш­кой мож­но поме­стить какое-нибудь ещё устрой­ство. Напри­мер, видео­си­сте­му — то, что обсчи­ты­ва­ет кар­тин­ку перед выво­дом на экран. Или устрой­ство радио­свя­зи с антен­ной.

В какой-то момент на малень­ком чипе пло­ща­дью око­ло 1 см2 уже мож­но было поме­стить про­цес­сор, видео, модем и блю­тус, сде­лать всё нуж­ное для под­держ­ки памя­ти и пери­фе­рии — в общем, систе­ма на чипе. Под­клю­ча­е­те к это­му хозяй­ству экран, нуж­ное коли­че­ство антенн, пор­тов и кно­пок, а глав­ное — здо­ро­вен­ную бата­рею, и у вас гото­вый смарт­фон. По сути, все «моз­ги» ваше­го смарт­фо­на нахо­дят­ся на одном малень­ком чипе, а 80% про­стран­ства за экра­ном зани­ма­ет бата­рея.

Энтузиаст сделал самодельный процессор — «Хакер»

Как оказалось, создать собственный процессор по силам не только таким компаниям, как Intel и AMD, но и обычным энтузиастам.

Стив Чамберлин (Steve Chamberlin) из Калифорнии начал работу над проектом BMOW (Big Mess O’ Wires) в ноябре 2007. И хотя он является разработчиком игр, поставил перед собой задачу создать процессор с нуля, используя лишь логические элементы. При этом планировалось разработать не игрушку, а полноценный 8-битный процессор, способный выполнять реальные программы, соединяться с обычным компьютером и достаточно быстро работать. Надо сказать, что эти задачи были значительно превзойдены.

Так как Стив не является инженером, то решил действовать по-простому методу и соединял все элементы на плате вручную, для чего потребовалось более 1250 проводов. Тем не менее, процессор отлично функционирует на частоте 2 МГц и теоретически может работать на 3 МГц, но это пока что не тестировалось. Шина данных имеет ширину 8 бит, а шина адреса — 24 бита, что позволяет работать с 16 Мб оперативной памяти. Для начала энтузиаст использовал 512 Кб ROM для загрузчика и основного меню и 512 Кб RAM для программ.

Для подключения к компьютеру используется специальный чип — переходник с USB на TTL-логику. Кроме того, подключается стандартная клавиатура по PS/2 и текстовый LCD экранчик с выводом 24×2 символа. Также производится вывод на обычный VGA монитор с максимальным разрешением 512 x 480, а трехголосый программируемый генератор обеспечивает воспроизведение музыки и звуков.

Поделись новостью с друзьями:

Создание примитивного компьютера с нуля / Хабр

Компьютер — это просто. Или нет?


Любой человек, интересующийся сферой информационных технологий, хоть раз задумывался о том, как на самом деле работает компьютер. А и действительно, с помощью компьютера можно сделать столько всего удивительного, что невозможно поверить, что всё, что происходит внутри него, — сложение чисел. Почему бы тогда не сделать свой самому?

Эта мысль явно прослеживается в книге Чарльза Петцольда «Код» — хорошее чтиво для тех, кто хочет разобраться в устройстве компьютера на пальцах не тратя особо времени. Эта книга произвела сильное впечатление на меня, да так, что я решил, что компьютер и вовсе банально простой агрегат и ничего сложного в нём нет.

Но это не так. После прочтения у меня всё-таки поселилось ощущение того, что от меня что-то сокрыто, что какие-то аспекты архитектуры вовсе не затрагивались. За бо́льшими объёмами информации я обратился к следующей книге — «Архитектура Компьютера» Эндрю Таненбаума. Информация в этой книге оказалась гораздо обширнее, однако я получил не совсем то, чего хотел.

На этом мой путь в мире архитектуры ЭВМ приостановился, началась учёба, я отвлёкся на другие, более интересные для меня на тот момент проекты. Но, к сожалению, я из тех людей, которые не могут без угрызений совести пользоваться чем-либо, не зная хотя бы примерно механизма работы этого инструмента. Это заставляло меня искать материал буквально обо всём.

Череда разочарований наступила после прочтения нескольких глав книг об игровых движках, компиляторах, операционных системах и пр. Я просто растерялся: мир, который казался мне логичным и в меру простым в миг стал огромным и запутанным, требующим внушительных объёмов знаний.

Начало великого пути

То, что спасло меня, был ответ одного пользователя на каком-то форуме на пост человека, страдавшего похожим «расстройством», мир IT казался ему таким огромным, что его точно нельзя постичь. Я помню те слова, и они меня выручают каждый раз, когда я сталкиваюсь с чем-то новым. «Do not let yourself get overwhelmed» — то, что стоит говорить каждому новичку в IT.

И тогда я начал с новыми силами бороздить просторы интернета в поисках литературы. Мне очень повезло, что я наткнулся на замечательную книгу «The Elements of Computing Systems. Building a Modern Computer from First Principles» by Noam Nisan and Shimon Schocken(нет русского издания). В ней именно для таких, как я показывают создание реально работающего компьютера с нуля, то есть из логических вентилей.

Я загорелся идеей и приступил к работе. Начал с того, что когда-то уже делал после прочтения Петцольда, — сумматоры, регистры, мультиплексоры. Это одни из самых простых устройств, работу которых вовсе не сложно понять (если не думать об эффективности), а сделать такие можно за 10 минут в удобном приложении на вашем смартфоне.

Каждую следующую главу я начинал с жаждой знаний. Сконструировал АЛУ, руководясь заданиями в книге. Не могу сказать, что что-то в нём придумал я, скорее мне дали готовые детальки, а я их собрал в красивую машину. Зато какое удовольствие я получил, когда понял, что я своими руками собрал полностью работающее АЛУ.

Схема платы АЛУ, выполненная в программе BOOLR

Первые плоды

За ним последовал полностью работающий 16-битный процессор, который я доделал сегодня. Моему счастью нет предела, но я не собираюсь останавливаться. К моему сожалению, хоть в книге весь процессор и был собран полностью с нуля, но ассемблер для него был абстракцией в следующей главе(что логично, книга расчитана на более-мение краткое, хоть и детальное изложение). Немного погрустив, я понял, что Ассембли — тоже язык программирования, и создание полноценного Ассемблера с нуля займёт много времени.Схема готового процессора. Большое чёрное пятно — то самое АЛУ

Об ассемблере в книге

На самом деле эта тема в книге не была полностью опущена. Там говорится о том, что ассемблер можно написать, используя любой высокоуровневый язык программирования. Меня как слабоумного и отважного такой вариант не сильно устраивает, я хочу всё сделать своими ручками используя тот процессор, который у меня есть. И да, я понимаю, что потеряю много времени, но я получу от этого удовольствие, я уверен.


Написать свой Ассемблер — амбициозная цель, но это не единственная сложность. Путь, который я выбрал, обещает быть непростым. Регистры и в целом память в программе BOOLR можно реализовать только используя логические вентили. Почему это проблема? Всё просто: ничтожные 1024 байт RAM десятки раз рекурсивно пытаются поселить в оперативной памяти моего компьютера свои составные 16-битные регистры. Вот, что из этого получается:

В общем говоря, иногда проект просто не открывается из-за нехватки оперативной памяти. Выглядит как тупик, но я не намерен останавливаться на этом.

Бюджетный апгрейд старого компьютера: с чего начать | Сборка компьютера, апгрейд | Блог

Модульная структура ПК позволяет как гибко подбирать комплектующие, так и обновлять их по мере необходимости. Разбираемся, с чего начать апгрейд своего пенсионного компьютера, если вы не готовы ради этого сразу выкладывать пару месячных зарплат, продавать машину или влезать в кредит.

Понятие «старый компьютер» — весьма условное, ведь конфигураций системников очень много. Поэтому выберем для примера пару ходовых «конфигов» 7-8 летней давности. Например, типичные системники тех времен: i3 второго/третьего поколения, или FX 4000 серии из стана AMD, 4 ГБ оперативной памяти стандарта DDR3, HDD в качестве системного диска, отсутствие портов M.2, а иногда даже SATA3 и USB 3.0.

Попробуем рассмотреть, а как же все-таки пытаться обновить свой ПК, когда бюджет ограничен.

Сразу оговоримся: если вы хотите играть в самые современные и требовательные игры, причем на максималках, то ни о каком бюджетном апгрейде здесь не может быть и речи. Покупка комплектующих такого уровня всегда была делом затратным, а при сегодняшнем курсе — и подавно.

А вот недорого собрать компьютер для стандартных задач современного человека (интернет, мультимедиа, нетребовательные игры) дело вполне осуществимое.

Процессор, материнская плата

Обновление мультимедийного/офисного/игрового компьютера (последний не всегда, но об этом позже) на современные комплектующие, лучше начать с покупки сета из процессора, материнской платы и оперативной памяти. Почему придется покупать все три компонента разом? Совместимость. Старые материнские платы несовместимы с новым поколением процессоров, оперативной памяти. Старая оперативка не подойдет к вашей новой плате, и так далее. Можно приобретать не сразу, а, к примеру, каждый месяц по одному комплектующему, хотя это не всегда удобно ввиду растянутости по времени и банального отсутствия возможности проверить работоспособность уже купленного.

Уже на старте мы получим хороший плацдарм для дальнейшего апгрейда, если он вам понадобится, ускорение в повседневных задачах (особенно, если ранее у вас было мало оперативной памяти), поддержку современных интерфейсов/портов M.2, SATA3, USB3.0 и технологий.

Для недорогого ПК без тяжелых нагрузок хватит современного двух- или четырехъядерного, четырех поточного CPU. Для современной игровой конфигурации лучше присмотреться к моделям, предлагающим от шести ядер и двенадцати потоков.

При бюджетном апгрейде зачастую пользователи поступают следующим образом: берут недорогой процессор в начале, а через некоторое время заменяют его на более мощный/нужный/подходящий. Такой вариант позволяет выиграть время для сбора средств на нужный ЦП, однако практически всегда связан с тем, что «старый» процессор нужно будет куда-то деть. И, конечно, практически всегда это перепродажа, на которой вы потеряете ту или иную часть его первоначальной стоимости. Так что это вариант далеко не идеальный, но иногда вполне рабочий.

Оперативная память

Современные реалии таковы, что много памяти не бывает, а мало — вполне. Покупка модуля объемом 4 ГБ практически лишена смысла даже с учетом дальнейшей покупки еще одного модуля. Во-первых, две 4 ГБ плашки выйдут дороже одной (в большинстве случаев). Также на недорогих материнских платах с двумя слотами под RAM это будет пределом наращивания объема. Более разумным вариантом будет покупка одного, но более объемного модуля, с возможной последующей докупкой второго. Например, 8 ГБ.

Для простой работы, интернет-серфинга и мультимедиа 8 ГБ — достаточный объем. Двухканальный режим, если ставить 2*4 ГБ, заметного улучшения здесь не принесет. Но также, мы имеем возможность увеличить объем до 16 ГБ, если наступит такая необходимость. Учитывая крайнее нежелание Windows 10 очищать память, раздувая Shared memory при длительной работе, она может наступить быстрее, чем кажется. А для игр, 2*8 ГБ — это стандарт де-факто.

Больший объем может иметь место в сборке, если подразумеваются какие-либо профзадачи – 3D-моделирование, CAD-системы, видео- аудиомонтаж и т.д. Но тогда говорить о каком-то бюджетном апгрейде вряд ли уместно.

Видеокарта

Если ваша цель — играть в современные игры, то вам, как воздух, необходима замена видеокарты на современный игровой вариант. Игры — довольно комплексное программное обеспечение, и они зависят от разных комплектующих (процессор, объем оперативной памяти, скорость системного накопителя), но в большей степени, все же, от видеокарты.

Для конфигураций не предполагающих требовательных игр, вполне может быть достаточно мощности интегрированных решений, которыми оснащается большая часть современных процессоров.

Тут стоит сделать оговорку. Если вы хотите играть в современные игры, и ваша конфигурация мощнее, чем наш первоначальный «эталон древности», то вы можете начать свой апгрейд именно с установки новой, более производительной видеокарты. Например, если у вас уже на старте, к примеру, процессор уровня i5-2xxx, FX-8xxx и выше, а объем оперативной памяти от 8 ГБ.  Такое усовершенствование будет вполне оправдано на ближайшие год-два. Однако, на этом потенциал усовершенствования будет закончен. Вы можете попробовать найти на вторичном рынке более мощный процессор (если у вас не самый топ), поддерживаемый вашей платой, или увеличить объем оперативной памяти, но в перспективе это путь в никуда.

Накопители

Немаловажный компонент — системный диск. Твердотельные накопители настолько прочно вошли с обиход, что достаточно трудно представить современный компьютер, или ноутбук без SSD.

Установка SSD в качестве системного диска на смену HDD принесет с собой прирост производительности в самых повседневных задачах — загрузка операционной системы, запуск программ, копирование файлов. За компьютером будет банально приятнее работать, чем раньше.

Актуальный объем твердотельного накопителя под систему, с учетом размера программ, ОС на данный момент и резервом свободного места, начинается от 240 ГБ. Более — уже исходя из потребностей и цены.

Жесткий диск, если он исправен, выбрасывать все же не стоит. Он отлично подойдет для хранения ваших фотографий, фильмов и музыки. Впрочем, о применении и выборе SSD и HDD у нас есть отдельный подробный материал.

Охлаждение

При покупке процессора у вас есть два варианта: вы берете версию BOX с комплектным кулером (осторожно, не все процессоры в BOX версии им оснащаются), либо вы берете версию OEM без системы охлаждения, и докупаете ее отдельно с учетом ваших потребностей. Ну или используете ваш старый кулер, если он подходит по креплению и эффективности.

Какую версию выбрать? Решать вам, определим лишь несколько моментов: OEM обычно дешевле, однако величина этой разницы может сильно варьироваться вплоть до около нулевой. Также она ограничена в сроке гарантии до одного года против трех у BOX. Поэтому даже если у вас есть хороший кулер от старой системы, и он совместим с новым процессорным сокетом, лучше присмотреться к боксовой версии.

С другой стороны, комплектный кулер обеспечит нормальную работоспособность процессора. Да, возможно за счет более высоких температур или более высокого шума при работе, но ваша сборка будет работоспособной. А если у вас появятся лишние деньги на систему охлаждения, то вы всегда сможете ее заменить.

Блок питания

Вместе с заменой предыдущих комплектующих у вас может возникнуть потребность в замене блока питания, ведь новые компоненты могу запросто потреблять больше энергии, чем выдает ваш старый блок.

К выбору БП нужно подходить достаточно серьезно. Многие пользователи преуменьшают роль блока питания (на скорость не влияет же), и берут его «на сдачу» от остального железа. А это в корне неправильный подход.

От блока питания будет зависеть стабильная работа всего компьютера, а для корректного подбора по мощности существуют различные калькуляторы, которые помогут подсчитать потребление будущей сборки. Подробно посчитать нужную мощность БП поможет этот подробный гайд по калькуляторам.

В любом случае, брать блок питания, который будет лишь с минимальным запасом покрывать мощность ваших комплектующих, не рекомендуется. Во-первых, в таких режимах уменьшаются КПД блока и температура его компонентов. Во-вторых, следует помнить о естественном износе компонентов с течением времени. По мере износа выходная мощность блока будет уменьшаться, и отсутствие запаса ни к чему хорошему не приведет.

Корпус

И, наконец, корпус. Замена корпуса не видится первоочередной задачей при обновлении, если все компоненты можно разместить в имеющемся. Для бюджетных ПК проблема перегрева особо острой не является в отличие от игровых компьютеров с мощными комплектующими, выделяющими достаточно тепла. Но в качестве временной меры для уменьшения температуры компонентов можно просто снять боковые стенки корпуса. Как говорится, дешево и сердито.

Впрочем, за небольшую сумму вполне можно разжиться неплохим корпусом с хорошей вентиляцией или даже модной RGB–подсветкой.

Шпаргалка

Итак, резюмируем самые основные пункты в сценарии поэтапного апгрейда ПК:

  • Замена процессора, материнской платы и оперативной памяти — первый и большой шаг в апгрейде.
  • Покупайте модули памяти объемом не менее 8 ГБ.
  • SSD под систему — быстрей и удобней работа.
  • Выбирая между BOX и OEM процессором, присмотритесь к первому.
  • Не покупайте блок питания «на сдачу».
  • Для офисной сборки вероятнее всего корпус менять не потребуется.
  • Чтобы поиграть, иногда достаточно замены лишь видеокарты.
  • Топовые игры на максималках — это не про бюджетный апгрейд.

Напомним, что данный материал очерчивает только общий путь в поэтапном обновлении вашего системного блока. Нюансов, в данной теме, огромное количество, и если вы сомневаетесь в своих силах в выборе комплектующих, то вы всегда можете воспользоваться материалами о сборке в определенную стоимость или задать свой вопрос на нашем сайте, в разделе «Коммуникатор».

Как сделать ЦП: от песка к полке

Enter Sand, Man

Мы уверены, что большинство компьютерных энтузиастов знают, что процессоры сделаны из кремния. Гораздо меньше людей, вероятно, осознают, сколько работы уходит на создание того, что по сути является чудом современного мира. Процессоры производятся в невероятно малых масштабах, чтобы выдерживать огромные допуски, причем даже самые дешевые микросхемы требуют сотен этапов производства для перехода от пластины к материнской плате.

Производители также вынуждены улучшать методы производства и уменьшать размер транзисторов, при этом разные компании подходят к этой проблеме по-разному. Корпорация Intel помогла нам составить это руководство, и в результате оно сосредоточено на реализации 32-нм производственного процесса High-K. Другие производители, такие как Global Foundries или TSMC, используют несколько иные методы для производства своих чипов.


Слева: отсюда предстоит пройти долгий путь. Справа: Важно сделать кремниевый слиток цельным, без стыков.
Удивительно, но после кислорода кремний является самым богатым элементом в земной коре. Однако он не просто валяется в кусках электронного оборудования, его нужно извлекать из песка, где он находится в форме диоксида кремния (SiO 2 ).

После того, как кремний очищен до необходимой степени (что-то около 99,9999999 процентов чистоты), он превращается в единый непрерывный 100-килограммовый слиток кремния. Затем слиток можно разрезать на отдельные диски толщиной 1 мм, называемые пластинами, которые должны быть узнаваемы большинством технических наркоманов.


Слева: эти слитки весят до 100 кг и имеют диаметр около 12 дюймов. Справа: пластины должны быть точно подходящей толщины.
Затем вафли полируются до безупречного зеркального блеска, и они готовы к следующему этапу процесса. Интересно, что производители процессоров обычно не несут ответственности за эти начальные стадии, вместо этого покупая готовые нарезанные и отполированные пластины у сторонних производителей кремния.
Слева: нарезанная и отполированная силиконовая пластина, готовая к превращению в несколько сотен процессоров.Справа: вы можете видеть узорчатый блеск фоторезиста.
Теперь всерьез начинается сложный бизнес по созданию чего-то, способного воспроизводить Crysis и рендеринга видео. Пластина покрыта стратегически структурированным слоем фоторезиста, который действует как трафарет, когда пластина бомбардируется мощными пучками заряженных атомов, называемых ионами.
Слева: Поднимите меня, Скотти … или просто вставьте в меня триллионы заряженных ионов. Справа: теперь изменена электрическая проводимость определенных частей пластины.
Ионы внедряются в открытые части кремния в процессе, называемом ионной имплантацией или легированием, что приводит к изменению проводящих свойств этой части пластины. Затем фоторезист удаляется, оставляя на кремниевой пластине сложный узор из проводящих и непроводящих следов.
.

Как увеличить эффективность процессора вашего ПК

Windows очень демократична в распределении процессорного времени — практически любая программа, которую вы запускаете, по умолчанию получает полный доступ к каждому ядру процессора. Сначала это звучит как хорошая идея, но это не так.

Да, некоторые из запускаемых вами программ должны потреблять всю имеющуюся у вас мощность процессора, но есть множество других, которые менее важны. Многие из этих значков на панели задач представляют собой инструменты, которые вам нужно запустить, но они не совсем критичные.Им не нужно иметь такой же уровень доступа к вашему процессору, как, скажем, той игре, в которую вы собираетесь играть следующей.

Многие пользователи ПК не понимают, что есть несколько способов добиться этого. Вам не нужно мириться со стандартной стратегией планирования ЦП Windows — вы можете легко изменить ее, гарантируя, что менее важные программы будут меньше использовать ваши ресурсы и оставить больше мощности для важных приложений. Любое результирующее повышение скорости будет небольшим — скорее всего, на 5 процентов, чем на 50 процентов, — но оно все же может помочь вашей системе работать более плавно.

Используемые методы настолько просты и удобны в применении, что они того стоят. Следуйте нашим инструкциям, и всего через час или два Windows будет оптимально использовать ваш процессор.

Сходство процессов

Windows обычно позволяет любому процессу выполнять несколько потоков на любом из ядер вашего ЦП. Это отлично подходит для того, чтобы позволить процессам работать с максимальной скоростью, но это также означает, что программа с плохим поведением может потреблять процессорное время в ущерб всему остальному, если вы что-то с этим не сделаете.

Решение на удивление простое. Если у вас есть программа, которая, как правило, использует больше процессорного времени, чем вам хотелось бы, все, что вам нужно сделать, — это указать Windows, чтобы она запускала ее на определенном ядре процессора, а не на всех.

Это называется привязкой к процессу. Вы можете установить привязку в диспетчере задач в Windows Vista и 7, что часто бывает хорошей идеей, если неконтролируемый процесс захватил 100 процентов вашего процессорного времени.

Нажмите [Ctrl] + [Shift] + [Esc], чтобы запустить Диспетчер задач, щелкните вкладку «Процессы», затем найдите и щелкните правой кнопкой мыши проблемный процесс.Выберите «Установить привязку», и вы увидите список своих ядер, каждое из которых представлено одним флажком. Очистите все, кроме «CPU 0», затем нажмите «OK». Теперь этот процесс может выполняться только на вашем первом ядре ЦП. Все остальные ядра станут доступны другим приложениям, что должно мгновенно повысить скорость реакции вашей системы.

Параметр привязки предназначен не только для управления мошенническими процессами. Вы также можете использовать его, например, для перемещения всех второстепенных фоновых программ на вашем ПК на CPU 0.Эти программы станут медленнее, потому что они будут бороться за процессорное время, но вы освободите другие ядра для ваших более важных приложений, которые могут стать немного быстрее.

Это было бы непрактично, если бы вам приходилось настраивать диспетчер задач вручную для каждого отдельного процесса, но если вы заранее знаете, что хотите использовать привязку, есть более простые варианты.

Инструмент Windows «Пуск» обычно используется для запуска программы или команды в отдельном окне, но он также может запускать ваше приложение с определенной настройкой привязки.Это позволяет очень легко ограничить ваши менее важные приложения.

Возьмем, к примеру, Блокнот. щелкните «Пуск | Все программы | Аксессуары », щелкните правой кнопкой мыши« Блокнот »и выберите« Свойства ». В поле «Цель» будет отображаться что-то вроде «% windir% \ system32 \ notepad.exe».

Запишите это и измените его на «c: \ windows \ system32 \ cmd.exe» / C start / affinity 1% windir% \ system32 \ notepad.exe.

Замените ‘c: \ windows’ на путь к папке Windows на вашем ПК, если он другой.

Команда запуска

Этот ярлык теперь запускает командную оболочку, которая запускает команду «Пуск». Он принимает параметр / affinity, который указывает ему работать на первом процессоре (который совпадает с «CPU 0» в диспетчере задач), и, наконец, указывает Windows на программу, которую мы хотим запустить: Блокнот. Нажмите «ОК», чтобы сохранить новый ярлык, затем используйте его для запуска Блокнота.

Никакой видимой разницы не будет, поэтому, чтобы увидеть, что изменилось, запустите Диспетчер задач, щелкните вкладку «Процессы», щелкните правой кнопкой мыши «Блокнот».exe »и выберите« Установить привязку ». Теперь вы должны увидеть, что проверяется только CPU 0 — процесс не может работать на других ядрах. Если нет, проверьте свойства ярлыка и убедитесь, что вы запускаете Блокнот с ярлыка, а не с закрепленного значка на панели задач или двойным щелчком текстового файла.

После того, как у вас все получится, вы можете перенести идею на любой другой ярлык; просто проверьте свойства и добавьте «c: \ windows \ system32 \ cmd.exe» / C start / affinity 1 перед тем, что уже указано в поле «Target» (убедитесь, что после «/ affinity 1» есть пробел).

Но пока не начинайте — есть еще более простой вариант.

RunWithAffinity

RunWithAffinity — это простой в использовании инструмент, который быстро создает ярлыки, необходимые для запуска определенных приложений на одном ядре ЦП.

Для начала создайте папку для программы — C: \ Program Files \ RunWithAffinity подойдет — затем скопируйте туда исполняемый файл с SuperDisc или скачайте с сайта автора.

Затем дважды щелкните файл RunWithAffinity.exe », чтобы запустить программу, нажмите кнопку« Обзор »(обозначенную«… »в правом верхнем углу) и выберите приложение, которое вы хотите запустить на одном ядре. Если вы не уверены, просто перейдите в папку \ Windows и выберите «Notepad.exe», как и раньше.

Диалоговое окно RunWithAffinity должно быть заполнено информацией из выбранной программы, включая ее имя, описание, размер и так далее. Все, что вам нужно сделать, это выбрать ядро, которое вы хотите использовать в программе.

В поле «Выбрать сходство» пока что выберите «№1».Нажмите кнопку «Обзор» рядом с «Папка ShortCut» и выберите место для сохранения ярлыка. Рабочий стол пока будет в порядке. Теперь нажмите «Создать ярлык», и у вас будет ярлык на рабочем столе, который запускает выбранное вами приложение, но также ограничивает его одним ядром процессора.

Повторите это с другими приложениями, которые не требуют полного внимания вашего процессора, и их будет очень легко запускать в будущем. Вы можете перетащить ярлыки в другое место, если хотите — например, в папку «Автозагрузка» или в какую-либо другую часть меню «Пуск».

Сходство процессов, вероятно, является наиболее эффективным способом контроля доступа программы к вашему процессору, но есть и другие варианты. Наиболее важным из них является приоритет процесса.

Приоритетные программы

У вас может быть 30, 40, 50 или более процессов, запущенных на вашем ПК одновременно, и решить, какой из них привлечет внимание ЦП в следующий раз, — сложное дело. Windows могла бы равномерно разделить доступное процессорное время, но, как мы уже указывали, это плохая идея: некоторые программы гораздо важнее других и, следовательно, требуют больше процессорного времени.

Для решения проблемы каждому запущенному процессу назначается приоритет (низкий, ниже нормального, нормальный, выше нормального, высокий или в реальном времени). Когда все процессы хотят работать одновременно, тот, у которого наивысший приоритет, с большей вероятностью получит следующий кусок процессорного времени. По умолчанию большинству процессов назначается приоритет Нормальный, но вы можете изменить его самостоятельно.

Это работает очень похоже на affinity. Вы можете изменить приоритет в диспетчере задач, например: нажмите [Ctrl] + [Shift] + [Esc], перейдите на вкладку «Процессы», щелкните правой кнопкой мыши процесс, который вы хотите изменить, и выберите новый приоритет.

Выберите «Ниже нормы» или «Низкий», чтобы фоновая программа привлекала меньше внимания ЦП, или выберите «Выше нормы», если вы хотите, чтобы процесс имел больше процессорного времени. Не выбирайте «Высокий» или «В реальном времени», иначе вы можете заблокировать выполнение системных процессов, что может привести к сбою вашего ПК.

Это достаточно просто, но страдает той же проблемой, что и настройка привязки таким образом: вам придется делать это вручную каждый раз, когда вы запускаете конкретное приложение.

К счастью, есть простое решение, основанное на том же инструменте командной строки, который помог нам с переключателем / affinity: start.

Чтобы попробовать это, снова щелкните правой кнопкой мыши ярлык «Блокнот», выберите «Свойства» и запишите содержимое поля «Цель», прежде чем изменить его на «c: \ windows \ system32 \ cmd.exe» / C start / belownormal / affinity 1% windir% \ system32 \ notepad.exe или «c: \ windows \ system32 \ cmd.exe» / C start / abovenormal% windir% \ system32 \ notepad.exe.

Первый использует переключатель «сходство» и переключатель «/ ниже нормы», который указывает Windows запускать Блокнот с более низким приоритетом. Вам не нужно комбинировать настройки привязки и приоритета, как показывает второй вариант.Если это приложение требует больше процессорного времени — например, игра — то вы можете просто запустить его с помощью переключателя / abovenormal, и Windows должна выделить ему больше ресурсов.

Не пытайтесь настроить каждое приложение так, чтобы оно работало с определенной привязкой или приоритетом, иначе у Windows будет очень мало свободы планирования ЦП, и производительность вашего ПК может пострадать. Примените эти настройки к как можно меньшему количеству программ для достижения наилучших результатов.

Но если вы будете осторожны, беспокоиться не о чем.Настройка приоритета и привязки — это простой способ перераспределить ресурсы ЦП по вашему желанию, и всего за пару часов вы можете убедиться, что ваши приложения максимально эффективно используют вашу систему.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *