CI064                                   © Roberto André Hexsel, 2014-2017




Da tarefa

Suas respostas devem ser enviadas por e-mail para rhexsel@gmail.com, até as 23:59 de amanhã, com as respostas textuais em formatação simples, mais os arquivos texto contendo as soluções que envolvem escrever código. Seus programas serão executados e só receberão crédito caso produzam resultados corretos. Plágio não será tolerado, podendo acarretar um inquérito disciplinar. O trabalho pode ser efetuado em duplas. Os dois nomes são parte da resposta.
Problema 3: altere o tratador de interrupções para que ele imprima na tela do simulador o tempo decorrido a cada dez microssegundos: 500 ciclos * 20ns/ciclo = 10us. Seu novo tratador deve ser escrito em assembly, e é uma extensão do tratador extCounter em include/handlers.s. A versão estendida deve imprimir o tempo a cada vez que decorrerem 10us de tempo simulado, como medido pelas interrupções. Para facilitar a visualização dos resultados, seu tratador de interrupção deve, a cada evento do relógio, fazer o equivalente a to_stdout('\n'); print(num); to_stdout('\n'); Veja o código destas funções em include/cMIPSio.c. Note que parte do trabalho já está pronto em extCounterInt.c; você deverá acrescentar o que for necessário a include/handlers.s. A constante MAX, em extCounterInt.c, deve ser aumentada para que ocorram, no mínimo, cinco eventos de exibição do tempo. A saída do seu programa deve ser algo parecido com
\n00000001\n # primeira interrupção \n00000002\n # segunda \n00000003\n # terceira 00000000 # mostrará primos a seguir 00000001 # primeiro primo 00000002 00000003 00000005 00000007 0000000b 0000000d 00000011 00000013 \n00000004\n # quarta interrupção 00000017 0000001d 0000001f 00000025 00000029 0000002b \n00000005\n # quinta interrupção 0000002f 00000035 0000003b 0000003d 00000043 00000047 00000049 0000004f 00000053 00000059 00000061 ... # mais do que 100 números primos 000000xx # xx primos encontrados ok # ocorreram mais de 10 interrupções core.vhd:875:7:@XXXXns:(assertion failure): cMIPS BREAKPOINT at PC=000000c8 opc=010000 fun=100000 brk=10000000000000000000 SIMULATION ENDED (correctly?) AT exit(); /home/roberto/cMIPS/tb_cmips:error: assertion failed /home/roberto/cMIPS/tb_cmips:error: simulation failed
A parte em vermelho da mensagem de término da simulação é o tempo simulado. Pista: em semestres anteriores, a maioria dos problemas foi em decorrência do uso compartilhado e concorrente de registradores pelos dois processos deste programa.
--fim desta tarefa--