Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Engenharia de Computação e Automação MICROCONTROLADOR PIC 16F84A E ACESSO A MEMÓRIA CACHE Primeira Avaliação Discente: Jaime Cristalino Jales Dantas Matricula: 2011008771 Disciplina: Arquitetura de Computadores Natal, 2 de outubro de 2015
PIC18F84A e Acesso a memoria cache c++ Engenharia de computacao
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Universidade Federal do Rio Grande do Norte Centro de Tecnologia
Departamento de Engenharia de Computação e Automação
MICROCONTROLADOR PIC 16F84A E ACESSO A MEMÓRIA CACHE
Sumário Parte I – Microcontrolador PIC 16F84A ....................................................................................................... 3
4.1 - Interrupções externas .......................................................................................................................................................... 14 4.2 - Interrupções de overflow TMR0 ..................................................................................................................................... 14 4.3 - Interrupções por mudança de estado PORTB ............................................................................................................. 15 4.4 - Interrupções de fim de escrita EEPROM ..................................................................................................................... 15
Parte 2 – Acesso à memória cache ................................................................................................................. 16 1 – Análise das configurações da cache .................................................................................................................... 16 2 – Analise dos resultados ........................................................................................................................................... 21 3 – Algoritmo ................................................................................................................................................................. 25
O microcontrolador pode ser analisado como um minicomputador que possui as básicas funções
de um computador convencional, porém com um tamanho muito pequeno. Muitos produtos possuem
microcontroladores que gerenciam e controlaram determinadas funções deles. Para isso, nos chamamos
de sistemas embarcados qualquer produto que tenha uma eletrônica que usa microcontroladores. Um
microcontrolador é um chip computacional que possui pinos de entrada e saída de dados, pinos de
controle, memoria, CPU, etc. A Microchip possui diversos tipos de microprocessadores divididos em
diferentes famílias, e o PIC 16F84A é um tipo de microcontrolador da famílias 16 da Microchip.
O microcontrolador PIC 16F84A tem sido uns dos microcontroladores mais usados no mundo, e
ele possui uma CPU, memoria flash, memoria RAM, I/O, uma memoria permanente pra guardar o
programa, e outros dispositivos auxiliares, tais como clock, conversos A/D, etc.
2 – Pinagem PIC 16F84A
Figura 1 - Pinagem do PIC 16F84A
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
4
A discrição e função de cada pino é mostrado na tabele a seguir
Tabela 1 - Discrição de pinos do PIC 16F84A
NOME PINO DESCRIÇÃO OSC1/CLKIN 16 Entrada para o cristal oscilador/clock externo OSC2/CLKOUT 15 Saída para o cristal oscilador/clock externo 𝑴𝑪𝑳𝑹 4 Master Clear (reset) externo RA0 17
Porta de I/O digital RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 Porta de I/O digital ou entrada de clock para o
contador
Pode ter Pull-up interno
habilitado por
software
RB0/INT 6 Porta de I/O digital / Interrupção externa RB1 7
Porta de I/O digital RB2 8 RB3 9 RB4 10 Porta de I/O digital ou interrupção na mudança de
estado RB5 11
RB6 12 Porta de I/O digital, interrupção na mudança de estado, ou clock da programação serial
RB7 13 Porta de I/O digital, interrupção na mudança de estado, ou data da programação serial
VSS 5 GND - Tensão de referência negativa e I/O VDD 14 Vcc - Alimentação positiva (+5 Volts) e I/O
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
5
3 - Estrutura do microcontrolador PIC 16F84A
O microcontrolador PIC 16F84A é um microcontrolador de 8 bits que utiliza a arquitetura RISC.
Ela é baseada em registradores, com o barramento de memória de dados separado do barramento de
memória de programa. Este conceito permite ter um conjunto de instruções simples, mas extremamente
poderoso que enfatiza as operações bit, byte e de registradores. A estrutura completa do
microcontroaldor PIC 16F84A pode ser vista no diagrama abaixo:
Figura 2 - Diagrama PIC 16F84A
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
6
No diagrama acima, podemos nomear os blocos agrupados em:
1 – CPU (central processing unit)
2 – Modulo de entradas e saídas
3 – Barramento de endereço da memória de programa
4 - Memória principal de dados do programa
5 – Barramento de dados (para comandos de instrução)
6 – Barramento de dados principal central E/S e memoria principal e de dados
7 – Barramento de endereço para memoria principal de dados
8 – Endereços extraídos do comando de instrução
9 - Dado explicito extraído do comando de instrução
10 – Barramento de instrução
Para uma rápida analise, podemos simplificar esse diagrama acima em um diagrama simplificado
em que blocos foram agrupados. Essa análise pode ser analisada em comparação com a arquitetura de
Von Neumann, já que os elementos do microcontrolador estão dispostos de forma similar a essa
arquitetura. Vale salientar que a arquitetura do PIC 16F84A possui barramentos específicos que
interligam o CPU com os elementos de memória (principal e de programa). Para a análise da estrutura
do microcontrolador PIC 16F84A, utilizaremos o diagrama da figura abaixo:
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
7
Figura 3 – Estrutura simplificada PIC 16F84A
Os componentes básicos do PIC 16F84A estão listados abaixo:
Memória Flash: É a memória que fica armazenado o programa, e é escrita e apagada e eletronicamente
com o uso de software.
Memória EEPROM: É a memoria não volátil do microcontrolador, ou seja, mesmo que a alimentação
seja cortada, os dados não são perdidos. É utilizada para guardar dados internos que não podem ser
perdidos.
Memoria RAM: É a memoria volátil do microcontrolador, e é utilizada na execução do programa.
Quando a alimentação é desligada, os dados presente nessa memoria são perdidos.
Porto A e Porto B: São as I/O do microcontrolador com seus periféricos. O porto A possui 5 pinos de
I/O e o porto B possui 8 pinos de I/O.
Contador / Temporizador: É um registro de 8 bits no interior do microcontrolador PIC que roda
independentemente do programa que é instalado nele. No final de quatro ciclos de clock, ele incrementa
esse contador ate o máximo de 255, que é a máxima representação de 8 bits, e quando ele chega a esse
valor, o contador é zerado a contagem reiniciado do zero.
Unidade de Processamento Central (CPU): É responsável pela interconexão de todos os blocos
internamente no microcontrolador e também pela execução do programa.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
8
4 - Instruções
O ciclo de instrução de um microcontrolador é composto por dois passos, o passo de busca
chamado de “fetch” e o passo de execução da instrução. Esses dois passos se dividem em diversos
passos que pode dependem de alguns fatores. A lista geral de passos é:
1- Busca a instrução na memoria
2- Decodificação da instrução
3- Calculo do endereço do operando
4- Busca do operando
5- Operação do dado
6- Calculo do endereço do operando
7- Armazenação do operando
Dependendo se ha ou não interrupções, esse ciclo pode mudar um pouco. O processador ira
checar ao fim do ciclo de instrução se houve interrupções.
O microcontrolador PIC 16F84A possui um conjunto de 35 instruções. Procurou-se o otimizar o
numero de instrução o máximo possível, aumentando assim a rapidez e a simplicidade de arquitetura do
microcontrolador PIC 16F84A. Entretendo, isso também trousse uma limitação na programação, pois
existe apenas 35 diferente instruções, ou seja, em alguns casos é necessário desenvolver analises não
convencionais para solucionar um problema.
Cada instrução é composta por uma “word” de 14 bits dividida em OPCODE, a qual especifica o
tipo de instrução e um ou mais operadores que especificam a operação da instrução. As operações
podem ser divididas em orientada a byte, a bit e literais e controle. A descrição do OPCODE é mostrada
na tabela abaixo:
Tabela 2 - Campos do OPCODE
Campo Descrição
f Registrador de endereço; Referência a um registrador
w Registrador temporário para as operaçõe na ULA (acumulador)
b Refere-se ao bit específico dentro de um byte
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
9
k Uma constante que pode ser escrita na forma decimal, hexa, ou binária
x Ultilizado pelo Microchip software tools
d Local onde é armazenada o resultado da operação
PC Contador de programa TO Bit de "Time-out" PD Bit de "Power-down"
Na operação orientada a byte, ‘f’ representa um registrador de arquivo e ‘d’ representa o
designador de destino. O registrador designador de arquivo especifica qual registrador de arquivo será
usado pela instrução. Já o designador de destino especifica onde o resultado da operação sera gravado.
Se ‘d’ for zero, o resultado é colocado no registrador W. Caso contrario (d=1), o resultado é colocado no
registrador de arquivo especificado na instrução.
Na operação orientada a bit, ‘b’ representa um campo de bit designador que seleciona o numero
de bits afetados pela operação, enquanto ‘f’ representa o endereço do arquivo o qual o bit é localizado.
Nas operações literais e controle, ‘k’ representa uma constante de 8 ou 11 bits, ou um valor
literal.
Graças ao recurso de “pipeline”, todas instruções são executadas com um único ciclo de
instrução, a não ser que um teste condicional é verdadeiro ou o contador do programa é mudado como
resultado de uma instrução. Os microcontroladores PIC usam o recurso de “pipeline” para aumentar a
velocidade de execução das instruções. O pipeline é uma técnica utilizada por processadores que dividir
a execução das instruções em partes e cada uma destas partes pode ser executada em paralelo em um
formato semelhante a uma linha de montagem de carros. Para o microcontrolador PIC 16F18A, pode-se
visualizar a execução das instruções como sendo dividida em dois estágios: busca (fetch) e executa
(execute).
Um ciclo de instruções consiste de quatro ciclos. A busca e execução da instrução são feitas em
linha, de tal forma que a busca leva um ciclo de instrução e a execução leva outro ciclo. Contudo, devido
a característica de “pipeline”, cada instrução é executada efetivamente em um ciclo, pois
simultaneamente ocorrem a execução de uma instrução e a busca a instrução seguinte. Se uma instrução
causa a alteração do Contador de Programa (PC) então dois ciclos são necessários para completar a
instrução.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
10
Conjunto de instruções do PIC 16F84A
Tabela 3 - Instruções PIC 16F84A
INSTRUÇÃO ARGUMENTO DESCRICAO
ADDLW k Soma a constante k ao valor memorizado no acumulador W e coloca o resultado no acumulador.
ADDWF f,d Soma o valor contido no acumulador W com o valor contido no registrador enderecado pelo para metro f.
ANDLW k Efetua o AND bit a bit entre o valor contido no
acumulador W e o valor constante k. O resultado sera memorizado no acumulador.
ANDWF f,d Efetua o AND bit a bit entre o valor contido no
acumulador W e o valor contido no registrador enderec ado pelo parametro f.
BCF f,b Zera o bit b do registrador no enderec o f. BSF f,b Coloca em 1 no bit b do registrador que esta no endereco f.
BTFSC f,b Testa o bit b contido no registrador no enderec o f e pula a pro xima instrucao se este valer 0.
BTFSS f,b Testa o bit b contido no registrador do enderec o f e pula a instrucao seguinte se este for 1.
CALL k
Chama uma subrotina memorizada no enderec o k. O parametro k pode ser especificado utilizando-se
diretamente o valor nume rico do enderec o ou entao o relativo label.
CLRF f Zera o valor contido no registrador enderec ado pelo parametro f.
CLRW Zera o valor contido no registrador W.
CLRWDT
Utilizada quando programarmos o PIC 16F84A com a opcao Watchdog. Nesta modalidade o microcontrolador
PIC habilita um timer que, uma vez transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente
a instrucao CLRWDT para zerar o timer antes deste tempo. Se nao zerarmos o WDT neste tempo, o circuito de
watchdog interpretara este como um bloco de programa em execuc ao e efetuara o reset para bloquea-lo.
COMF f,d Efetua o complemento do valor contido no registrador enderecado pelo para metro f.
DECF f,d Decrementa o conteu do do registrador endereçado pelo parametro f.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
11
DECFSZ f,b Decrementa o valor de registrador do enderec o f e se o resultado for zero pula a pro xima instrucao.
GOTO k Determina o desvio incondicional do programa em execucao para o enderec o k. O parametro k pode ser
especificado utilizando-se diretamente um valor nume rico do endereco ou entao o relativo label.
INCF f,d Incrementa o conteu do do registrador no enderec o f.
INCFSZ f,b Incrementa o valor do registrador f e se o resultado for zero pula a pro xima instrucao.
IORLW k Efetua o OR inclusive entre o valor contido no acumulador W e o valor da constante k.
IORWF f,d Efetua o OR inclusive entre o valor contido no acumulador
W e o valor contido no registrador enderec ado pelo parametro f.
MOVLW k Passa ao acumulador W um valor constante k.
MOVVF f,d Copia o conteu do do registrador enderec ado pelo parametro f para o para metro de destino d.
MOVWF f Copia o conteu do do registrador W no registrador de parametro f.
NOP Esta instrucao nao executa nenhuma operac ao mas e util para inserir atrasos de um ciclo de maquina ou mais.
RETFIE Esta instrucao deve ser colocada no te rmino de cada subrotina de controle de interrupc oes para retornar o
controle ao programa principal.
RETLW k Retorna o controle de uma rotina ao programa principal. A diferenca desta em relac ao a instrucao RETURN e que
retflw permite retornar, atrave s do acumulador W, o valor k ao programa principal.
RETURN Esta instrucao deve ser inserida no termino de cada subrotina para retornar a execucao ao programa principal.
RLF f,b
Rotaciona o bit contido no registrador do enderec o f para a esquerda (ou seja do bit menos significativo para o mais
significativo) passando pelo CARRY do registrador STATUS.
RRF f,b
Rotaciona o bit contido no registrador do enderec o f para direita (ou seja do bit mais significativo para o menos
significativo) passando pelo bit CARRY do registrador STATUS .
SLEEP Bloqueia a execuc ao do programa em andamento e coloca o PIC em standby.
SUBLW k Subtrai a constante k do valor memorizado no acumulador W.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
12
SUBWF f,d Esta instrucao subtrai o valor contido no registrador W do valor contido no registrador enderec ado pelo para metro f.
SWAPF f,d Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do enderec o f com os quatro bits
menos significativo(D3-D0) do mesmo.
XORLW k Efetua o OR exclusivo entre o valor contido no acumulador W e o valor constante k.
XORWF f,d Efetua o OR exclusivo(XOR) entre o valor contido no
acumulador W e o valor contido no registrador enderec ado pelo parametro f.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
13
5 - Interrupções
O microcontrolador PIC 16F84A possui quatro fontes de interrupções: Interrupções externas no
pino RB0/INT; Interrupções de overflow TMR0; Interrupções por mudança de estado PORTB; E
interrupções de fim de escrita EEPROM.
Quando uma interrupção ocorre ela fica como pendente, e no próximo ciclo de busca o
processador ira tratar essa interrupção. Quando a interrupção é tratada, o processador suspende a
execução do programa que esta sendo executado e salva seu contexto. Depois o processador irá
armazenar no contador do programa o endereço inicial de uma rotinha de tratamento de interrupção.
O registrador de controle de interrupções (INTCON) grava todas as interrupções como bits de
flag, e também armazena o bit de habilitação de interrupção global (GIE). O GIE habilita ou desabilita
todas as interrupções de uma só vez, e ele é resetado no RESET.
Quando uma interrupção é tratada, o bit GIE é limpado para desabilitar qualquer interrupção
futura, o endereço de retorno é colocado numa STACK e o PROGRAM COUNTER (PC) é carregado
com 0004h. Para interrupções externas (RB0/INT or PORTB) a latência será três à quatro ciclos de
instrução. A latência depende quando a interrupção ocorre e é a mesma para um ou dois ciclos. A fonte
da interrupção pode ser determinada através dos bits de flag. O bit de flag deve ser limpado através de
software antes da reabilitação do “sistema” de interrupções para evitar infinitas interrupções. Uma
interrupt flag é um bit que indica qual foi o tipo de interrupção.
Portanto, o INTCON pode habilitar ou desabilitar os bits de interrupções independentemente (4
tipos de interrupções). A figura a seguir mostra como funciona o quadro de interrupções do PIC 16F84A
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
14
Figure 4 - Lógica de interrupção
4.1 - Interrupções externas
Esse tipo de interrupção é gerado por um sinal externo conectado ao pino RB0/INT. Portando,
essa porta serve como entrada para um sinal que pode ser processado internamento do microcontrolador.
Interrupções externas no pino RB0/INT é elevado (de 0 para 1) quando o bit INTEDG é setado e baixa (
de 1 para 0) quando o bit INTEDG é limpado. Quando uma borda válida (subida ou descida) aparece no
pino RB0/INT, o bit INTF é setado. Esse tipo de interrupção pode ser desabilitada limpando-se o bit de
controle INTE. O bit de flag INTF deve ser limpo através de software via Rotina de Serviço de
Interrupção antes de habilitar essa interrupção. A interrupção externa pode ligar o processador do modo
“SLEEP” se o bit INTE for setado antes dele entrar no modo “SLEEP”. O status do bit GIE decide se as
conexões do processador para o vetor de interrupção também ligaram ou não.
4.2 - Interrupções de overflow TMR0 Esse tipo de interrupção ocorre quando o contador TMR0 estoura. Esse contador é geralmente
utilizado para contar o tempo, e ele pode ser incrementado tanto pelo clock como por um sinal externo.
Um overflow em TMR0 ira setar o bit T01F. A interrupção pode se habilitada ou desabilitada setando ou
limpando o bit de habilitação T01E.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
15
4.3 - Interrupções por mudança de estado PORTB
Essa interrupção acontece na borda de subida e descida, o seja, na mudança de estado.
Geralmente é utilizado para criar sincronismo com a rede elétrica (50 Hz ou 60 Hz). A interrupção pode
habilitar ou desabilitar setando o bit de habilitação RBIE.
4.4 - Interrupções de fim de escrita EEPROM Esse tipo de interrupção é utilizado para sinalização de fim de escrita de um programa na
memoria EEPROM do microcontrolador PIC. Devido o tempo de escrita na EEPROM ser muito longo,
esse método é muito importante para evitar erros na escritas de programas no PIC. Essa interrupção
pode ser habilitar ou desabilitada setando ou limpando o bit de habilitação EEIE.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
16
Parte 2 – Acesso à memória cache
1 – Análise das configurações da cache
Cada “word” na arquitetura computacional estudada representa 1 byte, que por sua vez é o
mesmo que 8 bits. Portanto, temos que:
1 𝑤𝑜𝑟𝑑 = 8 𝑏𝑖𝑡𝑠 A memória cache é representada de um conjunto que espaços que nós chamamos cada um desses
espaços como uma linha de uma pilha. Cada linha da memoria cache contem um campo para o
endereço “tag” e outro campo para o dado em si. O dado armazenado na memória cache é
geralmente um bloco de vários endereços, e não apenas um endereço. Sendo assim, cada linha da
cache pode armazenar um bloco de n “words”. Para sabermos quantas linhas uma memória cache
possui, basta dividir o número total de “words” pelo número de “words” que cada linha armazena.
Portanto, temos que:
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎
A memoria principal armazena apenas uma “word” de 8 bits em cada endereço dela. No
mapeamento direto, nos temos que o a quantidade de “linhas” da memoria principal é muito maior
que a quantidade de linhas da memoria cache. O nosso problema consistia em uma memória
principal de 1024 posições e uma memória cache que variava segundo os casos descritos a seguir.
1.1 Caso 1: Cache com 128 words
Nesse caso, a memória cache é composta por 128 “words”.
O gráfico 1 abaixo representa a falhas de acesso de uma memoria cache de 128 palavras com
quatro diferentes configurações de linhas: linha com 4 “words”; linha com 8 “words”; linha com 16
“words”; e linha com 32 “words”.
Gráfico 1 - Erro de acesso cache de 128 words
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
23
Podemos perceber que o efeito de mudança de words por linha na cache tem nenhum ou
pouquíssimo efeito na taxa de falhas de acesso da memoria. Portanto, concluímos que o tamanho do bloco da cache (quantidade de words por linha) não tem relação direta na taxa de falhas de
acessos da cache.
Quando analisamos o gráfico 2 a seguir, que estão todas as configurações de cache possíveis no
problema, podemos concluir que o único parâmetro que contribuirá diretamente para a diminuição
ou aumento nas falhas de acesso será o tamanho da memoria cache, que pode ser medida em
“words” ou bytes, sendo cada “word” um byte de memoria para essa arquitetura especifica.
Gráfico 2 - Falhas de acesso para varias configurações de cache
No gráfico 2, podemos perceber que quando aumentamos o tamanho da memória cache, as falhas
de acessos também diminuem. Isso condiz com a realidade pois quando aumentamos o tamanho da
cache, adicionaremos mais linhas a ela, e consequentemente, mais endereços da memoria principal.
Portando a relação de falhas de acesso com aumento da memória cache é inversamente proporcional.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
24
No gráfico abaixo estão esboçados os acertos para as diferentes configuraçōes de memória cache.
Gráfico 3 - Acertos de Acesso
Podemos concluir também que quanto maior o tamanho da cache, mais acertos de acessos ela
terá, e melhor sera o desempelho do conjuto memória principal e cache. Entretando, existe um limite de
temanho máximo de memória cache que podemos usar de forma que para valores de cache maiores que
esse tamanho máximo, a taxa de acertos sera constante.
//---Caso 3: tamanho_cache = 128; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 4: tamanho_cache = 128; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //-------------------------------------------------------- //---Caso 5: tamanho_cache = 256; words_por_linha = 4; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 6: tamanho_cache = 256; words_por_linha = 8; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 7: tamanho_cache = 256; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 8: tamanho_cache = 256; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //-------------------------------------------------------- //---Caso 9: tamanho_cache = 512; words_por_linha = 4; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 10: tamanho_cache = 512;
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
37
words_por_linha = 8; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 11: tamanho_cache = 512; words_por_linha = 16; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; //---Caso 12: tamanho_cache = 512; words_por_linha = 32; taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha); cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem "<<words_por_linha<<" words. "; cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl; return 0; }
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
38
Bibliografia [1] Cartolano , E., & Avegliano , P. (2004). Experiência Microcontroladores PIC. Escola Politécnica
Universidade de São Paulo, Departamento de Engenharia de Computação, São Paulo. [2] Microchip. Introdução aos Microcontroladores 16F84A . Microship. [3] Microchip. (2013). PIC16F84A Datasheet. Microchip Technology Inc , USA. [4] Oliveira , E., & Fideles, É. MICROCONTROLADORES PIC16F87x. Universidade Católica de
Goiás, Goiás. [5] Stallings, W. (2010). Arquitetura e Organização de Computadores 8a Edição. [6] Stallings, W. Top Level View of Computer Function and Interconnection. In: Computer
Organization and Architecture 8th Edition. [7] Wilmshurst, T. (2006). Designing embedded systems with PIC microcontrollers: principles and