DEV Community

Renan Marquetti
Renan Marquetti

Posted on

Como construir um computador do zero - Introdução.

O que leva alguém a construir um computador do zero, nos dias atuais?

Eu comecei a programar relativamente tarde (por volta dos 24 anos), mas foi amor à primeira vista, me apaixonei logo de cara.

No começo da minha jornada de estudos, eu encontrei diversos desafios, mas pude ser agraciado com vitórias maiores ainda.

Sempre fui uma pessoa curiosa, constantemente buscava entender como o mundo em minha volta, desde o formar das gotas de chuva, até as questões profundas da alma humana (fique tranquilo, não vamos tão longe nestes artigos).

Com o computador não foi diferente, quando tinha meus meros 14 anos de idade, o pai comprou um computador para nós (eu e meu irmão), desde então sempre tive curiosidade de saber como tudo aquilo funcionava por baixo do capô.

Bem, o tempo foi passando, e uma década e pouco depois já estava aprendendo a programar.

Como todo começo, comecei por baixo e um pouco perdido.

Até que encontrei o canal do Fabio Akita, em especial um vídeo intitulado Aprendendo sobre Computadores com Super Mario (do jeito Hardcore++), um vídeo em que ele ensina a importância da base da computação.

Eu me apaixonei por tudo isso, percebi que a programação tinha uma verdade profunda, que valia a pena buscar, algo que me dava o prazer de continuar estudando, e fazia tudo aquilo valer a pena.

Foi meu primeiro contato com esse tipo de conteúdo, eu queria mais, infelizmente, devido a questões monetárias, fui obrigado a deixar isso para um segundo momento.

Até que, 3 anos depois, tomo conhecimento da UBL, era tudo o que eu precisava, foi o pontapé para eu tomar uma atitude e iniciar os meus estudos formais na ciência da computação.

A primeira matéria do curso é circuitos digitais.

Enquanto estudava, percebi que poderia unir diversos circuitos simples e construir algo maior e mais robusto.

Eu estava buscando um projeto para consolidar e validar os meus conhecimentos em circuitos digitais, nesse momento me lembrei da série do Bean Eater, na qual ele constrói um computador do zero usando componentes eletrônicos.

Era o projeto que eu estava buscando, caía como uma luva, tudo ficou ainda melhor quando, conversando com um grupo de programadores, tomei conhecimento de uma série inspirada nessa, só que em solo nacional.

A série em questão é a Construa um Computador de 8 Bits do Eng. Wagner Rambo, esta maravilhosa série, serviu de base para este projeto, com uma pequena diferença.

Wagner Rambo é um Engenheiro em Eletrônica, Computadores e Telecomunicações (sim, o cara é brabo demais), ou seja, todo o computador foi montado usando hardware, então tomei a liberdade e "convertemos" todos os componentes para usar apenas portas lógicas e flip flops.

Mentalidade

Apesar de ser um projeto mais verboso do que complexo, acho importante compartilhar um pouco da mentalidade que exercitei para executar este projeto.

Como já descrito acima, eu iniciei este projeto para consolidar e fixar os conhecimentos em circuitos digitais, então ele exige algum nível de conhecimento prévio (mais a respeito nas próximas seções).

Imagine que está preparando um carrinho de concreto, o que você precisa? Areia, cimento, brita e água, mas apenas isto não é o suficiente, você ainda tem que misturar tudo e esperar secar.

É com esta mentalidade que abordei esse projeto, e o conforto de saber que com isso estamos um passo mais próximo da excelência.

Introdução

Como encarar a leitura desse artigo?

Existem diversas formas de dissecar um assunto complexo, mas acredito que o ideal partirmos do todos para as partes.

Quero dizer que devemos primeiro tomar conhecimento dos principais conceitos que dão sentido e razão ao nosso projeto.

Então antes de botar a mão na massa devemos primeiro entender como a massa funciona, qual problema ela resolve, e porque veio existir.

Assim definiremos como cada pequena parte contribui para o todo.

Isto é essencial para não caminharmos como folhas ao vento

Conhecimentos prévios

  • sistema digitais

Para aprender sistema digitais eu recomendo fortemente o repositório da ubl: grade, vídeo, livros (recomendo)

Setup

  • Logisim Evolution

O Logisim Evolution é um software educacional para projetar e simular circuitos lógicos digitais, será a ferramenta base para desenvolver e simular o nosso projeto.

O software é bem intuitivo, mas existem diversos artigos e vídeos que o auxiliarão nesse aprendizado.

Eu recomendo começar lendo a documentação externa em seu repositório.

Conceitos base

aviso: não se preocupe com o que a caixa faz, mas qual problema ela resolve, primeiro se pergunte, porque? para depois se perguntar, como?

Calculadora VS Computador

Muitos acreditam que um computador é uma calculadora turbinada, mas nada poderia estar mais longe da verdade, esse conceito pode não ser trivial à primeira vista, por isso vamos nos debruçar um pouco sobre ele.

A calculadora e o computador têm propósitos diferentes, isso se deve ao fato de que cada um procura resolver um problema diferente.

A calculadora tem por objetivos calcular (nossa, quem diria, né), ou seja, você passa uma conta e ela te devolve um resultado, por exemplo, 5+2, ela devolve 7.

Calculadoras são de uso específico, elas não conseguem executar nenhuma operação que já não esteja implementada em sua arquitetura interna.

O que é um computador?

Um computador é bem diferente de uma calculadora, um computador serve para computar, ou seja, você consegue inserir um conjunto de instruções (o que chamamos de software) a fim de processar sobre uma entrada de dados e transformar em outra saída de dados.

Por exemplo, em um computador, é possível inserir um conjunto de instruções que lê uma entrada de dados e converte em sinal de som.

Todo software de música funciona assim.

Mas computadores não são capazes apenas de tocar música, o ponto central é que um computador é de uso geral e não específico, como uma calculadora.

É por isso que um computador consegue emular uma calculadora, mas uma calculadora não consegue emular um computador.

Computadores não são inteligentes.

Outro erro comum de pessoas leigas no assunto é achar que computadores são inteligentes.

À primeira vista, eu entendo a confusão.

Computadores têm habilidades que podem ser confundidas com inteligência, por exemplo, um computador tem memória superior à de qualquer humano, tanto em tamanho quanto em precisão (ela nunca se altera).

Computadores também conseguem efetuar cálculos matemáticos muito mais rápido que um ser humano normal, algo que pode ser confundido com inteligência.

Por mais que essas coisas chamem atenção, e sejam de fato impressionantes, elas por si só não tornam um computador inteligente.

Para ilustrar melhor, vamos tentar responder à seguinte pergunta: o que é a inteligência?

Essa pergunta é interessante por diversas razões, sendo essencial para levar esse pequeno debate a algum lugar viável.

Apesar de milênios de conhecimento e filosofia acumulados, o ser humano ainda não possui uma definição final do que seja inteligência, então todo e qualquer debate que envolva esse conceito será, no melhor dos casos, de ordem condicional.

Mas para responder à nossa pergunta (se um computador é inteligente ou não), não precisamos ir tão longe, apesar de um computador conter algumas características que parecem inteligência, ele reprova miseravelmente em outras características necessárias à inteligência.

Aqui podemos listar várias delas: autodeterminação, adaptação, etc...

Para facilitar, entenda que um computador sequer consegue resolver todos os problemas matemáticos (pesquise sobre o problema da parada), e por sua vez a matemática não consegue resolver todos os problemas humanos (tente usar matemática para calcular o que é a vida, boa sorte tentando).

A única coisa que realmente me impressiona hoje em dia em um computador é como algo tão efêmero e simples pode ser capaz de feitos impressionantes.

Resposta: por que nós ensinamos isso a ele.

Idiota rápido VS gênio lento

Quero aproveitar esse pequeno debate e fazer uma pequena (mas útil) comparação entre um computador e o cérebro humano.

Os computadores são essencialmente grandes idiotas, mas eles são muito rápidos e obedientes (um excelente idiota), o que os torna muito úteis para resolver diversos problemas triviais.

Já o cérebro humano é essencialmente um gênio, ele é capaz de entender conceitos complexos de forma profunda e possui uma capacidade real de criatividade, mas ele é lento.

Ambos têm o seu valor, portanto é necessário saber quando utilizar o idiota rápido e quando "conversar" com o gênio lento.

Uma pequena dica, o cérebro de modo geral é lento, isso quer dizer que o aprendizado deve ser feito também de forma lenta, portanto paciência é essencial para o bom aprendizado, não adianta pegar atalhos, "natura non facit saltus" (a natureza não dá saltos).

As 5 grandes partes do projeto

Agora estamos prontos para colocar as mãos na massa, mas antes tenho que deixar alguns avisos importantes.

Esse tutorial praticamente não utiliza abstrações, portanto nada de peças prontas ou outras facilidades, usaremos apenas portas lógicas e Flip Flops.

Isto diminui um pouco a carga teórica e aumenta a didática, mas de contrapartida acrescenta o trabalho, por isso reafirmo, esse artigo é para quem quer entender e desenvolver profundamente as bases da computação, e não simplesmente montar um computador.

Sistema de input

Este sistema é onde controlamos a entrada de dados do usuário, os seus componentes são:

  • sistema clock
  • sistema de reset
  • Read Only Memory (ROM)
  • Control Input Data

Sistema de memória

Aqui é o sistema que gerencia e armazena todos os dados do nosso computador, os seus componentes são:

  • Memory Address Register (MAR)
  • Random Access Memory (RAM)

Sistema Lógico e Aritmético

Aqui é onde os dados do sistema são processados, ou seja, é onde eles são transmutados de acordo com a operação escolhida (soma, subtração, etc.), os seus componentes são:

  • Arithmetic Logic Unit (ULA)
  • Acumulador (ACC)
  • Register B

Sistema de saída

Nesta parte do nosso projeto é onde nós convertemos e exibimos os dados que desejamos mostrar ao usuário do nosso computador, os seus componentes são:

  • Output Register
  • Converter Binary to Decimal

Sistema de controle

Aqui é a central de operações do nosso computador, todos os sinais do nosso computador são gerenciados aqui, estes são os seus componentes:

  • Program counter (PC)
  • Instruction Register (IR)
  • Controller

Finalização

Se você leu e entendeu até aqui, saiba que você já possui a completa essência deste projeto.

Agora vamos começar a botar a mão na massa e nos aprofundar um pouco mais em cada parte do projeto.

"A partir de um bruto diamante se lapida uma bela joia." Renan Marquetti.

próximo artigo

Agradecimentos

Um agradecimento especial aos meus pais, que me ensinaram a viver, e à minha esposa, que cuida de mim e da nossa família.

Não posso deixar de me esquecer de agradecer a Felipe Rocha Novaes e Sibelius Seraphini, que foram os primeiros a me encorajar a escrever artigos.

Top comments (0)