terça-feira, 31 de dezembro de 2013

Memórias: Definições e Organização Lógica

     Olá a todos. Depois de muito tempo sem escrever no blog, mas sempre atento aos comentários de vocês, resolvi escrever esse post sobre memória, como uma continuação de nossa série sobre eletrônica digital. Espero que entendam a falta de posts, já que o semestre foi puxado, e atualmente estou trabalhando em uma empresa na parte da manhã, auxiliando em uma pesquisa na parte da tarde e estudando a noite. Pelo menos estava antes de entrar de férias desses meus três compromissos! Então sem mais delongas vamos falar das memórias!

     Eu escolhi o tema de memórias pois, em minha recente experiência como monitor de sistemas digitais, percebi que muita gente tem dificuldades em entender o funcionamento das memórias. Então hoje eu vou tentar simplificar o entendimento desse componente tão importante.

     Vamos começar falando das definições de memórias:

     A memória é um dispositivo que guarda dados, que podem ser recuperados em um momento posterior. Existem diversos tipos de memórias, que são utilizadas para diferentes necessidades. Como exemplos temos o antigo disquete, o CD, o HD, os "pentes" de memória RAM do nosso computador, nosso flash-drive (pen-drive), entre outros. Nosso dia-a-dia está lotado de equipamento com capacidade de memória. Não falo somente dos nossos computadores e celulares, mas televisões (que conseguem guardar data e hora, ou podem ser programadas para avisar do começo de um programa), nossos aparelhos de DVD, nossos microondas.

     Existem diferentes tipos de memórias para diferentes tipos de necessidades. E esses tipos receberam denominações, que facilitam a identificação. Então vou começar com algumas definições.

     Memória Sequencial (HD, CD, DVD, Disquete): Esta memória possui acesso sequencial, ou seja, em sequência, um endereço após o outro. Se estamos no início da memória e queremos ler um dado do fim dela, temos que passar por todo o espaço intermediário. Todos os exemplos entre parênteses são mídias "rotativas", ou seja, são discos. Para ler um dado "distante" somos obrigados a rotacionar o disco, ou seja, a passar por espaços intermediários que não nos interessam. Essa rotação consome tempo e, por isso, memórias sequenciais costumam ser mais lentas. Nessas mídias, por exemplo, a velocidade de leitura está associada fisicamente a velocidade máxima possível de rotação do disco, além de outros fatores.

    Memória RAM - Random Access Memory [Memória de Acesso Aleatório] (Memória RAM do computador, flash-drive): Esta memória é o oposto da memória sequencial. O aleatório no nome não significa que a memória fica pulando caoticamente entre endereços, mas significa que se estamos no início e queremos ir para o fim, não precisamos passar pelo espaço intermediário. Basicamente, para pular entre endereços vizinhos e pular entre endereços distantes, tomamos a mesma quantidade de tempo.

     Memória Volátil (Memória RAM do computador): É a memória que, uma vez cortada a energia, a memória perde todo seu conteúdo. São memórias construídas em CIs, com transistores, embora nem todas memórias de CI sejam voláteis.

     Memória Não-Volátil (HD, CD, DVD, Disquete): São memórias que mesmo cortadas a energia, não perdem a informação, já que o processo de retenção de informação não depende de energia. No caso do HD e do Disquete são métodos magnéticos, enquanto no CD e DVD são propriedades ópticas.

     Memória de Leitura e Escrita (Memória RAM, HD, Flash-Drive): São memória que permitem, além da leitura, gravação repetidas. Ou seja, podemos gravar e ler quantas vezes quisermos. A memória possui uma limitação de ciclos de gravação, mas geralmente essa quantidade é muito alta para a aplicação da memória.

     Memória ROM - Read Only Memory [Memória Somente de Leitura] (ROM de BIOS, CD-ROM): São memórias que permitem apenas uma gravação, e depois somente leitura, ou memórias que vem gravadas de fábrica, e permitem somente leitura. Algumas memórias, como as memórias de programa de microcontroladores são chamadas de ROM, mas elas são memórias do tipo flash e podem ser regravadas inúmeras vezes. Outro engano comum é achar que memória ROM é o contrário de memória RAM. Existem memórias que são ROM e RAM ao mesmo tempo, como memórias PROM (ROM Programável, porém só podia ser escrita uma vez), além de memórias ROM mais antigas.

     Vamos analisar o diagrama lógico de uma memória a partir da imagem abaixo, e entender como ela funciona:


     Uma memória tem 3 barramentos em sua estrutura lógica, que são o barramento de dados, de endereços e de controle. O barramento de endereços escolhe um endereço dentro da memória, o barramento de dados deverá contém os dados que a gente quer colocar na memória (no caso de escrita), ou irá conter os dados que a gente quer ler da memória (no caso de leitura), e o barramento de controle serve para selecionar a memória e controlar as operações de leitura e escrita. Essa descrição, embora correta, algumas vezes não é prática para o entendimento, então vamos entender cada um dos componentes da memória por analogia, que eu considero um bom método de aprendizado.

Endereços da Memória



     Imagine a memória como sendo um cômodo com várias gavetas, como o da imagem acima. Assim cada endereço é uma gaveta. Em binário, para contar de 0 a 4 (o que consegue determinar cada uma das 5 gavetas), precisamos de 3 dígitos. Vamos determinar o seguinte:

000 - Gaveta 1 (do topo)
001 - Gaveta 2
010 - Gaveta 3
011 - Gaveta 4
100 - Gaveta 5 (abaixo)

     Dessa forma percebemos que com 3 dígitos podemos "endereçar" todas as 5 gavetas. Esse é o papel do barramento de endereços. São um conjunto de entradas da memória em que a gente coloca o sinal correspondente ao endereço que queremos. No caso da nossa "memória criado-mudo" precisaríamos somente de 3 fios como barramento de endereços. Para acessar a gaveta número 4, eu colocaria o sinal 011 nesses conjunto de fios, e com isso teria acesso a gaveta número 4.

Dados da memória

     Os dados da memória podem ser vistos como sendo o conteúdo de cada gaveta. Normalmente, cada endereço da memória contém 8 bits, que formam 1 byte. Mas é possível construir memórias que possua 16 bits (2 bytes) por endereço. É possível construir inclusive memórias com menos de 1 byte por endereço, como, por exemplo, 4 bits. Mas o comum são memórias de 8 bits.

     Para definir uma memória, utilizamos um par de números. Por exemplo, uma memória 64x8 possui 64 endereços, sendo que cada endereço contém 8 bits (1 byte). Uma memória de 128x16 possui 128 endereços de 16 bits cada. Portanto esses dois números são suficientes para caracterizar a memória, do ponte de vista de capacidade de armazenamento.

     A largura do barramento de dados é determinado pelo segundo número do par. Por exemplo, a memória de 64x8 deverá ter uma largura de 8 bits no barramento de dados. Por quê? Pois para colocar uma informação de 8 bits dentro da memória, teremos que ter 8 condutores (fios), um para cada bit. A memória de 128x16, por sua vez, deverá ter uma largura de barramento de dados de 16 bits, pelo mesmo motivo explicado anteriormente.

     O largura do barramento de endereços é determinado pelo primeiro número do par, porém não de forma tão direta quanto o barramento de dados. A memória de 64x8 possui 64 endereços e, portanto, tem uma largura de endereço de 6 bits. Por quê? Pois com 6 bits podemos formar 64 combinações, uma para cada endereço. A memória de 128x16, por sua vez, deverá ter uma largura de barramento de 7 bits, pois com 7 bits podemos formar 128 combinações, uma para cada combinação. Como chegamos nesse valor? A conta é feita da seguinte forma:

[;N = log_2(A);]

Onde:
N é a largura do barramento de endereços;
A é a quantidade de endereços da memória.

     Ou seja, a largura do barramento é o número "N", onde 2 elevado a "N" resulta no número total de endereços da memória. A memória de 128 endereços possui uma largura de barramento de 7, pois:

[;2^7 = 128;]

   A largura do barramento de controle é variável, depende do tipo da memória e do fabricante. Basicamente uma memória possui uma entrada de ENABLE, que habilita a memória e, se a memória for do tipo de leitura e escrita, possuirá uma entrada de R/W, que seleciona entre o modo de leitura e escrita.

    A função do pino ENABLE, as vezes chamado de CS (Chip Select), pode variar. Geralmente coloca todas as saídas da memória (barramento de dados) em alta impedância mas, em alguns casos, pode simplesmente colocar todas as saídas da memória em 0.

     Por fim, para calcular a quantidade total de células de memória, ou seja, a quantidade total de bits que a memória consegue armazenar, apenas multiplicamos a quantidade total de endereços pelo número de bits que um endereço consegue armazenar. No caso da memória de 64x8, podemos armazenar um total de 512 bits, enquanto na memória de 128x16 podemos armazenar 2048 bits, ou 2K bits.

     E por hoje era isso. Espero ter esclarecido um pouco o conteúdo de memórias para quem precisava. Qualquer dúvida, sugestão ou crítica, deixem um comentário. Abraço a todos, boas festas de fim de ano e que tenhamos um ótimo 2014. Até a próxima e continuem estudando!