Exercício 5 - Uso e criação de uma plataforma de prototipagem

Informações Gerais

Dicas sobre o Exercício

Motivação

Objetivos

Esse exercício vai ser dividido em duas partes e, ao final delas, vocês devem ser capazes de:

Contextualização

Atenção: Todos os arquivos que você precisa para essa atividade estão disponíveis em /home/staff/rodolfo/mc723/download.

Parte 1 - Usando ArchC

Crie um programa simples em C. Compile-o para o processador MIPS usando o cross-compiler existente em /l/archc/compilers/bin da máquina xaveco (somente nela, você pode executar os programas compilados em qualquer outra máquina, mas os compiladores só estão na xaveco).
mips-elf-gcc programa.c -o programa -specs=archc

Baixe o modelo do processador MIPS para o ArchC 2.0 beta1 disponível na página do ArchC (atenção, baixe a versão específica para o ArchC 2.0 beta1).  Baixe também o modelo SPARC e recompile seu programa para executar no SPARC. Faça o mesmo para o PowerPC. Sugestão: crie executáveis diferentes, um para cada processador, com nomes diferentes. Obs.: Qualquer programa pode ser um programa simples.

Utilize as ferramentas de depuração com seu processador (gdb) para executar o código. Por último, verifique a organização dos executáveis (endereços de memória do código) com o utilitário objdump (existe uma versão específica para cada processador,  mips-elf-objdump, sparc-elf-objdump e powerpc-elf-objdump). O foco nesse momento é a familiarização com as ferramentas disponíveis.

Parte 2 - Usando ARP

Nessa parte do exercício e nos trabalhos será utilizada a biblioteca de classes C++ chamada SystemC (é necessário fazer um registro gratuito para poder baixar qualquer coisa do site. Uma cópia de todos os arquivos está disponível no meu homedir do IC3). Com SystemC é possível modelar um sistema complexo, com interconexões entre módulos de hardware e software, num nível de abstração bem alto.

Existem vários níveis de modelagem em SystemC. Um dos mais altos é o TLM (veja manual do TLM 1.0 no site do SystemC ou no meu homedir do IC3), que iremos utilizar nesse exercício. Uma definição bem simplória de TLM significa que tudo o que é feito no circuito é feito através de chamadas de funções, ao contrário das linguagens de descrição de hardware convencionais que utilizam sinais para passagem de dados entre os componentes.

Acima de SystemC, será utilizada a linguagem ArchC, que foi desenvolvida para descrever processadores. O objetivo do uso de ArchC nessa fase é apenas gerar processadores para serem usados nos simuladores. Não será dada ênfase, no momento, às construções da linguagem. Existem modelos dos processadores MIPS e SPARC em ArchC já prontos para serem usados. Para trabalhar nesse exercício, uma versão mais nova  de ArchC que a disponível no site será utilizada. Existe um arquivo chamado archc-svn-src.tgz no meu homedir para quem quiser instalar fora do IC.

Consulte todos os manuais acima para tirar dúvidas. Também existe um tutorial SystemC + TLM + ArchC no meu diretório da disciplina. O tutorial está numa versão preliminar. Por favor, não coloquem online.

Para gerenciar tudo isso acima, existe o utilitário ARP que, junto com uma hierarquia de diretórios, permite que sejam criadas plataformas (= conjunto de componentes de hardware + processador + software). O uso do ARP é o foco desse exercício. Todas as atividades serão feitas sobre ele. Para instala-lo, basta descompactar o arquivo arp-base.tgz e seguir as instruções dos arquivos INSTALL e README. Obs.: Você deve instalar o ARP em algum lugar onde tenha permissões de escrita, já SystemC, ArchC e TLM podem ser usados diretamente do meu homedir.

Uma das facilidades do ARP é poder empacotar e desempacotar componentes e plataformas. Para isso, existem os parâmetros --pack e --unpack, respectivamente. A versão padrão do ARP vem apenas com utilitários de trabalho. A primeira atividade é descompactar o exemplo helloworld_mips.01.arp.pack. Antes de executar, edite o arquivo Makefile do diretório raiz do ARP e defina corretamente as variáveis de ambiente para os locais onde foram instalados SystemC, TLM e ArchC (você pode usar as versões que estão instaladas em /home/staff/rodolfo/mc723/...). Defina também o nome da plataforma que será simulada (helloworld_mips.01)

./arp --unpack /home/staff/rodolfo/mc723/download/helloworld_mips.01.arp.pack
make
make run-bin

Se o arquivo Makefile foi configurado corretamente conforme as instruções do README e INSTALL, o exemplo deve escrever uma mensagem na tela após compilar todos os componentes.

Parte 3 - Criando novas plataformas

Sua atividade é utilizar o processador SPARCv8 para fazer exatamente a mesma tarefa da Parte 2. O pacote sparcv8-archc2x-branch.arp.pack está no meu homedir com o processador (somente o processador, sem o hello.c). Crie uma outra plataforma usando o processador SPARC no lugar do MIPS. Para trocar o processador, você deverá editar o arquivo defs.arp para trocar MIPS por SPARC e alterar o main.cpp para trocar também MIPS por SPARC. Isso fará a alteração da plataforma. Para alterar o software, replique também o diretório do software e altere o compilador que está sendo usado (de MIPS para SPARC).

Após executar o mesmo hello world, troque o programa por um outro (criando outro diretório no diretório software). Crie e execute o programa que desejar.

Por último, altere o módulo de memória para exibir informações de acesso na tela. Todas as tentativas de acesso devem ser computadas (leituras e escritas) e ela deve escrever uma mensagem a cada 100 ou 1000 acessos. Para fazer isso, copie o diretório do módulo da memória com outro nome e faça suas modificações nesse novo diretório.

Entrega

Enviar um relatório de, no máximo, 2 páginas, descrevendo a atividade realizada e os resultados obtidos. Analisar e comentar o resultado. Empacote a plataforma final usando arp --pack, renomeie o arquivo final para os seis dígitos do seu ra e tipo .arp e compacte os dois arquivos num tgz.