Pull to refresh

Comments 66

N лет назад курсовая была — спроектировать процессор на AHDL'e.
Собственно, я написал простенький 8-битный, 13-командный, причём тестовая программа — рекурсивное вычисление факториала (да-да, там был и стек :) ).
В общем, ничего сложного в этом не вижу :)
Ну да, ничего сложного и нет. На AHDLе, кстати, немного проще. Я на нем недавно brainfuck-процессор писал, управился всего за пару часов (при том что AHDL знаю на уровне дисциплины провиницального университета, то есть не знаю).

Процессор в статье мечталА и сделалА, а предыдущем комментарии писаЛ и управился, а не управилась..

Ох, где моя тетрадка из детства, когда я тоже пытался схемы процессоров рисовать )
И еще одна тетрадка была, где я записывал от руки программы на бейсике (не магнитофона, ни дисковода не было)
Ностальгия… У меня были горы таких тетрадок.
оказывается, я не один такой =)
И вас даже не трое таких)
У меня тоже были тетрадки с программами на бейсике.
Писал от руки.
А я как-то все лето в детстве прожил на даче. На входе: книжка по Perl, на выходе: стопка листов с программами. Правда так их и не запускал потом.
Я помню ещё из журнала выписывал программы и просто справочную инфу (таблицу ASCII-кодов, например) в общую тетрадку. Да уж, было время. Недавно нашел, чуть не прослезился от умиления )
Тоже в детстве были такие тетрадки, туда записывал листинг программ на бейсике. Строки номеровал канонически: 10, 20, 30… и т.д. Очень восхищался таким правилом, подсмотренным в «Науке и жизни», ведь при наложении «патчей», чтобы ввести недостающие строки, достаточно было их подклеить на бумажку между существующими, и дать номера помельче. Если блок выкидывался, заклеивал строки белой бумагой. После нескольких таких попыток необходим был «рефакторинг», т.е. переписать начисто программу в другую тетрадку, поскольку патчи торчали отовсюду и были похожи на макароны.
Я писал заново. И каждый раз присваивал новую версию. Помню, мой текстовый редактор за пару недель обрел номер версии повыше, чем сейчас у Emacs. Ностальгия-тред
Paper CVS :) Правда хранить версии накладно…
Сразу возникает вопрос: «Как вы раньше жили?», но лучше его облачить в более правдивую форму: «Почему у моего поколения все есть и мы такие тупые?» :-)
Ну тут же прямая взаимосвязь )
Уважаемый, мы такие же как и вы.
Хотя да, взаимосвязь есть. У меня был Спектрум и Б3-21. А у многих моих друзей был Pentium II. Но их на Хабре я не видел почему-то.
Тут даже дело не в Спектруме, а в том, что Вы от него хотели получить, хотя и в нем тоже :-)
Да ладно, я хотел то же самое, что было у друзей.
Хотел игры. Приходилось писать.

Потом у меня была 80486я машина с EGA-монитором (ах, как я скучаю по ней), на которой не работали Windows 3.11 и Windows 95 (хотя однажды Windows 3.1 удалось установить). И я, глядя на картинки в книжке Фигурнова, делал свою «Windows». Вот время было…
Верно, но возможности иметь что-то иное не было, поэтому грамотно и целеустремленно работали с тем, что есть. И это похвально. Ладно, нафлудили тут с Вами, пора заканчивать)
Трудное детство, ZX Spectrum без магнитофона в одной розетке с холодильником.
У меня в телевизоре было что-то неправильно переделано, и он выдавал со Спекки инвертированную картинку. Было забавно. Смотрел на жизнь в негативе. Трудное детство.
У меня была хорошая, качественная черно-белая картинка диагональю дюймов 7. Хотел бы я посмотреть на настоящий Спекки с цветным телевизором…
Настоящего спекки не было, но всякие Орион-128, и спекки, подключенные к EGA монитору производили неизгладимое впечатление по качеству картинки. Особенно после 21" монитора сделанного из лампового цветного телевизора (точней у меня был гибридный лампово-транзисторный телевизор).
О, навели на еще одно ностальгическое воспоминание: все детство играл в Dendy на телевизоре Электрон, правда вот ДМВ блок был битый и не выдавал цветную картинку ни в PAL ни в NTSC (это потом уже выяснилось, когда видик появился). Так что все игры были черно-белыми…
Если быть точным, то RISC — это не малый набор комманд, а упрощенный набор. Т.е. каждая комманда делает как можно меньше. Поэтому для того, чтобы сложить два числа в памяти в RISC архитектуре надо сначала загрузить lданные в регистры процессора, сложить их и выгрузить обратно в память. Таким образом, то, что в архитектуре CISC делается одной коммандой, в RISC потребует 3 и более.

У некоторых RISC архитектур комманд больше, чем у множества CISC.
Достаточно хорошо об этом написано в http://ru.wikipedia.org/wiki/RISC
Да, именно так. Стоит ли исправить статью, как думаете?
Думаю, что для начала стоит определиться с тем, что понимется под RISC архитектурой.

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

Первое: RISC всегда имеет фиксированную длину комманд.
Второе: Отсутствие микропрограмм внутри RISC процессора. Тогда как CISC преимущественно выполняет микропрограммы.
Не совсем. RISC — ето именно уменьшений набор команд. Команди делаются более ортогональние, редко используемие команди — убираются. Про загрузить-посчитать-сохранить — ето Load-Store архитектура и ортогональна RISC. Например — ARM — Load-Store RISC. MSP430 — RISC, но не Load Store.
Тоже не совсем верно. Бывает и наоборот, когда одной инструкцией на RISC делается то, для чего на CISC потребуется 5.
Сравните, например, ARM:
addeq R0, R1, R2, lsl R3

и x86:
jnz @skip
mov eax, ebx
mov ecx, esi
shl eax, cl
add eax, edx
@skip:
UFO just landed and posted this here
еще одна жертва видящая все и везде minecraft :))))

П.С. нас всех вылечат :)
UFO just landed and posted this here
Хехе, схемота, родимая)
У нас на 12ой кафедре в МИФИ была курсовая, длившаяся год, на которой мы проектировали простенький процессор.
Это было самое интересное за весь период обучения.
Кому интересно, она даже сохранилась: вот она, вот она
Старайтесь избегать включения-выключения отдельных элементов путем прерывания тактового сигнала (т.н. clock gating). Схема, может прекрасно работать в эмуляторе, но когда придется учитывать задержки срабатывания логики, возникнет ситуация, что элементы тактируются несинхронно. Возможны многочисленные трудноуловимые баги.
Недаром все регистры, счетчики и т.д. имеют вход разрешения работы. Чтобы включить-выключить блок, используйте его.
Толковое замечание. Спасибо, никогда больше так делать не буду.
Ну, если честно, gated clock все-таки используется, но для других целей: например, для уменьшения энергопотребления.
Сейчас у меня как раз курсовое проектирование процессора согласно регламенту архитектуры IA-32bit. Статья — самое то. Огромное спасибо.
IA-32? Жестоко с вами поступили, однако.
На opencores.org есть проект процессора Zet: opencores.org/project,zet86
Может поможет. А так, могу только посочувствовать.
Чем же вы преподавателя обидели?
Вариант, что сам преподаватель не ведает что творит даже представить боюсь.
Возможно я что-то не так сказал — тогда извиняюсь.
Поясню: 32-х разрядное АЛУ собираем на 8 МПС К1804ВС2, 32-х разрядные регистры (около 10-15) собираем на 4 К1804ИР2. Это что касается принципиальной эл.схемы. В сумме около 150 микросхем вышло.
Сейчас я на стадии разработки алгоритмов, где всё организуется как раз таки на логических элементах, поэтому статьи такого рода на вес золота.
Очевидно, мой проект попроще будет, т.к. берутся «черные ящики» с выводами. Хотя это только предположение.
IA32 это определенный набор команд (100-150) с огромной кучей архитектурных особенностей, начиная просто режимами работы, заканчивая MSR'ами.
Так что это задача даже не на год, а на десятилетия :)
:D
Извиняюсь, забыл сказать, что по моральным убеждения конечно же мы не весь набор команд реализуем))
А мне почему-то кажется, что и за год можно клон i386 реализовать.
Если бы в университете объясняли так же как и вы, я бы обожал учиться! :)
Грустный и правдивый комментарий :(
Всегда интересовался рассказыванием интересных историй хорошим людям. Так что не стесняйтесь, обращайтесь. Было бы интересно узнать, что интересно людям, и рассказать этим людям об этом интересном.
А почему обозначения элементов не отечественные, а зарубежные?
Потому что Logisim сделан не в нашей стране, и потому что в нашей стране не сделан аналог Logisim. Такие дела.
Мировая интеграция. Нужно уметь читать обозначания потенциального противника принятые на 5/6 суши.
А создавать свои произведения тоже в импотрной нотации, чтобы потенциальные противники оттуда могли понять?
Это уже паранойя какая-то. Или отечественная жадность, не знаю даже, чего тут больше.
Это был сарказм, дорогой буржуй, не будьте столь серьезны.
Интересная статейка.
Помню с большим интересом изучал как сделали процессор на клеточном автомате типа игры жизнь. Он считает простые числа и рисует их на небольшом жк-экранчике.
От автора есть подробное описание как сделать ОРы, КСОРы регистры и прочую логику, а потом из этого склепать проц )
golly.sourceforge.net/gtk-primes.png
Давно искал подобную статью, во времена электротехники в институте — до процов там не дошли толком.
Вопрос не совсем про разработку собственного процессора, но по смежной теме — эмуляции цифровых схем.

Может быть кто-то может поделиться ссылками на литературу описывающую алгоритмы/подходы используемые для реализации компьютерных моделей цифровых цепей? (т.е. описывающую алгоритмы по которым работает Logisim).
Литературу подсказать не могу, к сожалению, но пару слов сказать — это можно.
Вариантов много. Можете моделировать на уровне «цифровая схема — это такой черный ящик». Эти черные ящики очень легко моделируются, а потом представляются графически (навроде блок-схем).
Можете моделировать на уровне «цифровая схема — это такая схема из транзисторов и прочей требухи». Тогда открываете справочник-учебник по МРЭС, читаете внимательно про математические модели резисторов, катушек, конденсаторов, диодов и транзисторов, а потом используя эти модели и хрестоматийные схемы логических устройств, делаете свой велосипед.
Второй вариант, как мне кажется, предпочтительнее. Он учитывает частотные и вольт-амперные характеристики элементов. То есть, например, можно будет реально наблюдать задержку в наносекунды при перекдючении элемента (а это очень важно)
Событийные модели. Посмотрите, например, семантику VHDL.
На счёт счётчика. На сколько я помню, флаг переполнения ставится только при обнулении (переход 11→00), а не по достижении 11. И если имеем 00 с флагом переполниния, значит таки оно произошло.
А у вас почему-то по достижении 11.
К сожалению, память вас подводит. В сумматорах флаг переполнения включается при обнулении, а вот в регистрах и счетчиках — при достижении наивысшего значения.
Переполнение регистра процессора и переполнение регистра или счетчика как дискретного элемента — это несколько разные понятия. Если вы возьмете реальный или виртуальный (например, в Logisim) счетчик с выходом переноса, то легко убедитесь, что на выходе P реально 1, когда в регистре максимальное значение. Я тоже был удивлен, когда узнал об этой особенности счетчиков и регистров.
По поводу счетчиков. Вы оба правы. Есть счетчики с отдельным выводом переноса, есть без.

74LS93 (КР1533ИЕ5) — двоичный счетчик. Отдельного выхода переноса не имеет, что не мешает его каскадировать.
74AC193 (КР1554ИЕ7) — реверсивный двоичный счетчик. Имеет два выхода тактовых сигналов прямого и обратного переноса. Устанавливается когда на всех выходах устанавливается высокий уровень.

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

Sign up to leave a comment.

Articles