Вериги

Как да се изгради 8-битов компютър: 18 стъпки (със снимки)

Настя и сборник весёлых историй

Настя и сборник весёлых историй

Съдържание:

Anonim

Изграждането на 8-битов TTL компютър звучи като трудна и сложна задача, или поне за мен, когато започнах да пътувам, за да разбера архитектурата на основния процесор. Когато се стигне до това, процесорът е сравнително лесен за работа, след като научите фундаментите зад всичките му процеси. Този проект е предназначен да помогне на всеки, който се интересува от изграждането на собствен компютър и да придобие чудесните знания, които идват заедно с процеса. Не се страхувайте да опитате, можете само да научите.
Този проект ще започне с описание на основите на електрониката. След това ще бъдат описани основите на двоичната и булевата логика. Най-накрая ще преминем към функцията на различните части на един прост-възможно-компютър (с няколко модификации), както е описано в текста на Малвино. Цифрова компютърна електроника , Това означава, че крайният продукт на този Instructable ще бъде компютър, който можете да програмирате с уникален набор от инструкции. Този проект също така оставя много аспекти на дизайна на компютъра и служи като ръководство за изграждане на собствен компютър. Това е така, защото има много начини да се подходи към този проект. Ако вече имате добро разбиране на логическата логика и работата на бинарните, не се колебайте да прескочите до месото на проекта. Надявам се, че всички ще се радвате и ще получите нещо от подобна постройка, знам, че със сигурност го направих.
За този проект ще са ви необходими:
1.) Захранване
2.) Табла + много жици
3.) Светодиоди за изход
4.) Различни логически интегрални схеми (обсъдени по-късно)
5.) Свободно време
6.) Готовност да объркате и да се поучите от грешките
7.) Много търпение
Незадължително (но много полезно):
1.) Осцилоскоп
2.) Цифров мултиметър
3.) EEPROM програмист
4.) Sonic отвертка
Полезни връзки за проект като този:
Цифрова компютърна електроника:
http://www.amazon.com/Digital-computer-electronics-Albert-Malvino/dp/007039861
TTL Cookbook: http://www.amazon.com/TTL-Cookbook-Understanding-Transistor-Transistor-Integrated/dp/B0049UUV38

градина:

Стъпка 1: Какво е компютър?

Това може да изглежда като много опростен въпрос, който не се нуждае от отговор, когато всъщност е въпрос, на който много хора не знаят истинския отговор. Компютрите са съществували много по-дълго от транзистора в механична и теоретична форма. Действителната дефиниция на компютъра беше измислена от много интелигентен индивид от името на Алън Тюринг. Той описа една машина, наречена Машина на Тюринг. Всеки компютър, който използваме днес, от компютър или мобилен телефон, който четете от суперкомпютри, може да се класифицира като машина на Тюринг на най-опростено ниво.
Какво представлява машината на Тюринг? Машината на Тюринг се състои от 4 части: лента, глава, маса и държавен регистър. За да визуализирате работата на такава машина, първо трябва да си представите лента от филми, която се движи безкрайно във всяка посока. Сега си представете, че всяка клетка на тази филмова лента може да съдържа само един от определен набор от символи (като азбука). За този пример нека си представим, че всяка клетка може да съдържа само "0" или "1". Тези клетки могат да бъдат пренаписани безкрайно много време, но запазват информацията за неопределено време, докато не се променят отново. Частта от машината на Тюринг, известна като главата, може да пише символи към клетките, както и да увеличава или намалява нейната позиция върху лентата на филма от дадено цяло число (цялото число) на клетките. Следващата част е таблицата, която съдържа даден набор от инструкции за изпълнение на главата, като например "преместване на десните 4 клетки" и "поставяне на клетка на 1". Четвъртата и последна част от машината на Тюринг е нейният държавен регистър, чиято цел е да поддържа текущото състояние на машината. Състоянието включва инструкцията, както и текущите данни на лентата.
Така е проста работата на компютъра. Когато компютърът ви работи, той всъщност работи като машина за презапис. Тя обработва данните, съхранявани на вашия компютър, чрез даден набор от инструкции и алгоритми. Компютърът, описан в тази инструкция, е много опростен модел на компютър, но все още работи като такъв, който можете да програмирате с набор от инструкции, които ще следва и изпълнява.
Полезни връзки:
Уикипедия за машините на Тюринг:
http://en.wikipedia.org/wiki/Turing_machine

Стъпка 2: Въведение в електрониката

Преди да се изгради 8-битов компютър, е изключително полезно да разберете елементарните свойства на електричеството и аналоговите схеми. Има части на компютъра, които ще изградите ще се нуждаят от аналогови компоненти. Има много електроника самостоятелно обучение ръководства на разположение за минимални разходи, които осигуряват краш-курс в електротехниката. Аз лично намерих Ръководство за самообучение за електроника от Хари Кибет и Ърл Бойсен да бъде прекрасна книга за справяне със света на аналоговата електроника.
Ръководство за самообучение за електроника : http://www.amazon.com/Electronics-Self-Teaching-Guide-Teaching-Guides/dp/0470289619/
Общи компоненти:
Резистор - пределен ток, измерен в ома.
Capacitor - Магазин такса, може да бъде или полярна или не-полярна (полярна означава, че тя трябва да бъде поставен в правилната посока на работа). Измерва се в фаради.
Диод - позволява токът да тече само в една посока, разрушава се при определено напрежение, когато е поставен в грешна посока.
Транзистор - Текущ портал, който се контролира от трети щифт, който действа като медиатор. Има много видове транзистори, но тук ще говорим за BJT (биполярен транзистор), който се предлага в два вида: NPN и PNP.

Ток, напрежение и съпротивление вървят ръка за ръка в една верига. Връзката между трите може да се изрази със закона на Ом: V = IR. С други думи, напрежението е равно на тока в ампери, умножен по съпротивлението в ома. Законът на Ом е една от най-важните формули в електрониката и си струва да се знае, че е на върха на главата.
За да приложите закона на Ом трябва да знаете съпротивлението на веригата. За да намерите стойността на резистор, трябва да използвате неговия цветен код. Цветовият код на резистора се основава на видимия спектър и може да бъде запомнен в много различни моди. За тези, които не се интересуват да я запомнят, съществуват множество инструменти, които да ви помогнат да намерите правилната стойност на резистора. За да се изчисли общото съпротивление във верига се нуждаете от две формули за две различни конфигурации на резистори: серия и паралел. В серия един резистор следва другия, докато паралелно те работят един до друг. В серията формулата е много проста:
Резистори в серия: R (общо) = R (1) + R (2) +. , , + R (N)
Това означава, че просто трябва да добавите стойностите на резисторите.
Резистори паралелно: R (общо) = 1 / {1 / R (1) + 1 / R (2) +. , , + 1 / R (N)}
Добър инструмент за намиране на съпротива от цветен код: http://www.csgnetwork.com/resistcolcalc.html
По-лесно е да се разбере формулата за резистори паралелно, ако мислите, че резисторите работят заедно като двама души, работещи заедно по проект. Същата формула се използва за словни проблеми, при които се дава скоростта, с която работят двама души, и трябва да разберете колко бързо ще бъде завършен техният проект, ако работят заедно.
За да намерите колко ток се подава към даден компонент с дадена стойност на съпротивление, просто ще включите стойностите на съпротивлението и напрежението в закона на Ом и ще разрешите за I. Например:
Светлината е във верига и два паралелни резистора 1K (хиляда ома) са поставени пред него. При захранване от 9 волта, колко ток се подава към светлината?
1.) Изчислете R (общо):
R (общо) = 1 / (1/1000 + 1/1000) = 1 / (2/1000) = 1000/2 = 500 ома
2.) Изчислете тока, използвайки закона на Ом:
9 = I * 500
I = 9/500 = .018 A = 18 mA (милиампера)
Можете също така да организира резистори в схема за регулиране на напрежението. Това се нарича делител на напрежението и включва два резистора в серия. Изходното напрежение на двата резистора е на тяхното кръстовище. За по-добра идея, погледнете картината, която съм прикачил. При това положение формулата за изходно напрежение е:
V (out) = V (източник) * R (2) / {R (1) + R (2)}
Кондензаторите ще бъдат полезни във вашия компютър с изграждането на часовника. Часовникът е просто верига, която се включва и изключва с постоянна скорост. Както резисторите, така и кондензаторите имат две формули за намиране на общата стойност за двете серии и паралелни конфигурации.
Серия: C (общо) = 1 / {1 / C (1) + 1 / C (2) +. , , + 1 / C (N)}
Паралелно: C (общо) = C (1) + C (2) +. , , + C (N)

Скоростта, при която кондензатор такси, зависи от съпротивлението на веригата преди (или след, ако сте разтоварване) на кондензатора, както и неговия капацитет. Зареждането на кондензатор се измерва във времевите константи. Отнема 5 времеви константи за пълно зареждане или разреждане на кондензатор. Формулата за намиране на времевата константа на кондензатор в секунди е:
T (константа) = съпротивление * капацитет
Диодите са лесни за работа и са полезни при изграждането на TTL компютър. Те позволяват само токът да тече в една посока. Когато са поставени в правилната посока, те са онова, което се нарича предубедено. Когато се обърнат, те се разпадат при определено напрежение. Когато диод работи срещу тока, той е обратен.
Транзистор работи като клапан, който се управлява от ток. BJT има три пина: колектора, излъчвателя и основата. За простота в тази стъпка ще опиша NPN транзистор, в който токът тече от колектора към емитера. Токът, приложен към основата, контролира колко от тока тече от колектора към емитера. Транзисторите са идеални за много приложения поради способността им да усилват сигнала. Това е така, защото токът, прилаган в основата на транзистора, може да бъде значително по-малък от текущия. Това усилване на тока се нарича текущо усилване на транзистора или бета. Формулата за бета е:
Бета = Текущ (колектор) / Текущ (база)
Когато транзисторът е изцяло на него се казва, че е наситен. Булев транзистор е такъв, който е или в наситено или изключено състояние и никога между тях. Това е типът транзистор, с който ще се занимавате най-вече с цифровата електроника. Транзисторите образуват логическите елементи, необходими за функционирането на компютъра. Те ще бъдат описани по-късно.
Полезни връзки:
http://en.wikipedia.org/wiki/Resistor
http://en.wikipedia.org/wiki/Capacitor
http://en.wikipedia.org/wiki/Diode
http://en.wikipedia.org/wiki/Transistor

Стъпка 3: Двоични числа

Днес сме свикнали със световната система за номериране, която се основава на номер десет. С това искам да кажа, че нямаме цифра в нашата система с числа, която да е на стойност от десет и следователно нашата система с номера е базисна десет.
Мислете за нашата система за цифри като одометър. Одометърът брои от най-ниската цифра до най-високата цифра и след това принуждава следващия ротор в последователност, за да напредне едно място. Например:
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 0 <- Преминете към следващата цифра
Двоичният е основен два, което означава, че той има само две цифри и няма число за 2. Двоичен има само цифрите 0 и 1 или "изключен" и "включен". За да преброите в двоичен формат, просто приложите техниката на одометъра:
0001b - 1
0010b - 2
0011b - 3
0100b - 4
0101b - 5
0110b - 6
0111b - 7
1000b - 8
и т.н. , ,
Има и друг фактор от нашата система за номерация, която я прави десет; като се движим по-високи по цифри, теглото на цифрите се увеличава със сила от десет. Например 1 = 10 ^ 0, 10 = 10 ^ 1, 100 = 10 ^ 2 и т.н. , , В двоичните неща, разбира се, са две бази и като такива, всеки следващ номер е друга сила от две. 1b = 1 = 2 ^ 0, 10b = 2 = 2 ^ 1, 100b = 4 = 2 ^ 2 и т.н. , ,
За да конвертирате десетично число в двоично, има един прост трик, известен като двоен, който прави процеса по-лесен:
Да речем, че искаме да преобразуваме 13 в двоично число, започваме с разделяне на 13 на две и записване на остатъка. След това директно над него записваш полученото число без остатъка (в този случай 6) и го разделяш на две и записваш остатъка над предишния. Продължавате този процес, докато стигнете до 1 или 0. Накрая четете отгоре надолу, за да получите резултата.
1/2 = 0 R1 <Прочетете отгоре надолу. Резултатът е 1101 или 2 ^ 0 + 0 + 2 ^ 2 + 2 ^ 3 = 1 + 0 + 4 + 8 = 13. Това се нарича двоична дума.
3/2 = 1 R1 <
6/2 = 3 R0 <
13/2 = 6 R1 <
Шестнадесетичен се използва много често с двоичен код. Шестнадесетичен е основа 16 и съдържа цифрите 0-9 и a-f. Една шестнадесетична цифра се използва за описване на една хапка или четири бита данни. Бит е единичен 1 или 0 от двоичен. А хапването може да преброи от 0 до 15 (0000 до 1111), преди следващият бит да е в следващата хапка. Две хапки заедно са байт или 8 бита. Тъй като първата цифра е 2 ^ 0, последната цифра се претегля 2 ^ 7. Следователно един байт може да бъде навсякъде в диапазона от 0 до 255. За да се изрази байт 00101110 (46 в десетичен знак) в шестнадесетичен, първо трябва да се разделят двата nibble в 0010 и 1110. Първата хапка има стойност 2, а втората единият има стойност E (или 14 в десетичен знак). Затова байт 00101110 в шестнадесетичен би бил 2E.
Полезни връзки:
http://en.wikipedia.org/wiki/Binary_numeral_system
http://en.wikipedia.org/wiki/Hexadecimal

Стъпка 4: Логически порти

Компютърът се състои от хиляди логически порти, подредени да изпълняват определени функции. Логическият портал е компонент в цифровата електроника, чиято продукция зависи от състоянието на нейните входове. Повечето логически врати имат два входа и един изход. Можете да мислите за логическите врати като лицата, вземащи решения в цифровата електроника. Шестте основни логически порта, използвани в цифровата електроника са:
AND Gate: Изходът е висок, когато всички входове са високи.
ИЛИ Gate: Изходът е висок, когато някой от входовете му е висок.
NOT Gate: Има само един вход. Изходът е висок, когато входът е нисък.
NAND Gate: Изходът е висок, освен ако всички негови входове са високи.
NOR Gate: Изходът е висок, когато никой от входовете му не е висок.
XOR Gate: Изходът е висок, когато нечетен брой входове е висок.

Три-буферен буфер: Буфер, който се контролира от трети логически сигнал.
Важно е да се спомене сега разликата между висок "1" сигнал и нисък "0" сигнал. Високият сигнал може да бъде или връзка с положително напрежение, или може да бъде плаващ вход. Плаващ вход е такъв, който не е свързан с никакъв изход. Пример за плаващ вход ще бъде такъв, който не е свързан изобщо, или такъв, който е свързан с изхода на буфер с 3 състояния, който не е активиран. Нисък сигнал е наличен, когато входът е на земята.
Логическите врати могат да се подават един към друг, за да произвеждат почти всяка функция, която можете да си представите. Например, две NOR врати могат да се подават един към друг, за да се съхранява един бит данни в RS_NOR ключа, докато захранването се подава към веригата.

Стъпка 5: Двоично преброяване (брояч на програми)

Една от най-важните части на компютъра е нейният програмен брояч. Броячът на програмите предоставя на компютъра текущия адрес на инструкцията, която ще се изпълни. За да работи броячът на програмата, той трябва да се броят в двоичен формат. За тази цел се използват JK джапанки. Флип-флоп е подредба на логически порти, която съхранява един бит (подобно на ключалката RS_NOR, описана в стъпката на логическите порти). А JK флип-флоп промени състоянието си, когато си часовник импулс вход отива високо и след това отново ниско (J и K входа също трябва да бъдат високи). С други думи, когато JK флип флоп получава падащия ръб на часовника, неговото състояние се променя от "0" на "1" или от "1" на "0".
Ако свържете изхода на един JK флип флоп към друг и ги каскадирате, резултатът е двоичен брояч, който действа като одометър. Това е така, тъй като първият JK флип флоп в последователността върви високо, а след това нисък, той задейства следващия в последователността. Честотата на часовника (колко пъти се включва и изключва секунда) се намалява наполовина с всяко следващо добавяне на JK флип флоп. Ето защо един JK тригер също се нарича схема "разделям на две". Полученият модел за четири JK джапанки ще бъде 0000, 0001, 0010, 0011, 0100 и т.н. , ,
За компютъра, който може да бъде просто възможен, описан в тази инструкция, обаче, има още няколко функции, които са ви необходими, за да направите компютъра работещ. За да може компютърът да рестартира програмата си, той се нуждае от възможността да изчисти или настрои всичките си изходи на нула. Броячът на програмите също се нуждае от възможността да зареди двоична дума за JMP оп кода, който позволява на компютъра да премине към определена инструкция. За постигането на тази цел се използват логически порти. За щастие за нас двоичните броячи идват в удобни чипове с всички функции, от които се нуждаете.

Стъпка 6: Регистри

регистри:

Регистрите могат потенциално да бъдат най-важната част от компютъра. Регистърът временно съхранява стойност по време на работа на компютъра. 8-битовият компютър, описан в тази инструкция, има два регистъра, прикрепени към неговия ALU, регистър за съхраняване на текущата инструкция и регистър за изхода на компютъра.

В зависимост от чипа, регистърът ще има 2 или 3 контролни игли. Регистрите, които ще използваме, имат два контролни игли: изходно разрешаване и входно разрешаване (и двете активни, когато са ниски). Когато изводът разреши пин е свързан към земята в момента съхраняват двоична дума се изпраща през изходните пинове. Когато входният щифт е свързан към земята, бинарната дума, присъстваща на входните пинове, се зарежда в регистъра.

Пример за използване на регистър на компютър е акумулаторът на ALU (аритметична логическа единица, която изпълнява математически операции). Акумулаторът е като скречпака за компютъра, който съхранява изхода на ALU. Акумулаторът също е първият вход за ALU. Б регистърът е вторият вход. За операция по добавяне първата стойност се зарежда в акумулатора. След това втората стойност, която трябва да се добави към първата стойност, се зарежда в B регистъра. Изходите на акумулатора и Б регистъра са отворени и непрекъснато се подават в ALU. Последната стъпка за добавяне е да се прехвърли изхода на операцията в акумулатора.

Всички регистри работят на споделена линия с данни, наречена шина. Шината е група от жици, равна по брой на архитектурата на всеки процесор. Това наистина поставя коня пред количката, като се има предвид, че ширината на шината е определящото измерване за CPU архитектурата. Тъй като цифров 1 означава положително напрежение, а 0 означава заземяване, би било невъзможно всички регистри да споделят една и съща шина, без да им се даде възможност да селективно свързват и изключват от шината. За щастие за нас, има една трета държава между 1 и 0, която е амбивалентна на текущата imput, която работи чудесно за това. Влезте в буфер за три състояния: чип, който ви позволява да селективно свържете групи от проводници към автобус. Използвайки някои от тези три-буферни състояния, можете да имате всеки регистър и чип на целия компютър, който се нуждае от комуникация, да споделят същите кабели като шината. В случая с моя компютър това беше широка лента с 8 жици, която обхващаше долните щифтове на дъската. Експериментирайте наоколо с автобуси, тъй като те носят цялата информация от парче на парче в компютъра, а дефектният автобус може да означава грешни данни, които се вълнуват по линията.

Стъпка 7: ALU

ALU (аритметична логическа единица) на компютър е частта, която изпълнява математически операции. За компютъра SAP само ще трябва да има две функции: събиране и изваждане. Добавянето и изваждането в двоични произведения е много подобно на прибавянето и изваждането в десетични числа, например:
1 <- Носете 1 1 <- Носете бита
05 0101
+05 +0101
10 1010
За да добавите двоичен код, ние се нуждаем от това, което се нарича пълен суматор. Пълният суматор ефективно добавя един бинар към друг с носене и извършване. Пренасянето на пълен разширител е като трети вход за процеса на добавяне. Те се използват за веригиране на множество пълни събирачи. Извършването на пълен суматор се получава, когато в процеса на добавяне има двойка такива. Извършването на пълен разширител се подава в носещото устройство, за да се добавят няколко бита двоични. За да изградите пълен суматор, ви трябват две врати XOR, две И и врати.
За да извадим двоичното, трябва да преобразуваме число в неговия отрицателен контраст и да го добавим към числото, от което изваждаме. За да направим това, използваме това, което се нарича комплимент 2. За да вземете комплимента на 2 от двоична дума, вие инвертирате всеки бит (променяйте всеки 0 до 1 и всеки 1 до 0) и добавете един.
5 = 0101, -5 = 1010+1 = 1011
Не се използва -> 1 1
10 1010
+(-5) +1011
5 0101
За да контролираме инверсията на битовете, използваме XOR порта с един нормално нисък вход. При един нормално нисък вход, изходът е еквивалентен на другия вход. Когато настроите входния контролен вход, вие обърнете другия вход. Ако свържем тази инверсия с малко, изпратено до носенето на пълните събиратели, резултатът е операция за изваждане.

Стъпка 8: Програмирайте паметта и RAM

Програмната памет на компютъра ще съхранява инструкциите, които ще се изпълняват. Той също така ще действа като RAM, който може да съхранява стойности по време на работа на компютъра. Програмната памет се състои от три основни части: паметта, адресния регистър на паметта (MAR) и мултиплексорът. Паметта е чип, който има 16 байта за съхранение. Има 4-битов адрес, който се подава в паметта, който му казва кой байт трябва да чете или пише. MAR съхранява текущия адрес, за да може байтът да бъде прочетен или записан от паметта. Той постоянно се подава в чипа на паметта, освен ако компютърът не е в състояние на програмиране. Мултиплексорът ви позволява да избирате между два входа и да извеждате дадения вход. Мултиплексорът, използван в компютъра ви, ви позволява да избирате от два 4-битови входа (MAR и ръчно въвеждане). Когато компютърът е в състояние на програмиране, ръчният адрес се подава в паметта и ви позволява да програмирате байтове в паметта на компютрите на адреса, който дефинирате.

Стъпка 9: Регистър на инструкциите

Регистърът за инструкции на компютъра съхранява текущата инструкция, както и адреса, на който ще работи инструкцията. Това е много прост компонент с много важна цел. По време на работата на компютъра, съдържанието на даден адрес в паметта се прехвърля в регистъра на инструкциите. В компютъра ми най-лявите бита за fout са кодовете OP или текущата инструкция, която трябва да се изпълни. Правите четири бита, или най-ниските четири бита, казват на компютъра какъв адрес да се използва за операцията. Първите четири бита непрекъснато подават OP кода в контролната матрица, която указва на компютъра какво да прави за дадена инструкция. Най-десните четири бита се връщат обратно в компютъра, така че адресът може да бъде прехвърлен в MAR или брояч на програми.

Стъпка 10: Изходен регистър

Ако компютърът просто трябваше да захрани изхода на автобуса до оператора, показанието нямаше да има никакъв смисъл. Ето защо има изходен регистър, чиято цел е да съхранява стойности, предназначени за изход. Изходът за вашия компютър може да бъде или обикновен светодиод, който показва необработен двоичен файл, или може да имате дисплей, който чете действителните числа на седемсегментните дисплеи. Всичко зависи от това колко работа искате да поставите в компютъра си. За моя компютър използвам някои IV-9 руски Numitron тръби за изхода на моя компютър заедно с Arduino, за да направя преобразуването от двоичен към десетичен.

Стъпка 11: Часовник

Всяка част от компютъра трябва да бъде напълно синхронизирана, за да функционира правилно. За да направите това, вашият компютър се нуждае от часовник или верига, която има изход, който се включва и изключва с постоянна скорост. Най-лесният начин да направите това е да използвате 555 таймер. Таймерът 555 е изключително популярен таймер, който е изобретен в епохата на появата на компютъра, който е изключително популярен сред любителите днес. За да изградите веригата 555 трябва да знаете как се работи.
Първоначално часовникът на компютъра ви трябва да е сравнително бавен. 1 Hz или един цикъл в секунда е добра начална стойност. Това ви позволява да прегледате работата на компютъра и да проверите за грешки. 555 чипът се нуждае от два резистора и кондензатор за работа. Двата резистора определят колко дълго са високите и ниските импулси, както и общата честота. Кондензаторът променя дължината на импулса и за двете. Ако нямате опит с 555 таймери, препоръчвам да експериментирате с тях.
Полезни връзки:
http://en.wikipedia.org/wiki/555_timer_IC

Стъпка 12: Архитектура

Това е стъпката, където всичко идва заедно. Време е да проектирате архитектурата на вашия компютър. Архитектурата е как се организират регистрите и различните компоненти на вашия компютър. Аспектът на дизайна зависи изцяло от вас, въпреки че помага да се запази целта в ума (това, което искате компютърът да направи) и модел, от който да се размине. Ако искате да проектирате компютъра си след моя, това е напълно добре. Промених архитектурата на SAP-1, намерена в Цифрова компютърна електроника за моя 8-битов компютър.
Един аспект на дизайна, който винаги трябва да имате предвид, е как данните се прехвърлят между различните компоненти на вашия компютър. Най-разпространеният метод е да имате обща "шина" за всички данни на компютъра. Входовете и изходите на регистрите, ALU, брояч на програми и RAM са свързани към шината на компютъра. Проводниците са подредени по ред от най-малкия бит (1) до най-големия бит (128).
Всички изходи, които са свързани към шината, трябва да бъдат напълно изключени, докато са неактивни, иначе биха се сливали помежду си и биха довели до погрешно извеждане. За да направим това, ние използваме буфери с три състояния, за да контролираме изхода на някои елементи, които излизат по подразбиране като акумулатора, ALU и действителния вход за програмиране на компютъра.

Стъпка 13: Контролна матрица

Контролната матрица на компютъра указва на всяка отделна част кога да вземе вход и изведе своята стойност. Има няколко състояния на всяка операция в компютъра. Тези състояния се задействат от тип брояч, наречен брояч на пръстени. Един брояч на пръстени има само един бит висок по време и циклично преминава през своите изходи последователно. Например, ако броячът на пръстена има 4 изхода, той първо ще активира първия си изход. При следващия импулс той ще настрои втория си висок изход (и първия нисък). Следващият импулс на часовника ще повиши изходния бит на един изход и така нататък. Тези етапи се наричат ​​Т-състояния. Компютърът в тази инструкция използва 6 Т състояния за работа на една команда. Първите три Т състояния са това, което се нарича цикъл на извличане, в който се извлича текущата инструкция и се поставя в регистъра на инструкциите. Броячът на програмите също се увеличава с един. Втората група от три Т-състояния зависи от това кой OP код се подава в управляващата матрица от регистъра на инструкциите. Т-състоянията са следните:
T1: Съдържанието на програмния брояч се прехвърля в адресния регистър на паметта. (Състояние на адреса)
T
2: Броячът на програмите се увеличава с един. (Държава на инкремента)
T3: Адресният байт в програмната памет се прехвърля в регистъра на инструкциите. (Състояние на паметта)
T4: Зависи от това каква команда се изпълнява.
T5: Зависи от това каква команда се изпълнява.
T6: Зависи от това каква команда се изпълнява.
Има два основни начина за създаване на контролна матрица: използване на дискретна логика и използване на ROM. Методът ROM е най-лесният и най-ефективен. Използването на дискретна логика включва проектиране на масивна логическа схема, която ще изведе правилните контролни думи за вашия компютър въз основа на въвеждане на код на ОП. ROM означава памет само за четене. Има няколко вида ROM, които можете да помислите за използване във вашата версия. За моя компютър първоначално използвах EEPROM (електронно изтриваем програмируем ROM), но след това се преместих към NVRAM (енергонезависима памет с произволен достъп), след като EEPROM чиповете не успяха да напишат. Не препоръчвам NVRAM, тъй като е предназначен за памет с произволен достъп и не за постоянно съхранение. EEPROM е най-ефективното решение по мое мнение.
Контролната матрица ще има три ROM чипа, всеки от които има най-малко 32 адреса на 8-битово съхранение (както и елементи за отчитане на времето и отчитане). Двоичната дума, която се изпраща от контролната матрица, се нарича контролен ROM и съдържа всички контролни битове за всеки компонент на вашия компютър. Искате да сте сигурни, че ще организирате контролните битове и ще знаете техния ред. За никаква операция искате контролна дума, която прави всяка част от компютъра неактивна (с изключение на часовника, разбира се). Контролната дума за компютъра, описана в тази инструкция, е 16 бита по дължина и се съхранява в два от контролните ROM чипове. Първите три адреса на контролните ROM дискове държат контролните думи за цикъл на извличане. Останалите адреси на чипа държат контролните думи по двойки от по три за всеки код на ОП. Третият ROM чип съхранява мястото на паметта за началото на последователността на контролната дума за всеки код на ОП и се адресира от самия OP код. Например, в моя компютър, ако дадете на контрола ОП код 0110 ще излезе двоичен 21, който е адреса на началото на командата JMP. Има 8-битов брояч между OP ROM и управляващият ROM, който брои от 0-2 (първите три Т-състояния), след това върху третото Т-състояние зарежда адреса, който се извежда от ОП-ROM и брои от тази позиция, докато Т1 състояние изчиства брояча отново. Пръстенът и двоичният брояч за управляващата матрица се контролират от инверсия на тактовия импулс, така че контролните думи присъстват, когато нарастващият импулсен часовник отива към елементите на компютъра. Целият процес е следният:
1.) T1 състоянието изчиства брояча до 0, контролната дума, запаметена в 0, се изпраща
2.) Часовникът става висок и състоянието на адреса се извършва
3.) Часовникът отива ниско и на свой ред контролните броячи нарастват и контролната дума 1 се изпраща
4.) Часовникът става висок и се извършва цикълът на нарастване
5.) Часовникът изгасва и контролните броячи нарастват до 2, контролната дума 2 се изпраща
6.) Часовникът отива високо и състоянието на паметта се осъществява и ОП код пристига в регистъра с инструкции, T3 също е активен, което означава, че на следващия нисък часовник импулс OP адресът на контрола ще бъде натоварен
7.) Часовникът отива ниско и зарежда брояча с адреса за първата от трите контролни думи за дадения OP код
8.) T4, T5 и T6 изпълняват кода OP
9.) T1 нулира брояча, процесът продължава до получаване на HLT OP. Командата HLT спира часовника.

Стъпка 14: Микропрограмиране

Сега е частта, в която вие решавате какви команди искате да бъде вашия компютър. Дадох на компютъра си 6 уникални операции, които биха му дали основните функции за програмиране, от които се нуждая. Командите, които ще програмирате в компютъра, са това, което се нарича Асемблерен език. Събранието е един от най-ранните езици за програмиране и все още може да се използва на компютрите днес. Командите на езика включват зареждане на акумулатора, добавяне, преместване, извеждане и съхранение на променливи. Всяка команда има свой собствен 4-битов OP код в този 8-битов компютър. Командите, които избрах за моя компютър, са:
NOP: Няма операция. (0000)
LDA: Заредете акумулатора със стойността на този адрес. (0001)
ADD: Добавете стойността на указания адрес към стойността в акумулатора. (0010)
SUB: Извадете стойността на указания адрес от стойността в акумулатора. (0011)
STO: Съхранява съдържанието на акумулатора на посочения адрес. (0100)
OUT: Съхранява съдържанието на акумулатора в изходния регистър, за да може операторът да го види. (0101)
JMP: Преминете към определена инструкция в паметта на посочения адрес. (0110)
HLT: Спиране на работата на компютъра. (0111)
За да определите кои контролни думи трябва да бъдат изпратени за всяка операционна система, трябва да знаете кои бита трябва да бъдат активни по време на всяко състояние Т. За компютъра си организирах бита по следния начин (подчертаването означава активен-нисък бит):
CE CO J MI RO II IO OI BI EO SU AI AO RI HLT X
CE - Разреши брояча (активира часовника на брояча на програмата)
CO - Изключване на часовника
J - Разрешаване на прескачане
MI - MAR вход
RO - Програмиране на паметта
II - Регистър на инструкциите в
IO - регистър на инструкциите
OI - Изходен регистър в
BI - B се регистрира в
EO - активиране на изхода ALU
SU - Изваждане
AI - акумулатор в
AO - активиране на изхода на акумулатора
RI - Памет за програмиране в
HLT - Спиране
X - Не се използва
Ето какви бита трябва да са активни за всяко Т състояние за дадена инструкция, както и адреса, който те трябва да бъдат в контролния ROM:
Изважда:
0: CO, MI - броячът на програмата извежда в MAR
1: CE - броячът е разрешен за следващия часовник
2: RO, II - адресираният байт се извежда от RAM в регистъра на инструкциите
NOP:
3: X
4: X
5: X
LDA:
6: IO, MI - Адресът в регистъра на инструкциите се прехвърля към MAR (най-ниските четири бита)
7: RO, AI - Адресният байт се извежда от паметта в акумулатора
8: X
Добави:
9: IO, MI - Адресът в регистъра на инструкциите се прехвърля към MAR (най-ниските четири бита)
10: RO, BI - адресираният байт се извежда от паметта в акумулатора
11: EO, AI - Сумата на акумулатора и B регистъра се зареждат в акумулатора
SUB:
12: IO, MI - Адресът в регистъра на инструкциите се прехвърля към MAR (най-ниските четири бита)
13: RO, BI - Адресният байт се извежда от паметта в акумулатора
14: AI, SU, EO - Разликата на акумулатора и Б регистъра се зарежда в акумулатора
STO:
15: IO, MI - Адресът в регистъра на инструкциите се прехвърля към MAR (най-ниските четири бита)
16: AO, RO, RI - Акумулаторът излиза в програмната памет на адресното място (RO и RI трябва да бъдат активни за запис на използвания от мен чип)
17: X
OUT:
18: OI, AO - Акумулаторът излиза в изходния регистър
19: X
20: X
JMP:
21: J, IO - Регистърът на инструкциите зарежда програмния брояч с най-ниските си четири бита
22: X
23: X
HLT:
24: HLT - На часовника се изпраща сигнал за спиране
25: X
26: X
Вашият OP ROM съдържа кратни на три на всяко място в паметта. Това е, разбира се, защото всеки цикъл отнема три състояния на изпълнение. Затова адресираните данни за вашия ПП РП ще бъдат:
0 - 3
1 - 6
2 - 9
3 - 12
4 - 15
5 - 18
6 - 21
7 - 24
За да програмирате вашия избор на чип, имате много различни опции. Можете да си купите EEPROM и EPROM програмист, но те обикновено струват значителна сума пари. Аз построих програматор за моя ROM, който се управлява от движещи се кабели и контролира писането и четенето чрез бутони. По-късно опростих процеса и специално разработих програматор на Arduino за моя NVRAM. Аз ще прикачите кода, тъй като може лесно да се модифицира, за да програмира почти всеки паралелен чип с памет, който бихте използвали за този проект.

Стъпка 15: Покупка на части

Най-хубавото при изграждането на 8-битов компютър е, че повечето части ще ви струват по-малко от един долар на парче, ако ги закупите от правилното място. Купих 90% от моите части от Jameco Electronics и бях напълно доволен от техните услуги. Единствените части, които наистина съм си купил от където и да е другаде, са дъски за преливане и жици (и тръби Numitron). Те могат да бъдат намерени значително по-евтини на сайтове като Amazon. Винаги се уверете, че частите, които поръчвате, са правилните. Всяка част, която купувате, трябва да е налична онлайн информация, която обяснява всички функции и ограничения на елемента, който купувате. Уверете се, че сте запазили тези организирани, тъй като ще използвате много спецификации в конструкцията на вашия компютър. За да ви помогна с компютъра, ще изброя частите, които използвах за моя:
4-битов брояч:
74161 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74161&langId=-1&storeId=10001&productId=49664&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
4-битов регистър (използвам две за всеки 8-битов регистър):
74LS173 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS173&langId=-1&storeId=10001&productId=46922&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
2-1 Мултиплексор:
74LS157 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_46771_-1
16x8 RAM (изходът трябва да бъде обърнат):
74189 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74189&langId=-1&storeId=10001&productId=49883&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
Пълни добавки:
74LS283 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS283&langId=-1&storeId=10001&productId=47423&search_type=all&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
Три-държавни буфери:
74S244 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_910750_-1

XOR Gates:
74LS86 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295751_-1
И Гейтс:
74LS08 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295401_-1
NOR Gates:
74LS02 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283741_-1
Инвертори:
74LS04 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283792_-1
Брояч на позвънявания:
CD4029 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=4029&langId=-1&storeId=10001&productId=12925&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
JP джапанки:
74LS10 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295427_-1

Стъпка 16: Конструкция

Тук е мястото, където наистина идва търпението. Избрах да използвам макет за действителния компютър, но има и много други методи (като например обвиване с тел), които ще работят също толкова добре. За да направим нещата много по-прости, включих блокова диаграма за действителната схема на моя компютър. Аз обаче не включвах номера на части или номера на пиновете. Вярвам, че това ще направи нещата по-прости и отворени за творчество. Изходът на 4-битовия програмен брояч, изходът за MAR вход и регистъра на инструкциите са свързани към четирите най-важни битове на шината на компютъра.
Втората показана диаграма е контролната логика за операционния край на компютъра. Контролите са проектирани така, че превключвателите могат да бъдат вход за компютъра. RS_NOR ключалките са поставени пред превключвателите, за да ги деблокират. Превключвателите с превключватели често имат мръсни връзки, които могат да скачат от включено към изключено състояние и да осигурят повече импулси, отколкото искате. Добавянето на тригер към изхода на превключвателя елиминира допълнителните импулси. Това би било изключително полезно, когато използвате опцията за ръчен часовник. Вие не бихте искали да обърнете ключа и да инициирате 8 импулса. Бутонът за четене / запис записва активния входен байт в адресираната памет. Чрез промяна на входната дума за управление по подразбиране в RAM до два ниски RO и RI бита, които инициират цикъл на запис. Превключвателят за изпълнение / програма се променя кой вход е активен на адресния мултиплексор на паметта. В JK флип флоп след 555 означава, че когато компютърът се изпълнява, той няма да започне в средата на часовника импулс. Нисък HLT сигнал ще спре часовника да премине или на ръчния часовник, или на 555. И накрая, превключвателят за пускане / изчистване е свързан с всички ясни игли на компютъра, като тези на регистрите и броячите.

Стъпка 17: Програмиране

Сега, когато компютърът е готов, той може да бъде програмиран да изпълнява инструкции. За да направите това, първо трябва да поставите компютъра в неговата програмна настройка, като завъртите превключвателя за стартиране / програма в програмната позиция. След това избирате адреси, започвайки от 0 и отивате на 15 и вмъквате необходимите данни за вашата програма. Например, за да започнете с 5 и добавете 4 с всеки изход, програмата ще бъде както следва:
Адрес - данни:
0000 - 00010111 LDA 7: Заредете акумулатора със стойността, съхранена на адрес памет 7 (5)
0001 - 00101000 ADD 8: Добавяне на стойност, запаметена на адрес памет 8 (4)
0010 - 01010000 OUT: Изведете акумулатора
0011 - 01100001 JMP 1: Преминаване към инструкция 1
0100 - X
0101 - X
0110 - X
0111 - 00000101 5
1000 - 00000100 4
1001 - X
1010 - X
1011 - X
1100 - X
1101 - X
1110 - X
1111 - X

Стъпка 18: Отивате по-нататък

Надявам се, че ти се наслаждаваше на тази инструкция и най-вече се надявам, че имаш нещо от това. Можете да разгледате всички тези трудни работи невероятно ценен опит, който ще ви даде по-добро разбиране на електрониката, компютрите и програмирането. В края на краищата ще имате и нещо много хубаво да се покаже за цялата си упорита работа.
След изграждането на първия 8-битов компютър можете да отидете по-далеч и да добавите повече функционалност. Използваната в този компютър АЛУ е много опростена в работата, а истинските ALU днес имат безброй функции като прехвърляне на битове и логически сравнения. Друг важен аспект за преминаване е условното разклоняване. Условното разклоняване означава, че инструкцията зависи от текущото състояние на флаговете, зададени от ALU. Тези флагове се променят, тъй като съдържанието на акумулатора става отрицателно или е равно на нула. Това дава възможност за много по-голяма възможност за прилагане на вашия компютър.
Ако имате някакви въпроси относно този проект, можете да коментирате тази инструкция или на моя уебсайт на адрес http://8-bitspaghetti.com. Пожелавам ви най-много късмет с този проект.

3 човека направиха този проект!

  • JamesP383 го направи!

  • xdola го направи!

  • Реалът го е направил!

Направихте ли този проект? Споделете го с нас!

Препоръки

  • Стар лаптоп за компютърни изображения от стар лаптоп

  • Digi-Comp II реплика

  • Клас "Интернет на нещата"

  • Цветове на конкурса Rainbow

  • Конкурс за научна класа

  • Конкурс за фендоми

173 Дискусии

0

AtomicFerryt

Преди 1 година

Мислите ли, че можете да направите цифрова схема за дънната платка? Никога не съм използвал макет преди, но съм дълбоко заинтересован от старите компютри.

0

FarsinHamza

Преди 1 година

Едно от красивите инструкции, които някога съм виждал …. Оценявам вашето търпение … :)

0

bob491

Преди 1 година

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

0

champ12345

Преди 1 година

изглежда малко сложно

0

mkpeker

Преди 1 година

хубава сграда. може да искате да проверите най-простия 4 bit ttl cpu (MP-4), за да разберете основите:

http://www.instructables.com/id/Simplest-4-Bit-TTL-CPU/

0

mkpeker

Преди 2 години

хубав проект може да искате да проверите ми;

Най-после моят тип монитор тип OS (с вграден асемблер и разглобяващ елемент) е готов
Моля, настройте и опитайте този v1.0b
можете да намерите цялата необходима информация в моите Efex страници;

http://mkpeker.wixsite.com/efex

Моля, изпратете ми вашите коментари, отколкото мога да подобря софтуера
Благодаря ти

0

TheMrCode

Преди 2 години

Какво ще стане, ако сте го направили с помощта на светодиоди вместо проводници. можеше да види къде вървят сигналите

0

GeorgeW134

Преди 2 години

Как бихте програмирали изявление ако?

2 отговора 0

JuliaS87GeorgeW134

Отговор преди 2 години

Не се нуждаете от нов операционен код. Това, от което имате нужда, е стойност, която представлява true и false като 1 и 0. Вие зареждате тази стойност в акумулатора и изваждате 1. След това правите условен скок. Ако стойността е 1 (вярно), изваждането ще предизвика препълване и изпълнява условния скок. Ако стойността е 0 (невярна), няма преливане и следователно няма скок.

0

calebj20GeorgeW134

Отговор преди 2 години

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

4 - 10 = -6 -> -6 е отрицателно, така че всеки клон с N бит, зададен на 1, ще скочи

сглобяване: BRN RA Това ще се разклони на отрицателно към място, съхранено в A

двоичен, ако се приеме, че операционният код е 1000: 10001000

Където това е битовата разбивка на операционния код

BR: 1000

N: 1 | 0

Z: 1 | 0

P: 1 | 0

0: 0 | 0

Също така, ако искате да го направите по-гъвкав, можете да опитате да добавите възможността B да зададе стойността на шината, след което последният бит '0' може да бъде за A или B, съответно 0 или 1. t

0

T0BY

Преди 2 години

Crikey, имаш малко търпение!

0

SuperNovaa41

Преди 2 години

Имам въпрос. Всички части в списъка са с изключение на 2.
буферите от три състояния и jk flip flops
Имаше различен уебсайт със същия модел като три-състоятелните буфери
но
не е JK флип флоп замяна, трябва да се използва точно
същия модел, какъвто сте изброени, или мога да използвам друг модел? и ако е така кой
модел трябва да използвам?

0

SuperNovaa41

Преди 2 години

Хей! Знам, че това е по-стар пост, но може ли да ми дадете някои актуализирани връзки за буферите Tri State и JK Flip Flops? Опитах се да изследвам продуктите, но не знам кои модели да използвам. Благодаря предварително!

0

BartH19

Преди 2 години

Интересувам се от правенето на прост CPU, който мога да използвам за въвеждане на LED или дори LCD екран. Това ли е проектът за мен или можеш да ме насочиш в по-добра посока?

Аз съм пълноценна новачка в това. Аз съм дърводелец, който се опитва да направи някакъв дървен компютър!

5 отговора 0

FinnW3BartH19

Отговор преди 2 години

Вместо да изграждате CPU, трябва просто да изградите компютър с дървена кутия. Компютрите може да струват доста, но всъщност можете да ги получите под $ 300. Опитайте да използвате този сайт: pcpartpicker.com

0

BartH19FinnW3

Отговор преди 2 години

Благодаря за това. Надявам се, че има части, достатъчно тънки. Искам да е като калкулатор за думи. Ще проверя връзката: D

0

KyleF45BartH19

Отговор преди 2 години

Ако всичко, което искате да направите, е да действа като калкулатор, може би искате да погледнете Raspberry Pi. Ще бъде много по-малък и по-евтин, Pi's са като размера на телефона.

0

KyleF45KyleF45

Отговор преди 2 години

Сега, когато мисля за това, Pi може да направи почти всичко, което може да направи пълният настолен компютър, но е много по-малък. Вероятно има някакъв софтуер, който можете да използвате за него.

0

BartH19KyleF45

Отговор преди 2 години

Благодаря ви за отговора: D

Скоро след оригиналния ми коментар всъщност намерих този човек: http: //www.etsy.com/shop/writeotron? Ref = unav_lis …

Ще работим заедно по нова. Това е Пи!

0

bharathis

Преди 2 години

Неговата прекрасна и окуражаваща ме да направя своя собствена ..

сигурен съм, че ще натисна "Аз го направих". Струва ми се да го изградя. хе хе неговата страхотна цифрова електроника