Memórias, capacidade e descodificação
Organizar RAM e ROM, agregar chips e determinar mapas de endereços e aliases.
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 tem linhas de endereço e linhas de dados, e guarda bits. A definição separa as duas grandezas: escolhe a posição e diz quantos bits cada posição guarda.
Um chip tem posições e guarda 4096 bytes, ou 4 KiB. Um chip 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 bytes, ou 16 MiB. Com endereçamento à word de 32 bits, os mesmos 24 bits escolhem 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 a partir de chips . 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 escolhe o par. São quatro chips em dois bancos de 16 bits; a capacidade é 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:
| Passo | CS | OE | WE | Endereço | Dado | Efeito |
|---|---|---|---|---|---|---|
| leitura 1 | 1 | 1 | 0 | A estável | Z→D(A) após acesso | saída conduz após |
| leitura 2 | 0 | indiferente | 0 | indiferente | Z | chip desselecionado liberta o barramento |
| escrita 1 | 1 | 0 | 0 | A estável | D estável | prepara endereço e dado |
| escrita 2 | 1 | 0 | 1 | A fixo | D fixo | pulso 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
O primeiro endereço tem todos os bits inferiores a 0; o último tem-nos a 1. São endereços, contando as duas extremidades. Um bloco de bytes deve começar numa fronteira com os 12 bits inferiores a 0 para esta descodificação simples.
Se só descodificarmos , ignorando , o chip aparece repetido de 0x8000 a 0xFFFF. Por exemplo, 0x8123=1000 0001 0010 0011 e 0x9123=1001 0001 0010 0011 diferem apenas em 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, 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.
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.
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
. 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.
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.