Montando o circuito do registrador de endereço de memória (MAR)

Fala pessoal, tudo beleza?

No post de hoje vamos estudar o circuito do registrador de endereço de memória (MAR - Memory Address Register).

Esse registrador trabalha em conjunto com a memória RAM e é responsável por armazenar 4 bits que correspondem à um endereço dessa memória. Ele é uma parte fundamental nas operações de I/O da RAM.

Nesse circuito temos ainda um sub-circuito de seleção de modo de operação onde se seleciona entre execução ou programação.

No modo de operação de execução, na tarefa de leitura, o MAR recebe 4 LSB do BUS vindos do PC (Program Counter) e acessa o endereço representado por esses 4 bits na RAM (lembre-se de que nossa RAM tem 16 endereços de memória disponíveis). Essa, por sua vez, através do sinal RAM_OUT, disponibiliza o conteúdo de 8 bits desse endereço no BUS. Esse conteúdo pode ser um dado ou uma instrução (com OPCODE e OPERANDO).

Na tarefa de escrita, o MAR recebe os 4 LSB do IR (Instruction Register) e seleciona o endereço representado por esses 4 bits na RAM. A RAM, através do sinal RAM_IN, fica à espera de um conteúdo de 8 bits. Esses 8 bits são, então, lidos do BUS e armazenados na RAM, no endereço apontado pelo MAR. Com essa operação, percebemos a dinamicidade do BUS. Em um instante, temos trafegando por ele os 4 bits referentes ao endereço da memória e, no instante seguinte, eses 4 bits dão lugar aos 8 bits de dados (ou de instrução). É fantástico pensar que essa mudança ocorre em uma minúscula fração de segundo!

Percebe-se, também, que a tarefa de leitura é executada no ciclo de busca e a tarefa de escrita, no ciclo de instrução. Na tarefa de escrita, o IR recebe 8 bits vindos do BUS e "divide" esse byte em dois nibbles, um mais significativo e outro menos significativo (o OPCODE e o OPERANDO). O nibble mais significativo é repassado para o circuito de controle e é o OPCODE da instrução (que ainda vamos estudar) e o nibble menos significativo é devolvido ao BUS com destino ao MAR para seleção do endereço de memória que contém um dado ou a próxima instrução. Creio que isso ficará mais claro cuando estivermos estudando o circuito de controle. :)

No modo de operação de programação podemos escrever dados diretamente na RAM. Para isso, implementamos um circuito com dip-switches. Um deles, com 4 vias, é responsável por controlar o conteúdo do MAR e, assim, selecionar o endereço da RAM que receberá o dado. Esse dado é inserido através de outro dip-switch de 8 vias que é interconectado diretamente aos pinos de entrada dos integrados da memória RAM. Para gravar o dado na memória, utilizamos o sinal WE (Write Enable). Este sinal é um pulso que grava a informação no endereço selecionado. Em nosso circuito o pulso é gerado por um push button.

Para implementar os circuitos do MAR e de seleção, utilizamos os seguintes integrados: 1 x 74LS173 (registrador de 4 bits do tipo D com saídas tri-state), 3 x 74LS157 (quatro multiplexadores de 2 entradas) e 2 x 74LS00 (quatro portas NAND com duas entradas).

Como o MAR usa somente 4 bits, utilizamos somente um 173 que faz a interface entre o 157 e o BUS. Ele guarda o endereço de 4 bits vindo do BUS ou do dip-switch.

Um dos 157 foi utilizado para o controle do endereço do MAR. Ele recebe em suas entradas os 4 bits vindos pelo BUS e os 4 sinais vindos do dip-switch de 4 vias e, pelo sinal controlado por uma pequena chave HH, manda para sua saída uma dessas entradas. Suas saídas são interligadas aos integrados 189 da memória RAM e seu sinal de controle é a seleção do modo de operação execução ou programação.

Os outros dois 157 são utilizados para controlar o conteúdo de 8 bits da memória RAM, que pode vir do BUS ou do dip-switch de 8 vias.

E, finalmente, o 74LS00 é utilizado para implementar o sinal WE (Write Enable) da RAM, com base nos sinais de controle de seleção e do pulso gerado pelo push button. Utilizamos esse 74LS00 para implementar mais um multiplexador de duas entradas afim de economizar outro 157 (se colocar na ponta do lápis, usar o 74LS00 é mais barato do que usar o 74LS157). ;)

No próximo post trataremos do circuito de reset e escreveremos nosso primeiro programa para testar o computador! :D

Como é de costume, abaixo temos algumas fotos do computador.

Um forte abraço à todos e até a próxima!

Detalhe do circuito da memória RAM, do MAR e do circuito de seleção. Perceba os dois dip-switches utilizados para programar o computador. Os LEDs amarelos são utilizados para indicar o endereço selecionado no MAR.

Esta é a visão geral do computador até o presente momento. Agora falta pouco! :D

Comentários

Postagens mais visitadas