=Paper= {{Paper |id=Vol-2185/CtrlE_2018_paper_24 |storemode=property |title=Ambiente Integrado de Hardware e Software Aplicado ao Ensino de Projeto de Sistemas Computacionais(Integrated Environment of Hardware and Software Applied to the Teaching of Computer Systems Design) |pdfUrl=https://ceur-ws.org/Vol-2185/CtrlE_2018_paper_24.pdf |volume=Vol-2185 |authors=Edson Lisboa,Lucas Fontes,Cícero Samuel Mendes,Guilherme Esmeraldo }} ==Ambiente Integrado de Hardware e Software Aplicado ao Ensino de Projeto de Sistemas Computacionais(Integrated Environment of Hardware and Software Applied to the Teaching of Computer Systems Design)== https://ceur-ws.org/Vol-2185/CtrlE_2018_paper_24.pdf
   Ambiente Integrado de Hardware e Software Aplicado ao
       Ensino de Projeto de Sistemas Computacionais
  Edson Lisboa1, Lucas Fontes2, Cícero Samuel Mendes2, Guilherme Esmeraldo2
      1
          Instituto Federal de Educação, Ciência e Tecnologia de Sergipe – Aracaju
           2
               Instituto Federal de Educação, Ciência e Tecnologia do Ceará – Crato
               edson.lisboa@academico.ifs.edu.br, lfonteesc@gmail.com,
                mendes.samuel99@gmail.com, guilhermealvaro@ifce.edu.br
    Abstract. Computer Organization and Architecture is a complex discipline for
    dealing with the design of computer systems having to be aligned with new
    technological trends. The scientific literature has opted for the use of
    simulation tools in pedagogical practices, due to the high cost for creating and
    maintaining specialized laboratories. However, due to purely theoretical
    classes and/or the use of very abstract simulation tools, there are gaps in the
    teaching-learning process of these concepts. This paper presents a new
    learning tool that combines simulation to interactions with physical and low-
    cost devices to establish complete scenarios of hardware projects.
    Resumo. Organização e Arquitetura de Computadores é uma disciplina
    complexa por tratar do projeto de sistemas computacionais tendo que estar
    alinhada às novas tendências tecnológicas. A literatura científica tem optado
    pelo uso de ferramentas de simulação, nas práticas pedagógicas, em função
    do alto custo para criação e manutenção de laboratórios especializados.
    Porém, devido às aulas puramente teóricas e/ou ao uso de ferramentas de
    simulação muito abstratas, surgem lacunas no processo de ensino-
    aprendizagem desses conceitos. Este artigo apresenta uma nova ferramenta
    de aprendizagem que alia simulação a interações com dispositivos físicos e de
    baixo custo, para estabelecer cenários completos de projetos de hardware.

1. Introdução
Organização e Arquitetura de Computadores (OAC) é uma das disciplinas mais
complexas presentes em cursos de Computação [Zorzo et al. 2017], pois além de tratar
de assuntos extensos, e não triviais, relacionados ao projeto e análise de sistemas
digitais e de computadores, deve estar alinhada às novas tendências tecnológicas, como
são os casos de Internet das Coisas (IoT), Sistemas Embarcados, Sistemas de
Computação Paralela e Sistemas Reconfiguráveis [Ghaffarian 2016]. A soma desses
fatores resulta em grandes desafios para o processo de ensino-aprendizagem nessa área
e demanda novas abordagens, métodos e ferramentas de hardware e software, inclusive,
fazendo uso de artefatos resultantes das inovações tecnológicas.
        O uso de simuladores para apoiar o aprendizado em OAC é uma prática comum
e, na literatura, há variados tipos e com diferentes características funcionais e não
funcionais. Alguns trabalhos, como os apresentados em [Nikolic et al. 2009] e [Penna,
Freitas 2013], realizam comparações entre diferentes simuladores, buscando estabelecer
critérios para adoção de algum deles para apoio em cursos de OAC. Entre os critérios de

                                                                                       89
comparação, destacam-se: granularidade (nível de detalhes, opções de configuração e
variabilidade de componentes de hardware); desempenho e precisão dos resultados da
simulação; suporte à simulação de aplicações de usuário; e interfaces gráficas
interativas.
       Contudo, de acordo com o estudo apresentado em [Larraza-Mendiluze, Garay-
Vitoria 2015], dentre os tópicos abordados em OAC, há lacunas no processo de ensino-
aprendizagem em “subsistemas de entrada/saída”, devido aos métodos de ensino
empregados que limitam-se a aulas puramente teóricas e/ou aos altos níveis de abstração
das ferramentas de simulação utilizadas, não possibilitando a exploração dos detalhes
técnicos que os dispositivos reais apresentam. Esse mesmo trabalho aponta ainda que
existe a necessidade de mais estudos para a educação nessa área e que é um campo
importante não só para OAC, mas também para outras áreas, como, por exemplo,
projeto de sistemas computacionais, sistemas operacionais e interação homem-
computador.
        Outro problema comum é a ausência de exposição dos estudantes ao hardware
físico, onde, o contato com os componentes eletrônicos físicos incentiva o aprendizado
de todas as fases de desenvolvimento de um sistema digital ou periférico [Black 2016].
Nesse sentido, o desafio maior torna-se a composição de laboratórios especializados,
com suporte de profissionais experientes, e a disponibilidade dos materiais a serem
utilizados nas aulas práticas. Alguns trabalhos, como os apresentados em [Black
2016][Neto, Borges, Silva 2017], buscaram contornar esse problema pelo uso do
Arduino em práticas laboratoriais. Arduino é uma plataforma eletrônica baseada em
microcontrolador, com especificação aberta e tem sido largamente utilizada em projetos
de sistemas eletrônicos por estudantes, hobistas e profissionais [Arduino 2018]. Seu
grande sucesso vem sendo atribuído à sua simplicidade, facilidade de uso, o baixo custo
e à diversidade de produtos e complementos criados pela indústria [Kushner 2011].
        Diante do exposto, torna-se importante buscar soluções que reúnam a dinâmica e
versatilidade dos processos baseados em simulação, acompanhada da importância e dos
desafios da exposição ao hardware real. Com esse intuito, este trabalho apresenta o
CompSim, uma ferramenta de apoio ao aprendizado em projeto de sistemas
computacionais, abrangendo hardware e software de baixo nível, com funcionalidades
de simulação e interação com dispositivos de hardware real. O simulador proposto
inclui componentes virtuais de hardware, como processador, memórias, barramentos e
periféricos, bem como permite a integração ao Arduino, onde este passa a se comportar
como um periférico do sistema computacional simulado. Com esse suporte de
integração, espera-se tornar o aprendizado em subsistemas de entrada/saída mais
atrativo e dinâmico, além de fornecer subsídios para o desenvolvimento de projetos de
sistemas digitais físicos, estes com complexidades escaláveis de acordo com as
necessidades do processo de ensino-aprendizagem e da metodologia adotada.
       Este artigo está estruturado da seguinte maneira: Na seção a seguir, apresenta-se
o simulador CompSim; Na Seção 3, é tratado o modelo de interface de entrada/saída do
Arduino; A Seção 4 apresenta o modelo de integração CompSim-Arduino; A Seção 5
discute os potenciais dessa integração e, por fim, a Seção 6 apresenta as conclusões e
demarca os trabalhos futuros.




                                                                                     90
2. O Simulador CompSim
CompSim1 inclui uma plataforma de hardware simulável, chamada de “Mandacaru”, a
qual inclui um processador conceitual, memórias cache e RAM, barramentos de sistema
e de periféricos, e dispositivos de entrada (Teclado) e de saída (Vídeo). Esses
componentes virtuais foram concebidos para suportar o estudo de diferentes conceitos
de OAC, como, por exemplo, fases do ciclo de instrução, representação em memória de
dados numéricos, não-numéricos e de estruturas de dados, conjunto de instruções da
arquitetura (tipos, tamanhos e formatos de instruções), modos de endereçamento,
programação em nível de máquina, representação de construções de linguagens de alto
nível, cálculo dos tempos de acesso aos dados, entre outros.
       O CompSim possui uma interface gráfica que permite configurar os
componentes da plataforma Mandacaru, programar uma aplicação para execução no
processador conceitual, chamado de “Cariri”, configurar, executar e visualizar a
simulação, bem como analisar o desempenho do sistema após uma simulação. A Figura
1 mostra a interface gráfica do simulador CompSim.




                    Figura 1 - Interface gráfica do simulador CompSim.
       Na Figura 1, pode-se observar os seguintes componentes gráficos: (a) Editor de
código: inclui recursos para simplificar a codificação de uma aplicação, como número
de linhas, teclas de atalho, um assistente de codificação, entre outros. Este componente
está integrado a um montador (Assembler) que realiza análises léxica, sintática e
semântica no código-fonte da aplicação, tradução deste para bytecodes, com cópia para
memória RAM; (b) CPU: durante uma simulação, exibe os registradores do processador
Cariri e respectivos valores assumidos. Os registradores de endereçamento possuem
cores diferenciadas, onde as respectivas cores são utilizadas para referenciar diferentes
posições da memória RAM.; (c) Memória cache: exibe as linhas da cache e respectivos

1
    CompSim. Apresentação. Disponível em: .
    Acesso em: 06 abr. 2018.

                                                                                           91
valores. Este componente gráfico destaca a linha e a palavra endereçada pelo
processador durante uma simulação; (d) Memória RAM: exibe os conteúdos (instruções
e dados) de todos os endereços da componente virtual memória RAM. Os componentes
gráficos Memória RAM e CPU estão integrados, de forma que, durante uma simulação,
as posições de memória são coloridas de acordo com as respectivas cores dos
registradores de endereçamento; (e) Vídeo: exibe os caracteres enviados para o
componente virtual de vídeo; (f) Teclado: disponibiliza uma linha de comandos que
permite ao usuário interagir com uma aplicação através do componente virtual teclado;
e (g) Controles de simulação: inclui controles que permitem configurar o tempo de
simulação e frequência de relógio de sistema (clock), iniciar, executar passo-a-passo,
parar e reiniciar uma simulação.
        Na Figura 1, está ilustrada a execução da aplicação “Hello, World!”, a qual
levou 3 segundos - um total de 300 ciclos de relógio, a uma frequência de 100 Hz de
relógio de sistema - para impressão da string no componente virtual de Vídeo (e).
        Analisando este cenário, percebe-se que o aprendizado em “subsistemas de
entrada/saída” estaria bastante limitado à interações com os programas de usuário,
utilizando apenas os componentes gráficos de Vídeo e Teclado. Sendo assim, é
fundamental acrescentar recursos que possibilitem a integração de diferentes
dispositivos de entrada e saída, tornando-os mais próximos ao que se aplica no
desenvolvimento de projetos de sistemas eletrônicos reais. As seções a seguir detalham
a integração do simulador CompSim com o Arduino, e discutem as potencialidades
resultantes dessa conjunção no aprendizado em entrada/saída e projetos de sistemas
digitais.

3. Interface de Entrada/Saída do Arduino UNO
        Os microcontroladores Atmega8, Atmega168 e Atmega328p, presentes nas
diferentes plataformas Arduino, incluem as portas2 B, C e D, que são utilizadas em
operações de entrada/saída digitais e analógicas. As operações em cada uma dessas
portas podem ser realizadas a partir da manipulação de 3 registradores dos controladores
Atmega, que são: 1) DDRx: determina se os bits da porta x serão utilizados para
operação de entrada de dados (INPUT ou leitura) ou de saída (OUTPUT ou escrita); 2)
PORTx: controla a tensão dos bits relacionados à porta x, onde poderão estar com
voltagem alta (HIGH, nível lógico “1”) ou baixa (LOW, nível lógico “0”); e 3) PINx:
realiza a leitura do estado dos bits da porta x, quando configurados como entrada
(INPUT). Cabe ressaltar que os registradores DDRx e PORTx são de leitura/escrita de
dados, enquanto que PIN é apenas de leitura.
        Cada bit desses registradores corresponde a um único pino em uma placa de
circuito impresso (PCI) do Arduino. Por exemplo, na PCI do Arduino UNO, a qual é
ilustrada na Figura 2, o bit 0, dos registradores DDRB, PORTB e PINB, refere-se ao
pino PB0 (Port B pin 0), que corresponde ao pino digital 8 da interface de entrada/saída
na sua PCI.



2

    Porta é um espaço de endereçamento que é frequentemente utilizado em operações de entrada/saída.


                                                                                                   92
                  Figura 2 – Interface de entrada/saída do Arduino UNO.
        As portas B e D são utilizadas em operações de entrada/saída digitais, enquanto
que a porta C utiliza-se apenas em operações de entrada analógica. Os pinos 3, 5, 6 (bits
4, 6 e 7 da porta D) e 9, 10, 11 (bits 1, 2 e 3 da Porta B) podem ainda ser utilizados para
saída analógica via PWM (Pulse With Modulation3) (a Figura 2 mostra a posição das
portas e respectivos pinos em uma PCI Arduino UNO).

4. Interface de Integração CompSim-Arduino UNO
O processador Cariri, presente na plataforma Mandacaru, em seu conjunto de instruções
da arquitetura, possui a instrução INT para operações de entrada/saída, com o código de
operação 20 para leitura de um caractere a partir de um determinado periférico e código
21 para escrita de um caractere em um determinado periférico.
        Essas operações de entrada/saída devem atender às seguintes condições: 1) Em
operações de leitura/escrita, os 8 bits mais significativos do Acumulador serão
utilizados para endereçamento de periféricos. Com isso, podem ser endereçados até 256
periféricos diferentes (8 bits → 28 = 256 periféricos); 2) Em operações de escrita, os 8
bits menos significativos do Acumulador serão utilizados para guardar o dado que será
escrito em algum periférico; e 3) Em operações de entrada, após a leitura de periférico,
o dado lido estará disponível no Acumulador. Desta forma, nas operações de
entrada/saída, o registrador Acumulador do processador Cariri passa a incluir os campos
AC High e AC Low, que podem ser vistos na Figura 3.




      Figura 3 - Campos do registrador Acumulador em operações de Entrada/Saída.
        Uma vez que se conecta uma PCI Arduino UNO ao computador onde está sendo
executado o CompSim, automaticamente, as instruções “INT 20” e “INT 21” passam a
suportar operações de entrada/saída em suas portas. A Figura 4 ilustra a organização da
plataforma Mandacaru conectada ao Arduino UNO, onde pode-se observar a existência

3

    PWM é uma técnica que utiliza diferentes amplitudes de sinais digitais para representar um sinal
    analógico.


                                                                                                       93
de controladores entre o barramento de periféricos e os dispositivos Vídeo, Teclado e
Arduino UNO. Os controladores são importantes pois traduzem o formato das
requisições do processador Cariri para o formato específico de cada periférico.




             Figura 4 - Plataforma Mandacaru conectada ao Arduino UNO.
        Já a Figura 5 detalha a interface do controlador virtual que realiza a integração
do barramento de periféricos da plataforma Mandacaru à PCI Arduino UNO. Ao
receber uma requisição de entrada/saída proveniente do processador, via barramento de
periféricos, e dependendo do tipo de operação e da porta especificada, o controlador
realizará uma escrita ou leitura na respectiva interface de pinos da PCI Arduino UNO
conectada a ele.




    Figura 5 - Detalhe da interface de conexão do Arduino UNO à plataforma
    Mandacaru via controlador.


                                                                                      94
        Com a integração de uma PCI Arduino UNO ao barramento de periféricos, a
plataforma Mandacaru passa a contar com uma gama maior de periféricos de
entrada/saída. A Tabela 1 sumariza todos os periféricos, respectivos tipos, modos de
operação e número portas.

                           Tabela 1 - Periféricos do CompSim.
              Periférico              Tipo        Modo de Operação          Porta
Vídeo                                Virtual          Saída Digital           0
Teclado                              Virtual         Entrada Digital          1
Arduino - Porta B                     Físico      Entrada/Saída Digital       2
Arduino - Porta C                     Físico       Entrada Analógica          3
Arduino - Porta D                     Físico      Entrada/Saída Digital       4
Arduino - Porta PWM (Pino 3)          Físico        Saída Analógica           5
Arduino - Porta PWM (Pino 5)          Físico        Saída Analógica           6
Arduino - Porta PWM (Pino 6)          Físico        Saída Analógica           7
Arduino - Porta PWM (Pino 7)          Físico        Saída Analógica           8
Arduino - Porta PWM (Pino 10)         Físico        Saída Analógica           9
Arduino - Porta PWM (Pino 11)         Físico        Saída Analógica          10



        Na tabela, pode-se observar que os periféricos Vídeo e Teclado são do tipo
virtual, enquanto que os demais são físicos, por estarem relacionados às portas do
Arduino UNO. Outro detalhe importante está relacionado à porta PWM, a qual inclui 6
pinos independentes, e, por causa disso, cada um deles recebeu um endereço de porta
específico, podendo comportar até 6 periféricos.

5. Discussão de Resultados
Uma vez que a plataforma Arduino passa a integrar o simulador CompSim, o estudo de
OAC sofre em incremento no potencial de ensino-aprendizagem em subsistemas de
entrada/saída. Agora, os estudantes podem agregar, às experiências práticas em
laboratório, projetos de periféricos e de sistemas eletrônicos com Arduino.
        Um exemplo básico de periférico físico do CompSim utilizando Arduino UNO
pode ser visto na Figura 6. Nesse exemplo, o periférico consiste em um LED ligado a
um resistor de 220 Ohms e conectado ao pino 8 da PCI, que pode ser ligado/desligado a
partir de operações de entrada/saída pelo processador Cariri.




                                                                                    95
      Figura 6 – Diagrama de um periférico com LED conectado ao pino 8 da PCI
      Arduino UNO.
       Os códigos-fonte, ilustrados na Figura 7, mostram como ligar o LED conectado
ao pino 8 da PCI Arduino UNO, sendo que em (a) o código é descrito C/C++ nativo da
IDE Arduino, e em (b), é descrito em Assembly do processador Cariri.
       Observando os dois códigos, nas Figuras 7 (a) e (b), percebe-se que o código
Assembly inclui maior número de linhas, porém ao considerarmos apenas as instruções
que operam o periférico, percebe-se que: na Linha 5, carrega-se no Acumulador o dado
que será escrito na porta B (porta na qual está conectado o LED); na Linha 7, o
endereço da porta B é adicionado ao Acumulador; e na Linha 11, realiza-se a operação
de saída (nela, o comando de escrita é enviado ao controlador do Arduino UNO, para
que ele ative o LED).
1.     //LED conectado ao pino 8            1.    ; Codigo do programa
2.     int led = 8;                         2.    .code
3.                                          3.
4.     void setup() {                       4.    ;Carrega dado no AC para escrita
5.       //Seta pino 8 como saida           5.    LDA high
6.        pinMode(led, OUTPUT);             6.
7.     }                                    7.    ;Add endereço da porta B ao AC
8.                                          8.    ADD arduino_portB
9.     //rotina para ligar o LED            9.
10.    void loop() {                        10.   ;Realiza operacao de escrita
11.                                         11.   INT output
12.        //Realiza escrita digital        12.
13.        digitalWrite(led, HIGH);         13.   ;encerra a aplicacao
14.    }                                    14.   INT exit
                                            15.
                                            16.   ; Dados do programa
                                            17.   .data
                                            18.   high: DD 1;
                                            19.   arduino_portB: DD 512
                                            20.   output: DD 21
                                            21.   exit: DD 25
                                            22.
                                            23.   ; Pilha do programa
                                            24.   .stack 10

           (a) Código C/C++ Arduino                (b) Código Assembly CompSim

      Figura 7 – Comparativo entre código Arduino e CompSim para periférico da
      Figura 6.
        A aplicação ilustrada nas Figuras 6 e 7 consiste de um exemplo básico de
construção de periféricos. Com o mesmo conceito proposto para as operações de
entrada/saída digital e analógicas no CompSim, os estudantes poderão criar periféricos
mais complexos, como, por exemplo, impressoras 3D, estações meteorológicas,
veículos programáveis, robôs, etc. Naturalmente que, para construção de dispositivos
eletrônicos mais elaborados, os estudantes necessitarão ser introduzidos à eletrônica

                                                                                     96
analógica/digital básica ou fazer uso de subsistemas eletrônicos complementares pré
fabricados, também conhecidos por shields. A indústria atualmente oferece variados
tipos de shields, como displays gráficos, motores, sensores, interfaces de comunicação
com/sem fio, conversores, acionadores elétricos, subsistemas de armazenamentos de
dados, entre outros.
       Além disso, há potencial para a criação de sistemas eletrônicos completos, como
sistemas para automação em geral, como horta inteligente ou automação residencial;
sistemas de segurança com controle de acesso via digitação de senha, RFID, Biometria
ou reconhecimento facial; jogos eletrônicos, com interfaces de joysticks especializados
ou sensores de movimento; entre outros.
       Atualmente, o simulador CompSim vem sendo utilizado, em práticas
laboratoriais, como apoio pedagógico à disciplina de OAC de um curso de Bacharelado
em Sistemas de Informação, como pode ser visto na Figura 8. Com a recente integração
CompSim-Arduino UNO, propôs-se aos estudantes de uma nova turma, como projeto
de disciplina, a criação de um novo periférico físico para a plataforma Mandacaru.
Serão disponibilizados 10 kits “Arduino Iniciante” e espera-se que, com esse
experimento, até o final do semestre letivo, os estudantes tenham compreendido com
maior profundidade os conceitos de subsistemas de entrada/saída e tenham sido
introduzidos ao projeto de sistemas digitais, empregando-os na criação e aplicação de
novos periféricos.




           Figura 8 – Aula de AOC em laboratório com suporte do CompSim.

6. Conclusões
Este artigo apresentou uma proposta de integração CompSim-Arduino, na qual uma PCI
Arduino UNO torna-se um periférico físico da plataforma virtual Mandacaru para
compor um ambiente completo de simulação de sistemas computacionais com hardware
e software integrados. Essa proposta busca agregar novos perfis de formação na
disciplina de Organização e Arquitetura de Computadores, onde os estudantes podem
empregar os conceitos aprendidos em subsistemas de entrada/saída e fundamentos de
eletrônica básica para projetar dispositivos físicos reais.
       Os trabalhos futuros incluem a adição de novos componentes à plataforma
Mandacaru, visando disponibilizar cenários reais e fluxo completo de projetos de
sistemas computacionais, a composição de projetos diversificados para o

                                                                                    97
desenvolvimento de novos sistemas eletrônicos reais e integração com novas
tecnologias em dispositivos eletrônicos, como por exemplo, hardware reconfigurável
FPGA (Field Programming Gate Array).

Agradecimentos
Agradecemos a IFS/PROPEX/Petrobrás e IFCE/FUNCAP por fomentarem esta
pesquisa através da concessão de bolsas e apoio financeiro.

Referencias
Arduino.     (2018)     ”Arduino       -     Introduction”.    Disponível             em:
  . Acesso em: 26 mar. 2018.
Black, M. (2016) “Export to arduino: a tool to teach processor design on real hardware”.
   Journal of Computing Sciences in Colleges, 31(6), pp.21-26.
Ghaffarian, R. (2016) “Microelectronics packaging technology roadmaps, assembly
  reliability, and prognostics”. Facta universitatis-series: Electronics and Energetics,
  29(4), pp.543-611.
Neto, A. M. A., Borges, J. A. dos S. and Silva, G. P. (2017) “Extensão do Simulador
  SimuS com uso do Protocolo Firmata”. XVIII Workshop de Iniciação Científica do
  XVII Simpósio em Sistemas Computacionais de Alto Desempenho (WIC-WSCAD),
  pp.123-128.
Nikolic, B.; Radivojevic, Z.; Djordjevic, J. and Milutinovic, V. (2009) A Survey and
  Evaluation of Simulators Suitable for Teaching Courses in Computer Architecture
  and Organization. IEEE Transactions on Education, Vol. 52, No. 4.
Kushner, D. (2011) “The making of arduino”. IEEE Spectrum, 26.
Penna, P. H. M. M. and Freitas, H. C. (2013) Análise e Avaliação de Simuladores de
  Sistemas Completos para o Ensino de Arquitetura de Computadores. International
  Journal of Computer Architecture Education (IJCAE), v. 2, no. 1, pp 13-16.
Zorzo, A. F., Nunes, D., Matos, E. S., Steinmacher, I., Leite, J. C., Araujo, R., Correia,
  R. C. M. and Martins, S. (2017) “Referenciais de Formação para os Cursos de
  Graduação em Computação”. Sociedade Brasileira de Computação (SBC). 153p.




                                                                                       98