Suporte às atividades 2014/2¶
Esta wiki é dedicada para a elaboração da disciplina de Microprocessadores do Curso de Engenharia Física da UFRGS.
Maiores detalhes sobre o curso podem ser encontrados no Plano de Ensino.
- Suporte às atividades 2014/2
- Introdução ao Logisim
- Memória RAM no Logisim
- Unidade Lógica e Aritmética no Logisim
- Exemplo de CPU no Logisim
- Processador Intel 8085
- Fluxogramas
- Exercícios Intel 8085
- Arquitetura x86 - Intel IA32
- Instruções para Projetos
Introdução ao Logisim¶
- Instale o Logisim a partir do repositório
- Siga as etapas iniciais do tutorial para iniciantes (Ajuda -> Tutorial)
- Monte dois tipos flip-flop, a sua escolha, a partir de portas lógicas
- Leia sobre a criação de sub-circuitos no tutorial
- Elabore uma porta lógica de AND de 4 bits como sub-circuito, conforme a figura 8-Bit_AND.png (ajustando o numero de bits).
- Perceba que o circuito utiliza distribuidores para distribuir o barramento com largura de bits > 1 em suas conexões individuais (cada bit separado);
- Certifique-se de configurar os pinos A e B como entrada e o pino de resultado como saída.
- Elabore uma porta lógica de AND de 4 bits como sub-circuito, conforme a figura 8-Bit_AND.png (ajustando o numero de bits).
Memória RAM no Logisim¶
O Circuito apresentado abaixo contém uma memória RAM que utiliza barramentos de 8 bits de endereços e 8 bits de dados. Para executar a simulação, selecione "Pulso habilitado" no menu "Simular" do Logisim. Você também poderá alterar a velocidade da simulação ajustando a frequência do pulso.
Atividade separada em duas etapas.- Até os primeiros 40 minutos de aula, teste e estude o circuito de memória RAM abaixo, verificando a funcionalidade de cada componente, largura dos barramentos. Circuito para simular no Logisim: RAM_I.circ
- Em uma segunda etapa cada aluno irá responder individualmente o questionário entregue pelo professor, podendo fazer uso da simulação no Logisim.
Unidade Lógica e Aritmética no Logisim¶
Exemplo de CPU no Logisim¶
Testar implementação CPU.circ ALU.circ cpumem.img (Crédito Warren Toomey - Descrição do circuito).
Processador Intel 8085¶
Conjunto de instruções do 8085 em http://home.iitk.ac.in/~ajalan/8085_is_details.pdf
Fluxogramas¶
Fluxograma de teste de lista ordenada
¶
Algoritmo Bubble sort¶
Ilustração de implementação: sorting.asm
Exercícios Intel 8085¶
Monte um algoritmo (fluxograma) e implemente em linguagem de montagem os seguintes programas:
- Programa que carregue os primeiros 100 endereços de memória com os seus respectivos endereços
- Partindo do programa do exercício 1, faça um programa que divida por 2 apenas os números pares de uma lista de números, mantendo os demais inalterados.
- Programa que calcule o produto de dois números de 8-bit, resultado de 8 bit.
- Programa que calcule o produto de dois números de 8-bit, resultado em 16 bit.
- Programa que calcule o quadrado de um número de oito bits.
- Programa que selecione o maior e o menor valor de uma lista de 10 elementos, armazenando-os na memória.
- Programa que conte o número de elementos presentes entre o maior e o menor elementos presentes em uma lista de números inteiros (inclusive os próprios).
Arquitetura x86 - Intel IA32¶
- Resumo da arquitetura
- Tabela de registradores do X86
- Manual do desenvolvedor Intel IA-32 e 64
- Instruction Set Summary
Assembly IA32¶
- Livro PC Assembly Language - Paul Carter
- Chamando funções em C a partir de assembler em Linux:
- Números de Fibonacci: fibo.asm (dois argumentos)
- Números de Fibonnaci: fibo_2.asm (três argumentos)
- Chamando funções em assembler a partir de C:
Depurando com o gdb e ddd¶
- Configurar o depurador para apresentar o assembly em sabor Intel. Insira "set disassembly-flavor intel" no arquivo ~/.gdbinit
$ echo set disassembly-flavor intel >> ~/.gdbinit
Floating Point Unit (FPU x87)¶
"Conjunto de instruções":www2.math.uni-wuppertal.de/~fpf/Uebungen/GdR-SS02/opcode_f.html
Instruções para Projetos¶
Aprovação no curso de Microprocessadores está condicionada à execução e apresentação de um projeto que faça uso dos conceitos e ferramentas cobertos pelo curso de Microprocessadores. Cada aluno deverá fazer uma proposta de projeto e, após aprovado, executá-lo resultando em um equipamento que acompanhado de sua programação atinge o objetivo pré-estabelecido, sendo esta condição mínima para avaliação positiva.
Cada proposta deve conter um fluxograma e/ou diagrama que esclarece o funcionamento do instrumento e modulariza a sua implementação. O projeto fará uso de programação em linguagem de baixo-nível e acesso explícito aos registradores de microcontroladores e microprocessadores. Isto é, sem o uso de bibliotecas de terceiros (como as bibliotecas do Arduino). A toolchain (ferramentas) deverão ser compatíveis com Debian/Labfis ou Scientific Linux. Fazer uso de assembly, C ou C++. Em casos justificados e viáveis serão aceitas outras linguagens de programação vistas no curso de Métodos Computacionais para Física.
Projetos que utilizam modelos físicos e matemáticos para atingir seus objetivos devem ser citados e referenciados no momento da proposta. Exemplo:
A análise ... será realizada por ajuste linear dos picos do espectro de potência obtido pela Transformada Rápida de Fourier calculada pelo algoritmo de Cooley–Tukey como descrito no artigo/tese/livro [Y].
A implementação de algoritmos específicos poderá ser baseada em códigos de terceiros. Neste caso o código original deve ser devidamente referenciado e o aluno deverá dominar a implementação do algoritmo no código utilizado no projeto.
Projetos em equipe¶
Serão aceitos projetos em equipe que deverão ser apresentados com alto refinamento em sua proposta, onde cada participante será responsável pela execução de etapas especificadas no diagrama/fluxograma na apresentação da proposta.
Projetos executados por uma equipe deverão fazer uso do git para controle de versão. Cada participante deverá registrar suas contribuições ao projeto com suas credenciais. O conceito individual de cada aluno está atrelado às evidências das suas contribuições ao projeto pela análise do histórico do repositório de acordo com as atribuições definidas na proposta. O repositório deverá estar acessível ao professor pelo lief ou via repositório público, ex: GitLab, Gitorius.
Será oferecida uma atividade de introdução ao controle de versão com o git e apoio ao gerenciamento da árvore de versões durante as aulas.
Cronograma¶
27/10 – Apresentações das propostas de projetos
29/10 – Git e estruturação dos projetos
19/11 – Aula de Apoio para execução de projetos
26/11 – Aula de Apoio para execução de projetos
03/12 – Prova II
08/12 – Apresentação dos projetos
10/12 – Apresentação dos projetos
15/12 – Exame
Introdução ao git para projetos¶
- Passos inciais: Lessões git do Software Carpentry
- Configuração do git:
$ git config
- Inicialização de repositórios:
$ git init
- Verificando o estado atual do repositório:
$ git status
- Adicionando arquivos seletivamente ao repositório:
$ git add
- Criando versões:
$ git commit
- Verificando o histórico de versões:
$ git log
- Visualizando diferenças entre versões:
$ git diff
- Compreender 1) Arquivos de trabalho; 2) Staging area; 3) Repositório
- Restaurando arquivos de versões anteriores:
$ git checkout
- Configuração do git:
- Trabalhando com Ramos (após familiarização com passos iniciais)
- Exemplo de repositório para colaboração
- Criar conta em http://gitlab.com
- Criar e configurar uma chave publica para uso do gitlab:
- Instruções para criar chave ssh em https://gitlab.com/help/ssh/ssh
- Carregar chave pública no gitlab em https://gitlab.com/profile/keys
- Clonar repositório exemplo de projeto:
$ git clone git@gitlab.com:rpp/micproc2014-2.git
- Criar branch (ramo) de acordo com instruções para trabalhar no projeto
- Para enviar versões para o repositório:
$ git push
- Para buscar atualizar repositório local a partir do servidor:
$ git pull
(ou$ git fetch$
)- Texto sobre
git fetch
egit pull
: http://longair.net/blog/2009/04/16/git-fetch-and-merge/
- Texto sobre
- Quando estiver OK, algum participante deve fundir os ramos com
$ git merge <nomedoramo>