Memórias, capacidade e descodificação

Organizar RAM e ROM, agregar chips e determinar mapas de endereços e aliases.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Uma memória com 4096 posições guarda 4 KiB se cada posição tiver um byte, mas 8 KiB se tiver dois. O endereço seleciona uma posição e a largura diz quantos bits essa posição guarda, por isso antes de calcular a capacidade identifica ambas as grandezas.

Tipos e interface

RAM permite ler e escrever posições por endereço, enquanto ROM é usada para conteúdo fixo ou alterado por um procedimento especial. SRAM mantém bits em circuitos enquanto tem alimentação; DRAM guarda carga em condensadores e requer refresh. Ambas são voláteis, ao passo que Flash é não volátil, mas a escrita e o apagamento têm regras diferentes de uma RAM.

Uma célula SRAM típica usa seis transístores, com armazenamento estável e acesso controlado. Uma célula DRAM típica usa um transístor e um condensador: a carga perde-se com o tempo e a leitura requer reposição, por isso o controlador faz refresh. Menos elementos por bit permite maior densidade, mas exige esse controlo adicional.

Uma ROM de máscara tem conteúdo definido na fabricação. PROM permite programação; EPROM pode ser apagada com luz ultravioleta; EEPROM pode ser apagada eletricamente. Flash também é apagada eletricamente, habitualmente por blocos. Para firmware atualizável é preciso memória não volátil reprogramável, não uma SRAM que perde conteúdo quando desligada. Estas tecnologias têm limites de escrita; não assumas que a possibilidade de reprogramar é ilimitada.

Registos, caches, RAM e armazenamento formam uma hierarquia que procura combinar acesso rápido, capacidade e custo; não confundas persistência com velocidade, pois sobreviver à falta de alimentação não implica acesso tão rápido como um registo.

O acesso aleatório permite selecionar diretamente uma posição. Uma memória de acesso sequencial impõe uma ordem de acesso. Numa memória associativa, CAM, pesquisa-se um conteúdo e obtém-se a posição correspondente.

Num chip, CS seleciona, OE habilita a saída e WE habilita a escrita; uma barra ou bolha indica controlo ativo a 0. Uma saída desativada pode ficar em alta impedância, Z, para não conduzir o barramento; Z não é um terceiro valor guardado na célula. Nunca atives simultaneamente dois chips que conduzem dados diferentes no mesmo barramento.

Capacidade

Um chip 2a×w2^a\times w tem aa linhas de endereço e ww linhas de dados, e guarda 2aw2^aw bits. A definição separa as duas grandezas: aa escolhe a posição e ww diz quantos bits cada posição guarda.

Um chip 4K×84\text{K}\times8 tem 2122^{12} posições e guarda 4096 bytes, ou 4 KiB. Um chip 4K×164\text{K}\times16 tem as mesmas 12 entradas de endereço, mas cada posição guarda o dobro: 8 KiB. O número de posições é igual; a capacidade difere porque a largura é diferente.

Uma memória de 24 bits de endereçamento ao byte tem 2242^{24} bytes, ou 16 MiB. Com endereçamento à word de 32 bits, os mesmos 24 bits escolhem 2242^{24} words: 64 MiB. A capacidade muda porque mudou a unidade endereçada. Um barramento de dados de 32 bits, por si só, não transforma um espaço endereçado ao byte em endereçamento à word. Indica sempre a organização usada.

Alargar e aprofundar

Queremos 8K×168\text{K}\times16 a partir de chips 4K×84\text{K}\times8. Para a largura, colocamos dois chips em paralelo: um guarda os bits 7:0 e outro os bits 15:8, recebendo o mesmo endereço e controlo.

Para duplicar a profundidade, precisamos de dois destes pares. As 12 linhas inferiores vão a todos os chips e A12A_{12} escolhe o par. São quatro chips em dois bancos de 16 bits; a capacidade é 8192×16=1310728192\times16=131072 bits, ou 16 KiB. Não multipliques o número de linhas de endereço pelo número de chips.

Cronograma de leitura e escrita

Neste exemplo CS, OE e WE são ativos a 1. A tabela descreve passos de uma interface didática; num chip real, o datasheet determina o flanco de escrita e os tempos mínimos de estabilidade:

PassoCSOEWEEndereçoDadoEfeito
leitura 1110A estávelZ→D(A) após acessosaída conduz após tacct_{acc}
leitura 20indiferente0indiferenteZchip desselecionado liberta o barramento
escrita 1100A estávelD estávelprepara endereço e dado
escrita 2101A fixoD fixopulso escreve; OE=0 evita conflito

Mudar o endereço durante WE=1 escreve na posição errada. Nunca atives dois chips com dados diferentes no mesmo barramento.

Mapa de endereços

Num sistema com endereços de 16 bits, queremos colocar uma RAM de 4 KiB em 0x8000 a 0x8FFF. Os 12 bits inferiores escolhem a posição interna. Os quatro superiores têm de ser 1000 para selecionar o chip, com

CS=A15A‾14A‾13A‾12.CS=A_{15}\overline A_{14}\overline A_{13}\overline A_{12}.

O primeiro endereço tem todos os bits inferiores a 0; o último tem-nos a 1. São 0x1000=40960x1000=4096 endereços, contando as duas extremidades. Um bloco de 2122^{12} bytes deve começar numa fronteira com os 12 bits inferiores a 0 para esta descodificação simples.

Se só descodificarmos A15=1A_{15}=1, ignorando A14,A13,A12A_{14},A_{13},A_{12}, o chip aparece repetido de 0x8000 a 0xFFFF. Por exemplo, 0x8123=1000 0001 0010 0011 e 0x9123=1001 0001 0010 0011 diferem apenas em A12A_{12} e acedem à mesma posição interna 0x123; são aliases, pois a descodificação parcial não criou mais armazenamento. Alterar por um endereço é visível pelo outro.

Na intercalação por endereços pares e ímpares, A0A_0 seleciona o banco e os restantes bits selecionam a posição dentro dele. Isto é diferente de usar o bit mais alto para colocar um banco depois do outro no mapa.

Erros de memória

Um bit de paridade permite escolher paridade par ou ímpar. Com paridade par, 10110010 já tem quatro bits 1, por isso o bit adicional é 0; se mudar um bit, a paridade denuncia o erro, mas se mudarem dois, pode não o detetar, e também não identifica qual bit corrigir.

Um código SECDED acrescenta redundância que permite corrigir um erro de um bit e detetar erros de dois bits no modelo desse código. Não generalizes essa garantia a qualquer número de erros. Capacidade útil e capacidade física com bits de verificação podem ser diferentes.

Exercícios

Profundidade e largura

Constrói 16K×32 a partir de chips 4K×8. Quantos chips e que bits selecionam o banco?

Pista

A largura exige quatro chips por banco.

Mais uma pista

16K tem 14 bits de endereço; cada chip recebe 12.

Solução

São quatro chips em paralelo por banco e quatro bancos em profundidade, total 16 chips. A0..A11 vão a todos; A13,A12 alimentam um descodificador 2:4 que habilita só o banco escolhido. Cada banco entrega 32 bits por endereço. Capacidade útil: 16K×4=64 KiB.

Confere a tua resposta:

  • Quatro chips em paralelo por banco e quatro bancos, total 16.
  • A13,A12 selecionam o banco; A0 a A11 endereçam cada chip.

Erros frequentes

Não ligues todos os bancos ativos no mesmo barramento, porque dois bancos a conduzir dados diferentes entram em conflito.

Voltar à explicação
Uma escrita em dois endereços

Num sistema de endereços de 16 bits, um chip de 2K×8 recebe A0..A10 e CS=A15. Quais são a capacidade física e os endereços equivalentes a 0x8123 dentro da região selecionada?

Pista

A11..A14 são ignorados pelo chip e pela seleção.

Mais uma pista

A posição interna é 0x123.

Solução

A capacidade física é 2048 bytes. Os aliases são 0x8123,0x8923,0x9123,0x9923,0xA123,0xA923,0xB123,0xB923,0xC123,0xC923,0xD123,0xD923,0xE123,0xE923,0xF123,0xF923. Diferem só nos quatro bits ignorados, em passos de 0x800. A região selecionada tem 32 KiB de endereços, mas só 2 KiB distintos.

Confere a tua resposta:

  • Capacidade física 2 KiB.
  • Identifica 16 aliases em passos de 0x800 com offset 0x123.

Erros frequentes

Não tomes o tamanho da região de aliases como capacidade nova.

Voltar à explicação
Selecionar um bloco

Escreve CS ativo a 1 para um chip de 8 KiB colocado em 0x4000..0x5FFF num sistema de 16 bits. Indica as linhas internas.

Pista

8 KiB usa 13 bits inferiores.

Mais uma pista

O padrão superior A15..A13 é 010.

Solução

CS=A‾15A14A‾13CS=\overline A_{15}A_{14}\overline A_{13}. A0..A12 selecionam os 8192 bytes internos. O intervalo começa com os 13 bits baixos a zero e termina com todos a 1. A expressão não depende de A12, porque este ainda pertence ao endereço interno.

Confere a tua resposta:

  • Seleciona padrão superior 010.
  • A0 a A12 são endereçamento interno.

Erros frequentes

Descodificar um bit interno cortaria o bloco, porque esse bit ainda pertence ao endereço interno.

Voltar à explicação
O que um bit de paridade prova

Um byte 11000101 usa paridade par. Determina o bit de paridade e explica se uma inversão de dois bits de dados é sempre detetada.

Pista

Conta os bits 1.

Solução

Há quatro bits 1, portanto a paridade adicional é 0. Uma inversão de um bit altera a paridade; duas inversões mantêm-na. Logo o bit de paridade não garante detetar dois erros e não identifica qual bit foi alterado para o corrigir.

Confere a tua resposta:

  • Bit de paridade 0, pois o byte tem quatro bits 1.
  • Duas inversões conservam a paridade e não são detetadas.

Erros frequentes

Não atribuas correção de um bit à paridade simples.

Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.