# RAM

Biblioteca: | Memória
Introdução: | 2.0 Beta 1
Aparência: |

## Comportamento

O componente RAM, certamente é o componente mais complexo nas bibliotecas predefinidas do Logisim, capaz de armazenar até 16,777,216 valores (especificado pelo atributo Largura em Bits do Endereço), cada um deles com até 32 bits (especificado pleo atributo Largura em Bits de Dados). Um circuito poderá ler e escrever os valores na RAM. O usuário também poderá modificá-los interativamente via a ferramenta Testar, ou poderá alterá-los completamente via a ferramenta Menu.

Os valores correntes serão mostrados no componente. Os endereços apresentados serão listados em cinza à esquerda. Na parte de dentro, cada valor será listado em hexadecimal. O endereço atual do endereço selecionado será mostrado em texto negativo (branco sobre preto).

O componente RAM oferece três interfaces diferentes, dependendo do atributo Interface de Dados.

Uma porta para leitura/escrita síncrona (padrão)

  O componente possui na sua face leste uma porta que servirá tanto para ler quanto para gravar dados. Qual a ação a ser executada dependerá da entrada marcada por ld: 1 (ou flutuante) indicará a leitura de dados do endereço informado pela face oeste, e 0 indicará a escrita dos dados entregues na porta. Para transmitir dados para dentro e para fora do componente, você precisará usar um componente do tipo Buffer Controlado, como ilustrado abaixo.

Uma porta para leitura/escrita assíncrona

  O mesmo descrito acima, exceto que não haverá participação do clock. O valor encontrado no barramento de dados será carregado na memória sempre que a entrada ld estiver em 0. Se, enquanto ld estiver em 0, o endereço ou os dados mudarem, então uma carga adicional ocorrerá. Essa opção é a que mais se aproxima de muitas das memórias de acesso aleatório comumente disponíveis.

Portas separadas para leitura e escrita

  Duas portas estão disponíveis - uma na face oeste para a escrita de dados, e outra na face leste para leitura de dados. Essa opção retirará a necessidade de se lidar com o Buffer Controlado e então ficará mais fácil de usar.

## Pinos

A Na face oeste (entrada, com largura em bits de acordo com o atributo Bits de Dados)
  Serve para selecionar quais os valores estarão sendo acessados atualmente pelo circuito.
D Na face oeste (entrada/saída, com largura em bits de acordo com o atributo Bits de Dados)
  Se essa entrada estará presente somente se "portas separadas para leitura e escrita" tiverem sido selecionadas pelo atributo Interface de Dados. Quando uma escrita for requisitada (via mudança do clock de 0 para 1 enquanto sel e str forem ambos iguais a 1 ou flutuante), o valor encontrado nessa porta será escrito na memória no endereço atualmente selecionado.
D Na face leste (entrada/saída ou saída, com largura em bits de acordo com o atributo Bits de Dados)
  Se sel e ld forem iguais a 1 ou flutuante, então o componente RAM emitirá o valor encontrado no endereço corrente por essa porta. Se houver uma porta para leitura/escrita, o valor lido nessa porta será escrito onde quer que o armazenamento seja requisitado.
str Na face sul (entrada, com largura de 1 bit)
  store: essa entrada estará presente somente se "portas separadas para leitura e escrita" tiverem sido selecionadas pelo atributo Interface de Dados. Se for 1 ou flutuante, um pulso de clock resultará na escrita dos dados encontrados na face oeste na memória (se a entrada sel também for 1 ou flutuante).
sel Na face sul (entrada, com largura de 1 bit)
  chip select: essa entrada habilita ou desabilita o módulo RAM por inteiro, caso o valor seja igual a 1, flutuante ou 0. Essa entrada destina-se primariamente para as situações em que houver múltiplas RAMs, mas somente uma delas deva estar habilitada em certo instante.
Triângulo na face sul (entrada, com largura de 1 bit)
  clock: essa entrada estará ausente quanto o atributo Interface de Dados for "uma porta assíncrona para leitura/escrita". Em outras circunstâncias, quando ld for igual a 0, e essa entrada variar de 0 para 1 (e sel for igual a 1, indefinido e clr for 0), então o valor no endereço atualmente selecionado será alterado para o valor presente no pino D. Enquanto a entrada de clock permanecer em 0 ou 1, no entanto, o valor em D não será escrito na memória.
ld Na face sul (entrada, com largura de 1 bit)
  load: serve para selecionar se a RAM deverá emitir (em D) o valor no endereço atual (A). O comportamento dessa saída estará habilitado se out estiver em 1 ou indefinido; se out for 0, então nenhum valor será colocado em D - mas se houver uma porta de leitura/escrita combinada, a escrita estará habilitada.
clr Na face sul (entrada, com largura de 1 bit)
  clear: quando for igual a 1, todos os valores na memória ficarão iguais a 0, independente do que estiver nas outras portas.

## Atributos

Quando o componente for selecionado ou estiver sendo acrescentado, os dígitos de '0 'a '9' poderão alterar o atributo Número de Entradas, Alt-0 até ALT-9 irão alterar o seu atributo Bits de Dados.

Largura em Bits do Endereço
  A largura em bits do endereço. O número de valores armazenados na ROM será 2Largura em Bits do Endereço.
Bits de Dados
  A largura em bits de cada valor individual na memória.
Interface de Dados
  Serve para configurar quais das três interfaces serão usadas para comunicar dados para dentro e para fora do componente.

## Comportamento da ferramenta Testar

Ver Testar memória no Guia do Usuário.

## Comportamento da ferramenta Texto

Nenhum.

## Comportamento da ferramenta Menu

Ver Menus pop-up e Arquivos no Guia do Usuário.

Voltar à Referência para bibliotecas