Lista de Exercícios sobre Endereçamento

Dado um processador de 32 bits, mostrado a seguir, pede-se:

  1. Fazer o decodificador de endereços que permita:

Mostre as alterações necessárias no Hardware (desenho).

Processador de 32 bits
Processador de 32 bits

A ligação da memória ao circuito do processador é uma conexão entre sinais de mesmo nome/significado.

Assim, teremos:

A ligação da memória está mostrada a seguir.

Processador de 32 bits com Endereçamento de Memória
Processador de 32 bits com Endereçamento de Memória

Vamos adicionar o circuito para a escrita nos LEDs e a leitura das chaves.

Processador de 32 bits com Endereçamento de Memória, LEDs e Chaves
Processador de 32 bits com Endereçamento de Memória, LEDs e Chaves

Montado o circuito, projetaremos o decodificador.

Acessando a memória RAM.

Para que a memória esteja somente na faixa de endereços de 0 a 64KB-1, precisamos decodificar toda a faixa de endereços, ou seja:

O decodificador responsável pela ativação da memória será uma porta NOR com 16 bits de entrada. Os bits mais significativos do endereçamento (A16 ~ A31) são a entrada dessa porta NOR e o sinal habMEM é a sua saída.

Assim, quando todos bits de A16 ~ A31 forem nível baixo, a saída da NOR habilita a memória. Caso qualquer bit dessa faixa (A16 ~ A31) passar para nível alto, a memória será desabilitada. Isso significa que a sua saída passará para tristate (alta impedância de saída) e ela não fará nenhuma operação de escrita ou leitura.

Endereçamento da Memória
Endereçamento da Memória

A escrita na posição de memória 128K.

Para ligar ou desligar os LEDs, precisamos escrever no registrador adequado.

Para definir o endereço desse registrador, precisaremos decodificar os 32 bits do endereço. Para tanto, precisamos converter o endereço de decimal para binário e fazer decodificador para esse endereço.

O endereço é 131072 em decimal, que equivale a uma palavra de 32 bits com somente o bit 17 em nível alto.

Como o registrador só deve ser habilitado na escrita, adicionaremos o sinal WR. Podemos implementar esse decodificador com uma porta NOR de 33 bits.

Endereçamento dos LEDs
Endereçamento dos LEDs

A leitura da posição de memória 128K+1.

Para obter o endereço em binário da posição 128K+1 ativamos o bit 0 do endereço obtido no item anterior.

Da mesma forma, usamos uma porta NOR de 33 bits.

Endereçamento das Chaves
Endereçamento das Chaves

Com a mesma arquitetura do processador, mostrada na questão 1, projete um decodificador de endereços que permita:

Ou seja, a mesma memória de 64KB estará espelhada nas posições:

Entre as posições 64K e 256K-1 não deve ocorrer acesso à memória. Isso, para todos os blocos de repetição.

Processador de 32 bits
Processador de 32 bits

O circuito é o usado no primeiro passo da solução anterior, o que mudará é o decodificador. Agora, o decodificador só tem a memória para habilitar.

O endereçamento dentro da memória usa os 16 bits LSB (A0 ~ A15).

A repetição do bloco deverá ser a cada 256K posições. O endereço binário possui somente o bit A18 em nível alto e todos outros em nível baixo.

Processador de 32 bits com Endereçamento de Memória
Processador de 32 bits com Endereçamento de Memória

Para o bloco aparecer na posição ZERO, os valores de A16 ~ A31 devem ter nível baixo.

Endereçamento para a Memória na Posição Zero
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Para aparecer na posição 256K, o bit A18 deve estar em nível alto e os bits restantes (A16 ~ A17 e A19 ~ A31) devem estar em nível baixo.

Endereçamento para a Memória na Posição 256K
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

Para aparecer na posição 512K, o bit A19 deve estar em nível alto e os bits restantes (A16 ~ A17 e A19 ~ A31) devem estar em nível baixo.

Endereçamento para a Memória na Posição 512K
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

Para aparecer na posição 768K, os bits A19 e A18 devem ter nível alto e os bits restantes (A16 ~ A17 e A20 ~ A31) devem estar em nível baixo.

Endereçamento para a Memória na Posição 768K
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

O processo continua até ocorrer todas a variações nos bits entre A18 e A31.

Percebe-se que os únicos bits de endereço que definem esse padrão são os bits A16 e A17, quando em nível baixo.

O decodificador pode ser implementado com uma porta NOR de 2 entradas.

Endereçamento da Memória
Endereçamento da Memória

Para melhorar o funcionamento da interface do usuário, de um projeto com um processador de 32 bits (MIPS), o seu grupo decidiu utilizar um LCD.

Ficou acordado que o LCD usará o endereço 0x8000_4001 e que você fará o decodificador.

Além disso, explique a necessidade das duas portas AND utilizadas no RD e WR.

Projeto com Processador de 32 bits
Projeto com Processador de 32 bits

O endereço do LCD é 0x8000_4001 que em binário é 0b1000.0000.0000.0000_0100.0000.0000.0001.

Para decodificar esse endereço temos um AND lógico entre dois conjuntos de bits:

Para a ocorrência dos bits ZERO, utilizamos uma porta NOR. Para a ocorrência dos bits UM, utilizamos uma porta AND.

habLCD = (NOR (b30 ~ b15, b13 ~ b1)) AND ( AND (b31, b14, b0))

Endereçamento do LCD
Endereçamento do LCD

Em relação às portas AND:

As portas AND fazem com que os sinais de habilitação só seja ativados se o endereço acessado é o do LCD.

Projeto com Processador de 32 bits
Projeto com Processador de 32 bits

O mapa de memória, mostrado abaixo, é de um processador com barramento de endereços de 16 bits e de dados com 8 bits.

Faça o decodificador de endereços para as três faixas de memória mostradas. O resultado poderá ser dado na forma da expressão booleana.

Mapa de Memória
Mapa de Memória

Exemplos de resposta:

  1. Uma forma pode ser a equação completa, atribuída ao sinal de habilitação:

External SRAM Motherboard = ( ( AND(A23 : A19) ) OR ( AND( NOT A14, NOT A12, NOT A0) ) ) NOR (A17, A5 )

  1. Outra forma pode ser a utilização de parcelas intermediárias indicando a composição do sinal.

E a atribuição final ao sinal de habilitação:

Sinal_A = AND(A23 : A19)

Sinal_B = AND( NOT A14, NOT A12, NOT A0)

External SRAM Motherboard = (Sinal_A OR Sinal_B) NOR (A17, A5 )

Observações:

Os parênteses auxiliam a leitura da equação.

A utilização de parcelas intermediárias facilita o projeto e a correção.

Além disso, esse fracionamento da equação simplifica a definição de blocos de memória que não são do tamanho 2^N.

Nesse caso, podemos trabalhar com blocos de tamanho 2^(N-1) e 2^(N-2) fazendo uma operação OR entre eles (soma de produtos).

ROM:

Início : 0x0000 - 0000 0000 0000 0000

Fim: 0x1FFF - 0001 1111 1111 1111

ROM = (not A15) and (not A14) and (not A13)

====

RAM:

Início : 0x2000 - 0010 0000 0000 0000

Fim: 0xDFFF - 1101 1111 1111 1111

RAM = 0x2XXX or 0x3XXX or 0x4XXX or …. or 0xCXXX or 0xDXXX

0x2XXX = (not A15) and (not A14) and (A13) and (not A12)

0x3XXX = (not A15) and (not A14) and (A13) and (A12)

0x4XXX = (not A15) and (A14) and (not A13) and (not A12)

0x5XXX = (not A15) and (A14) and (not A13) and (A12)

0x6XXX = (not A15) and (A14) and (A13) and (not A12)

0x7XXX = (not A15) and (A14) and (A13) and (A12)

0x8XXX = (A15) and (not A14) and (not A13) and (not A12)

0x9XXX = (A15) and (not A14) and (not A13) and (A12)

0xAXXX = (A15) and (not A14) and (A13) and (not A12)

0xBXXX = (A15) and (not A14) and (A13) and (A12)

0xCXXX = (A15) and (A14) and (not A13) and (not A12)

0xDXXX = (A15) and (A14) and (not A13) and (A12)

Minimizado:

RAM = (A15 and (not A13)) or ((not A14) and A13) or ((not A15) and A14)

===

I/O:

Início : 0xFC00 - 1111 1100 0000 0000

Fim: 0xFFFF - 1111 1111 1111 1111

I/O = (A15) and (A14) and (A13) and (A12) and (A11) and (A10)

===


Ferramenta Auxiliar: Conversor Binário para Decimal (com ou sem sinal)

    Binário com Sinal

Outras Ferramentas