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.

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.

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.
  1. 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
  2. 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:

  1. Programa que carregue os primeiros 100 endereços de memória com os seus respectivos endereços
  2. 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.
  3. Programa que calcule o produto de dois números de 8-bit, resultado de 8 bit.
  4. Programa que calcule o produto de dois números de 8-bit, resultado em 16 bit.
  5. Programa que calcule o quadrado de um número de oito bits.
  6. Programa que selecione o maior e o menor valor de uma lista de 10 elementos, armazenando-os na memória.
  7. 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

Assembly IA32

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

  1. 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
  2. Trabalhando com Ramos (após familiarização com passos iniciais)
  3. Exemplo de repositório para colaboração
    • Criar conta em http://gitlab.com
    • Criar e configurar uma chave publica para uso do gitlab:
    • 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$)
    • Quando estiver OK, algum participante deve fundir os ramos com $ git merge <nomedoramo>

8-Bit_AND.png (14,2 KB) Rafael Pezzi, 18/08/2014 15:15

RAM_I.png (6,1 KB) Rafael Pezzi, 20/08/2014 07:14

RAM_I.circ (5,9 KB) Rafael Pezzi, 20/08/2014 07:14

ALU_exemplo.circ (34,9 KB) Rafael Pezzi, 25/08/2014 17:05

CPU.circ (64,9 KB) Rafael Pezzi, 27/08/2014 16:37

ALU.circ (29,8 KB) Rafael Pezzi, 27/08/2014 16:37

cpumem.img (69 Bytes) Rafael Pezzi, 27/08/2014 16:37

Teste_de_lista_ordenada.png (22,9 KB) Rafael Pezzi, 08/09/2014 16:33

Bubble_sort.png (28,1 KB) Rafael Pezzi, 10/09/2014 15:58

sorting.asm (1,3 KB) Rafael Pezzi, 10/09/2014 16:06

LFSR_PRNG.asm (1,2 KB) Rafael Pezzi, 17/09/2014 15:23

fibo.asm (1,7 KB) Rafael Pezzi, 22/09/2014 16:35

fibo_2.asm (2 KB) Rafael Pezzi, 22/09/2014 16:35

maiordetres.asm (988 Bytes) Rafael Pezzi, 22/09/2014 16:35

chamamaiorde3.c (578 Bytes) Rafael Pezzi, 22/09/2014 16:35

sqrt_float.asm (743 Bytes) Rafael Pezzi, 29/09/2014 17:51

quad.asm (2,8 KB) Rafael Pezzi, 29/09/2014 17:52

call_sqrt_float.asm (2 KB) Rafael Pezzi, 06/10/2014 16:44

sqrt_float.asm (547 Bytes) Rafael Pezzi, 06/10/2014 16:44

Lista_exercícios_primeira_área.pdf (44,6 KB) Rafael Pezzi, 06/10/2014 18:48

Slides_AVR_-_Introdução.odp (468,1 KB) Rafael Pezzi, 03/11/2014 17:40

asm_avr.zip (20,5 KB) Rafael Pezzi, 05/11/2014 15:44

Prova_1_-_2014-2_-_Respostas.pdf (148,7 KB) Rafael Pezzi, 01/12/2014 15:12

Teste_1_-_Memória_RAM_I_-_Logisim_-_Respostas.pdf (24,3 KB) Rafael Pezzi, 01/12/2014 20:01

solucao.provaPrat1-x86.zip (717,4 KB) Rafael Pezzi, 04/12/2014 12:49

Respostas-teste8085.zip (4,9 KB) Rafael Pezzi, 04/12/2014 12:52

Prova__-_2014-2_-_Respostas.pdf (52,5 KB) Rafael Pezzi, 09/12/2014 17:48