Prefácio

Seja muito bem-vindo à disciplina de Arquitetura e Organização de Computadores. Este prefácio foi escrito especialmente para você, estudante do terceiro semestre do Bacharelado em Ciência da Computação, com o objetivo de apresentar a proposta desta disciplina, explicar como o material foi organizado e orientá-lo para que aproveite ao máximo cada módulo, cada aula e cada linha de código que irá escrever ao longo deste semestre extraordinário.

Uma Janela para o Interior das Máquinas

Você já se perguntou, alguma vez, o que acontece nos milissegundos entre o momento em que você pressiona uma tecla e o caractere aparece na tela? O que ocorre no interior de um chip quando você clica em “compilar” e o seu programa começa a executar? Existe uma história inteira acontecendo ali dentro, uma história contada em bilhões de sinais elétricos por segundo, e esta disciplina foi construída exatamente para que você aprenda a ler esse enredo.

Arquitetura e Organização de Computadores é uma das disciplinas que transforma para sempre a maneira como um profissional de computação enxerga o mundo digital. Antes desta disciplina, um programa é uma sequência de instruções escritas em uma linguagem de alto nível. Depois dela, você começa a perceber as camadas que existem entre o seu código e a realidade física do silício: o compilador que transforma suas intenções em instruções de máquina, a Unidade Central de Processamento que busca essas instruções na memória, o pipeline que as executa em paralelo, o sistema de cache que mantém os dados mais importantes perto do processador para economizar tempo precioso.

Compreender esses mecanismos não é um exercício de curiosidade intelectual sem consequências práticas. Trata-se de desenvolver uma capacidade de análise que diferencia profissionais medianos de excelentes. O desenvolvedor que entende como a hierarquia de memória funciona escreve programas que se comportam de maneira radicalmente diferente em termos de desempenho. O arquiteto de sistemas que conhece as implicações do pipeline no comportamento de desvios condicionais toma decisões de projeto mais informadas. O especialista em sistemas embarcados que compreende os modos de endereçamento do microcontrolador que utiliza extrai muito mais capacidade do hardware disponível.

Nesta disciplina, você não apenas aprenderá sobre essas coisas: você as verá acontecer diante dos seus olhos, no seu kit de desenvolvimento, no código C que você mesmo escreverá, no display LCD que exibirá os resultados das suas implementações. Este é o coração da proposta pedagógica que você encontrará ao longo de todo o semestre.

Por Que Aprender Fazendo: A Filosofia por Trás das Escolhas Metodológicas

Qualquer educador que se preocupa genuinamente com a aprendizagem precisará, em algum momento, responder a uma pergunta incômoda: por que estudantes conseguem repetir definições em uma prova e, semanas depois, não conseguem aplicar aquele mesmo conceito em um problema ligeiramente diferente? A resposta está no modo como o conhecimento foi construído. Quando aprendemos algo de forma passiva, ouvindo ou lendo sem nenhuma demanda de aplicação imediata, o conhecimento permanece superficial. Quando somos obrigados a usar esse conhecimento para resolver um problema real, ele é integrado de maneira completamente diferente à nossa estrutura cognitiva.

Esta disciplina foi planejada com base em metodologias ativas de aprendizagem que reconhecem exatamente essa realidade. As escolhas metodológicas não foram feitas por modismo pedagógico, mas por uma convicção fundamentada em evidências: você aprenderá mais, reterá por mais tempo e será capaz de aplicar os conceitos em situações novas se participar ativamente da construção do seu próprio conhecimento.

Sala de Aula Invertida: Você Chega Preparado

Na abordagem tradicional, a aula serve como primeiro contato com o conteúdo. O problema é que o tempo em sala, com o professor presente, é o recurso mais valioso disponível para você, e utilizá-lo apenas para transmissão de informação que poderia ser feita de outras formas representa um desperdício considerável.

Na Sala de Aula Invertida adotada nesta disciplina, o material de cada módulo será disponibilizado para você na semana anterior às aulas correspondentes. Você estudará em casa, no seu ritmo, construindo uma compreensão inicial dos conceitos antes de encontrar o professor. Quando você chegar à aula, não será para ouvir algo pela primeira vez, mas para aprofundar, questionar, esclarecer e, sobretudo, para aplicar. As duas primeiras aulas de cada módulo, dedicadas à explanação teórica, serão muito mais produtivas porque você já terá uma base sobre o assunto. Suas perguntas serão mais precisas. As discussões serão mais ricas. O tempo com o professor será usado para o que ele faz de melhor: orientar, provocar reflexões, conectar conceitos e responder às dúvidas que só surgem quando você realmente tentou entender algo por conta própria.

Para que essa abordagem funcione, o material foi escrito de forma extremamente detalhada e didática, como se o professor estivesse ao seu lado explicando cada conceito. Você não precisará consultar fontes externas para compreender o que está lendo. Basta dedicação e curiosidade.

Aprendizagem Baseada em Projetos: O Projeto Integrador Como Fio Condutor

O Projeto Integrador é o elemento central desta disciplina, e entender por que ele existe e como ele se articula com o conteúdo teórico é fundamental para que você tire o máximo proveito dele.

Imagine que você está aprendendo a nadar. Você pode estudar a mecânica dos movimentos, entender a física da flutuação, memorizar as diferenças entre os estilos. Mas nada disso se compara ao momento em que você entra na água e começa a mover os braços e as pernas. O projeto tem exatamente esse papel: ele é a água. Cada conceito teórico que você aprende em um módulo terá, naquela mesma semana, uma tarefa prática correspondente no projeto. Quando você estudar representação de dados no Módulo 2, irá implementar rotinas de conversão e aritmética no microcontrolador. Quando estudar interrupcões no Módulo 12, irá construir um sistema de temporização baseado em interrupções no seu kit de desenvolvimento.

Esse encadeamento não é coincidência: foi projetado deliberadamente para que a teoria e a prática se reforcem mutuamente. A teoria explica por que as coisas funcionam de determinada maneira; a prática mostra como isso se manifesta em um sistema real e quais são as consequências concretas das escolhas de implementação.

Cultura Maker: Aprender Construindo Coisas Reais

A Cultura Maker é, talvez, a dimensão mais empolgante desta disciplina. Ela diz algo simples e poderoso: a melhor maneira de aprender sobre um sistema é construindo um. Não simulando, não imaginando, mas efetivamente montando, programando, testando, quebrando e consertando.

O KIT ACEPIC PRO V8.2 com o microcontrolador PIC18F4550 é o seu laboratório pessoal durante todo o semestre. Ele não é apenas um exercício didático. É um sistema computacional real, com arquitetura Harvard, conjunto de instruções RISC, memórias de programa e dados separadas, periféricos como conversores analógico-digitais, interfaces de comunicação serial, temporizadores e portas de entrada e saída de propósito geral. Tudo que você estudar sobre arquitetura de computadores estará presente nesse kit, em escala compreensível, esperando para ser explorado.

Quando você vê o LED piscando na frequência exata que calculou, ou quando o display LCD exibe a temperatura lida pelo sensor que você configurou, acontece algo que nenhuma leitura de livro consegue proporcionar: a satisfação de fazer algo funcionar com os seus próprios recursos. Essa satisfação não é apenas emocional. Ela consolida o aprendizado de uma maneira profunda e duradoura.

Aprendizagem Baseada em Times: Colaboração Como Método

Nenhum sistema computacional complexo é projetado por uma única pessoa. Equipes de engenheiros, arquitetos e programadores trabalham colaborativamente, cada um trazendo perspectivas e habilidades complementares. Ao trabalhar em grupos de quatro ou cinco estudantes no Projeto Integrador, você está reproduzindo uma dinâmica que encontrará ao longo de toda a sua carreira.

A troca com seus colegas de grupo é um componente de aprendizagem em si mesma. Quando você explica um conceito para outra pessoa, você o compreende melhor. Quando um colega encontra uma solução diferente da sua para o mesmo problema, você tem acesso a perspectivas que sozinho nunca consideraria. Quando o grupo enfrenta um obstáculo técnico e precisa trabalhar junto para superá-lo, vocês desenvolvem habilidades de resolução de problemas colaborativa que são altamente valorizadas no mercado de trabalho.

Design Thinking e Aprendizagem Baseada em Problemas

Ao longo do Projeto Integrador, você será constantemente convidado a não apenas implementar soluções, mas a questionar por que determinada abordagem é melhor que outra, a analisar trade-offs entre desempenho e consumo de energia, velocidade e custo de memória, simplicidade e flexibilidade. Essa capacidade de formular boas perguntas antes de buscar respostas é o cerne do Design Thinking e é o que transforma um programador em um arquiteto de sistemas.

A Aprendizagem Baseada em Problemas completa esse quadro ao estruturar o aprendizado em torno de problemas concretos que precisam ser resolvidos. As tarefas do Projeto Integrador foram cuidadosamente formuladas para que a solução não seja óbvia, exigindo que você mobilize o conhecimento teórico recém-adquirido para encontrar caminhos.

O Microcontrolador PIC18F4550: Seu Laboratório Portátil

A escolha do PIC18F4550 como plataforma para o Projeto Integrador não foi aleatória. Este microcontrolador de 8 bits da Microchip Technology reúne, em um único chip acessível e bem documentado, os principais conceitos que você estudará durante o semestre.

Sua arquitetura Harvard modificada, que mantém barramentos separados para acessar memória de programa e memória de dados, é um exemplo didático perfeito de como decisões arquiteturais impactam o desempenho. Seu conjunto de instruções RISC, com instruções de tamanho uniforme e ciclos de execução previsíveis, torna o estudo do pipeline e do tempo de execução de programas muito mais transparente do que seria com arquiteturas mais complexas. Seus periféricos integrados, que incluem conversores analógico-digitais de 10 bits, módulos de comunicação serial USART, I2C e SPI, temporizadores e portas de entrada e saída configuráveis, permitem que você explore conceitos de sistemas de entrada e saída em um ambiente real e controlado.

O KIT ACEPIC PRO V8.2, que inclui o módulo de display LCD Sunstar 2004A entre outros recursos de hardware, oferece uma interface visual imediata para os resultados das suas implementações. Ver informações sendo exibidas no display após seu código ser executado é uma das experiências mais gratificantes no desenvolvimento de sistemas embarcados, e você viverá isso repetidamente ao longo do semestre.

Como Este Material Está Organizado

Este material foi estruturado para dar suporte à sua jornada ao longo de todo o semestre, com documentos específicos para cada propósito. Compreender como eles se articulam ajudará você a navegar com eficiência pelo conteúdo e a sempre saber onde buscar cada tipo de informação.

Documentos Estruturais da Disciplina

O Conteúdo Programático detalha os temas de cada módulo de forma sequencial. Leia-o no início do semestre para entender a lógica de progressão do conteúdo e use-o como mapa ao longo do semestre para saber onde está na jornada e o que está por vir.

O Projeto Integrador é o documento que você precisará consultar com mais frequência durante as aulas práticas. Ele descreve em detalhes o que é esperado de você e do seu grupo em cada módulo, quais são os critérios de avaliação, como organizar os arquivos entregues e como conduzir as apresentações parcial e final. Leia-o integralmente no início do semestre e releia a seção correspondente ao início de cada módulo.

Materiais Didáticos por Módulo

Para cada um dos 15 módulos do semestre, você terá acesso a um conjunto completo de materiais. O arquivo xx_material.qmd, onde xx representa o número do módulo com dois dígitos (por exemplo, 01_material.qmd, 02_material.qmd, até 15_material.qmd), contém o material didático principal do módulo. É este documento que você deve estudar em casa, na semana anterior às aulas correspondentes, seguindo a proposta da Sala de Aula Invertida. Cada material foi escrito com pelo menos dez mil palavras de conteúdo dissertativo, incluindo diagramas, tabelas, exemplos de código e explicações detalhadas suficientes para que você compreenda os conceitos de forma autônoma.

O arquivo xx_exercicios.qmd de cada módulo traz três exercícios progressivos: um de nível básico, um de nível intermediário e um desafiador. Esses exercícios foram elaborados exclusivamente com base no material do respectivo módulo e têm o objetivo de verificar sua compreensão antes das aulas presenciais. Tente resolvê-los após estudar o material, antes de vir à aula. Se tiver dificuldades, isso é uma informação valiosa: indica exatamente os pontos que você deverá levar como dúvidas para o professor.

O arquivo xx_exercicios_resolucao.qmd contém as resoluções comentadas dos exercícios. Consulte-o depois de tentar resolver os exercícios por conta própria. Consultar as respostas sem antes tentar resolver prejudica seu aprendizado e desperdiça o propósito pedagógico dos exercícios.

Material de Referência do Projeto

O arquivo nivelamento.qmd contém o material da Aula 0, que ocorrerá antes do início formal dos módulos. Seu objetivo é revisar conteúdos que você precisará dominar para acompanhar a disciplina, como fundamentos de circuitos digitais, lógica binária e estruturas básicas de programação em C. Estude esse documento antes mesmo de começar o Módulo 1.

O arquivo template_projeto.txt descreve a estrutura de pastas e arquivos que o seu grupo deve adotar para organizar todos os entregáveis do Projeto Integrador. Siga essa estrutura rigorosamente desde o início do projeto, pois ela facilitará tanto o desenvolvimento colaborativo quanto as avaliações pelo professor.

A Progressão dos Módulos: Uma Visão Geral

Os quinze módulos desta disciplina foram organizados em cinco blocos temáticos que refletem a lógica natural de construção do conhecimento em arquitetura de computadores.

flowchart LR
    subgraph BLOCO1["Bloco 1: Fundamentos"]
        M1["Módulo 1\nArquitetura vs Organização\nModelos e Desempenho"]
        M2["Módulo 2\nRepresentação de Dados\nAritmética Computacional"]
        M3["Módulo 3\nConjunto de Instruções\nModos de Endereçamento"]
    end

    subgraph BLOCO2["Bloco 2: Processador"]
        M4["Módulo 4\nCaminho de Dados\nALU e Registradores"]
        M5["Módulo 5\nUnidade de Controle\nMáquinas de Estados"]
        M6["Módulo 6\nPipeline Básico\nEstágios e Temporização"]
        M7["Módulo 7\nPipeline Avançado\nHazards e Mitigação"]
    end

    subgraph BLOCO3["Bloco 3: Memória"]
        M8["Módulo 8\nHierarquia de Memória\nLocalidade"]
        M9["Módulo 9\nMemória Cache\nOrganização e Políticas"]
        M10["Módulo 10\nMemória Virtual\nGerenciamento"]
    end

    subgraph BLOCO4["Bloco 4: Periféricos e E/S"]
        M11["Módulo 11\nSistema de E/S\nPolling e DMA"]
        M12["Módulo 12\nInterrupções e Exceções\nVetores e Prioridades"]
        M13["Módulo 13\nComunicação Serial\nUART, I2C, SPI"]
        M14["Módulo 14\nConversão de Dados\nADC, PWM, Timers"]
    end

    subgraph BLOCO5["Bloco 5: Visão Avançada"]
        M15["Módulo 15\nArquiteturas Paralelas\nTendências Futuras"]
    end

    BLOCO1 --> BLOCO2
    BLOCO2 --> BLOCO3
    BLOCO3 --> BLOCO4
    BLOCO4 --> BLOCO5

O Bloco 1, composto pelos Módulos 1, 2 e 3, estabelece os fundamentos sem os quais nenhum dos conceitos subsequentes pode ser compreendido adequadamente. Você aprenderá a diferença entre arquitetura e organização, compreenderá como números, caracteres e instruções são representados em bits dentro de um processador, e estudará como os processadores definem e codificam seu conjunto de instruções. Esses três módulos são a fundação de tudo que virá a seguir.

O Bloco 2, dos Módulos 4 ao 7, mergulha no coração do processador. Você estudará o caminho de dados, a Unidade Lógica e Aritmética, os registradores, a unidade de controle e, nos dois módulos finais deste bloco, o pipeline de execução de instruções. O pipeline é um dos conceitos mais elegantes e impactantes da arquitetura de computadores, e você entenderá não apenas como ele funciona, mas também por que ele cria desafios chamados hazards e quais técnicas os processadores utilizam para mitigá-los.

O Bloco 3, dos Módulos 8 ao 10, explora a hierarquia de memória, que é o conjunto de mecanismos que os computadores utilizam para aproximar, tanto quanto possível, a velocidade do processador da velocidade de acesso à memória. Você compreenderá por que memórias rápidas são caras e pequenas, por que as lentas são baratas e grandes, e como as memórias cache e a memória virtual permitem que o sistema operacional ofereça ao programador a ilusão de uma memória grande, rápida e barata ao mesmo tempo.

O Bloco 4, dos Módulos 11 ao 14, foca nos sistemas de entrada e saída e nos periféricos especializados. Esses módulos têm forte conexão com o Projeto Integrador, pois é aqui que você aprenderá a usar o LCD, as interrupções, a comunicação serial e o conversor analógico-digital do PIC18F4550 de forma fundamentada e consciente.

O Bloco 5, com o Módulo 15, expande sua visão para além dos processadores individuais, apresentando arquiteturas paralelas, sistemas multinúcleo e as tendências que moldarão a computação nas próximas décadas.

Como Utilizar Este Material com Eficiência

Para aproveitar ao máximo a proposta desta disciplina, algumas orientações práticas merecem atenção.

Estude o material de cada módulo na semana anterior às aulas correspondentes. Reserve um tempo sem interrupções, preferencialmente em um local tranquilo, para ler o texto dissertativo com atenção. Não pule seções por parecerem difíceis na primeira leitura: muitas vezes, a dificuldade inicial se dissolve ao continuar a leitura e encontrar os exemplos que seguem a explicação teórica.

Ao estudar, anote suas dúvidas com precisão. Uma dúvida bem formulada é mais valiosa do que uma dúvida vaga. Em vez de anotar “não entendi o pipeline”, tente anotar “entendi os estágios do pipeline, mas não compreendi por que um hazard de dados acontece quando a instrução seguinte precisa de um resultado que ainda não foi calculado”. Dúvidas precisas geram discussões muito mais produtivas em sala.

Tente resolver os exercícios antes de vir à aula, mesmo que você não tenha certeza das suas respostas. O processo de tentar resolver, mesmo errando, prepara seu cérebro para assimilar a correção de forma muito mais eficaz do que simplesmente ler a solução sem ter tentado antes.

No Projeto Integrador, não espere ter certeza absoluta antes de começar a implementar. A abordagem Maker encoraja justamente o oposto: comece, teste, observe o que acontece, corrija. Um sistema que funciona de forma imperfeita e foi construído por você ensina infinitamente mais do que um sistema perfeito que você apenas leu sobre.

Mantenha o diário do projeto atualizado semanalmente. Anotar o que foi feito, as dificuldades encontradas, como foram superadas e o que você espera fazer na semana seguinte pode parecer uma tarefa burocrática, mas é uma das práticas mais valiosas no desenvolvimento de sistemas complexos. Além de sua importância avaliativa, o diário servirá como registro do seu crescimento ao longo do semestre.

Uma Palavra Final Antes de Começar

Arquitetura e Organização de Computadores é uma disciplina que exige dedicação, mas que recompensa generosamente quem se entrega a ela. Você terminará este semestre com uma compreensão do funcionamento dos computadores que a maioria das pessoas nunca alcança. Você será capaz de olhar para um trecho de código C e visualizar o que acontece no nível das instruções de máquina. Você saberá por que alguns laços de repetição são muito mais rápidos do que outros, mesmo realizando as mesmas operações. Você terá na memória a experiência concreta de ter construído, com as suas próprias mãos, um sistema embarcado funcional.

Mais do que isso, você desenvolverá uma maneira de pensar sobre sistemas computacionais que irá acompanhá-lo por toda a carreira. A capacidade de analisar um sistema em múltiplos níveis de abstração, de compreender os trade-offs entre diferentes escolhas arquiteturais, de conectar teoria e prática de forma fluida: essas são competências que distinguem profissionais de excelência.

O material está preparado. O kit está na sua bancada. O semestre começa agora.

Sumário dos Módulos

O Módulo 1 apresenta os fundamentos conceituais da disciplina: a distinção entre arquitetura e organização, a evolução histórica dos computadores, os modelos de Von Neumann e Harvard e as principais métricas de desempenho, incluindo a Lei de Amdahl. A configuração inicial do ambiente de desenvolvimento e a familiarização com o KIT ACEPIC PRO V8.2 inauguram o Projeto Integrador.

O Módulo 2 aprofunda a representação de dados em sistemas computacionais: sistemas numéricos binário, octal e hexadecimal, complemento de dois, representação de ponto flutuante conforme o padrão IEEE 754, representação de caracteres e operações aritméticas no nível do hardware. A tarefa prática implementa rotinas de conversão e aritmética no PIC18F4550.

O Módulo 3 explora os conjuntos de instruções e os modos de endereçamento. Você compreenderá a diferença entre arquiteturas CISC e RISC, estudará o conjunto de instruções do PIC18F4550 e analisará como os modos de endereçamento determinam a flexibilidade e a eficiência do acesso a operandos.

O Módulo 4 abre a estrutura interna do processador ao apresentar o caminho de dados: a Unidade Lógica e Aritmética, os registradores, o registrador de instrução, o contador de programa e os barramentos internos. Você estudará como cada um desses componentes contribui para o ciclo de busca-decodificação-execução.

O Módulo 5 complementa o estudo do processador com a unidade de controle. Você aprenderá como máquinas de estados finitos controlam o sequenciamento de operações internas e comparará as abordagens de controle cabeado e microprogramado.

O Módulo 6 introduz o conceito de pipeline, explicando como a execução sobrelapada de instruções em estágios distintos aumenta o throughput do processador. Você analisará o pipeline de dois estágios do PIC18F4550 e compreenderá os fundamentos do pipeline clássico de cinco estágios.

O Módulo 7 aprofunda o estudo do pipeline ao tratar dos hazards de dados, controle e estruturais. Você aprenderá as técnicas de mitigação como forwarding, bolhas de pipeline e previsão de desvio, e implementará benchmarks para observar o impacto dessas técnicas no PIC18F4550. Este módulo coincide com a entrega parcial do Projeto Integrador.

O Módulo 8 inicia o bloco de memória com o estudo da hierarquia de memória. Você compreenderá o princípio da localidade temporal e espacial, analisará os diferentes tipos de memória e seus compromissos entre velocidade, capacidade e custo, e realizará experimentos para observar os efeitos da localidade de acesso no PIC18F4550.

O Módulo 9 aprofunda o estudo da memória cache, apresentando as organizações de mapeamento direto, associativo e associativo por conjunto, as políticas de substituição e as estratégias de escrita. Você implementará uma cache de software para compreender os algoritmos que regem o comportamento desse componente.

O Módulo 10 conclui o bloco de memória com o estudo da memória virtual, incluindo paginação, segmentação, tabelas de página e o Translation Lookaside Buffer. Você implementará um gerenciador de memória que simula swapping entre a RAM e a EEPROM do PIC18F4550.

O Módulo 11 inicia o bloco de periféricos com o estudo dos sistemas de entrada e saída. Você analisará as técnicas de polling e de E/S por interrupção, estudará o acesso direto à memória e implementará a interface com o display LCD, comparando o comportamento com polling e com interrupção.

O Módulo 12 aprofunda o estudo das interrupções e exceções no PIC18F4550. Você aprenderá sobre vetores de interrupção, prioridades, latência de interrupção e salvamento de contexto, implementando um sistema de base de tempo para o Projeto Integrador.

O Módulo 13 apresenta os protocolos de comunicação serial: UART, I2C e SPI. Você estudará as características de cada protocolo, compreenderá suas aplicações em sistemas embarcados e implementará comunicação via UART para depuração e via I2C ou SPI para integração com periféricos externos.

O Módulo 14 explora a conversão de dados analógicos para digitais e vice-versa. Você estudará o conversor ADC de 10 bits do PIC18F4550, os princípios de amostragem e o teorema de Nyquist, os modos de geração de PWM e a integração de temporizadores em sistemas de aquisição e geração de sinais.

O Módulo 15 encerra a disciplina com uma visão abrangente das arquiteturas paralelas e das tendências futuras. Você estudará a taxonomia de Flynn, os sistemas multinúcleo, as extensões SIMD, as GPUs para computação de propósito geral e os horizontes da computação quântica e neuromórfica, consolidando todos os conceitos do semestre em uma visão integrada. A semana seguinte é dedicada à entrega final e apresentação do Projeto Integrador.