Alt-F4 #24 - Criando Memórias  19-02-2021

Escrito por pocarski, editado por stringweasel, Nanogamer7, Conor_, Therenas, Firerazer,
traduzido por FeLLPS

Índice

Esta semana, estamos dando sequência ao artigo de pocarski da semana passada que era sobre como construir um computador dentro da Factorio usando apenas esteiras. Desta vez, estamos tentando ensiná-lo a lembrar das coisas. Vamos ver no que isso da.

Computação somente de esteiras, Parte 2: Nunca esqueçer pocarski

Esta semana, continuarei com a sequência do meu artigo sobre computação somente de esteiras. Aconselho fortemente que volte à publicação anterior para uma dar uma recapitulada .

Uma nota curta antes de começarmos: durante a semana Discord, o usuário BlueCheetah#7844 fez melhorias significativas no layout do meu circuito somador, ele agora é um pouco mais longo, mas com quatro blocos de largura. Aqui está uma imagem dele fazendo a mesma matemática da semana passada:

Somador melhorado

Agora que tiramos isso do caminho, vamos ao que interessa. Da última vez, exploramos a adição de números usando apenas esteiras e divisores e esta semana veremos algo tão importante quanto quando se trata de computação: a memória. A capacidade de somar números é excelente, mas, em última análise, inútil se não houver formas de se armazenar as instruções ou o resultado. Dentro de uma CPU, os resultados da adição são lembrados e, após alguma manipulação, retornados aos mesmos somadores que acabaram de calculá-los. Isso permite a realização de praticamente todas as operações matemáticas imagináveis.

Assim como na semana passada, todos são bem-vindos para experimentar prática com o livro de diagrams que possui todos os circuitos deste artigo.

O multiplexador

Para começar, nós iremos introduzir um novo circuito: o multiplexador. Um multiplexador tem duas entradas de dados A e B, uma entrada de ponteiro P e uma saída O. Aqui está a tabela verdade deste multiplexador (“-“ significa que a entrada não afeta a saída):

A B P O
0 - 0 0
1 - 0 1
- 0 1 0
- 1 1 1

Entrada P efetivamente escolhe qual das entradas de dados deve ser passada para a saída. Se P é 0, nossa saída será igual ao valor de A, e se ela for 1, nossa saída será o valor de B. Agora, para construí-lo faremos uso de portas E. Elas nos permitem uma entrada para ignorar. Nós podemos escolher se queremos passar uma entrada ou não simplesmente ao habilitar ou desabilitar a outra entrada da porta. Com isso em mente, nós podemos reinterpretar o multiplexador como (A E NÃO P) OU (B E P). Todos são elementos dos quais já somos familiares, o que significa que o multiplexador pode ser construído assim:

Este é simplesmente um circuito NÃO-duplicador e duas portas AND. Também precisamos de alguns trocadores de itens, para combinar todos os tipos de itens de entrada e saída.

Célula básica de memória

De início, células de memória soam como algo muito complicado. Um circuito que memoriza uma entrada? Com certeza isso deve ser alguma forma de armazenamento, mas como se gera uma saída sem que o armazém esvazie? É aqui que nosso novo amigo multiplexador entra. O que acontece se colocarmos a saída em loop por volta de todo o circuito e alimentarmos sua própria entrada A? A resposta é: acontece mágica!

Como podo ver, com está única mudança nós transformamos o multiplexador em uma célula de memória muito básica. O que costumava ser a entrada B agora chama-se entrada de dados da célula de memória e o que costumava ser a entrada P agora é uma entrada de escrita. O circuito não em uma saída, já que esta está em loop, portanto resolvemos isso ao adicionar um duplicador (e também combinando um trocador com uma porta E, assim como fizemos da última vez):

O circuito que acabamos de construir é chamado de Flip-flop tipo D. Ele tem duas entradas: D para “Dados” e E para Habilitar. Diferente do que em computadores eletrônicos, temos que manter a entrada E ligada por um bom tempo já que os itens precisam viajar todo o caminho de volta ao começo para que a saída estabilize. Entretanto, o flip-flop tipo D tem um problema significativo de que enquanto a entrada E estiver ligada a saída copia completamente a entrada D, o que efetivamente transforma a coisa toda em um fio enfeitado. Então precisamos garantir a estabilidade da saída e para isso precisamos de algo mais simples que o flip-flop tipo D.

Célula de memória mestre-escravo

Muitos problemas podem ser resolvidos simplesmente por construir outra cópia e o problema do flip-flop tipo D não é exceção. Podemos duplicar e inverter a entrada E e alimentar sua inversora na entrada habilitar de outro flip-flop tipo D. Então podemos fazer a saída do primeiro flip-flop alimentar a entrada de dados do segundo. A inversão é feita ao introduzir um terceiro tipo de item que é sobrescrito pela entrada habilitar. Assim como na semana passada, os dois lados das esteiras chegam para o resgate e, não precisamos construir uma cópia completa mas sim apenas usar alguns loopings espertos.

Esse sistema de flip-flop duplo é como uma escadaria para nosso valor de dados, onde permite o primeiro passo quando entrada E é acionada e permite a sequência apenas depois que ela é desativada. Isso protege a saída de mudar até que o ciclo esteja completo. Agora podemos rearranjar tudo para tornar o módulo compacto:

Interestingly, it has the exact same dimensions as last week’s adder module (or it used to until BlueCheetah came along). Talk about a satisfying coincidence!Curiosamente, ele tem exatamente as mesmas dimensões do módulo adicionador da semana passada (ou tinha até o BlueCheetah aparecer). Fale sobre uma coincidência satisfatória!

Note final

Agora que temos um somador e memória estamos prontos para construir uma CPU. Claro, precisamos de clock para fazer tudo funcionar, mas isso é tão simples quanto uma esteira cheia pela metade com um duplicador. A unidade lógica aritmética (ALU) é apenas um monte de somadores retornando a si mesmos por meio de um registrador, que em si é apenas um monte de células de memória. Meu conhecimento de ciência da computação não é extenso o suficiente para explicar tudo, então considere visitar letao12 no YouTube, pois foi sua série que me inspirou para dar uma chance a essa lógica baseada em esteiras.

Contribuindo

Como sempre, estamos procurando pessoas que queiram contribuir com o Alt-F4, seja enviando um artigo ou ajudando com a tradução. Se você tem algo interessante em mente que deseja compartilhar com a comunidade de uma forma refinada, este é o lugar para fazê-lo. Se você não tiver certeza sobre isso, teremos o prazer de ajudar discutindo ideias de conteúdo e questões estruturais. Se você se identifica com essa situação, junte-se ao nosso servidor no Discord para começar!