Trabalho Prático II – SDAC Última revisão: 16/06/2005 Especificação: O trabalho prático II da disciplina de SDAC (versão 2005) consiste no acréscimo de um novo módulo à descrição TL do processador R8, bem como de algumas pequenas alterações na arquitetura original para suportar as novas funcionalidades. A idéia fundamental do trabalho é que este novo módulo seja um controlador de DMA simples. Este deve permitir carregar/descarregar um conjunto de informações em/de blocos contíguos da memória do processador, sem intervenção do processador. A estrutura geral da implementação é mostrada na Figura 1 abaixo. A implementação do módulo deve também ser realizada no nível de abstração de transação (TL). Figura 1 – Estrutura do Processador R8 com Módulo DMA acrescentado. O funcionamento do módulo DMA deve obedecer à especificação a seguir. Primeiro, este módulo deve possuir um interface de comunicação exclusiva com o processador, usando um protocolo do tipo “aperto de mão” implementado através do canal handshakeChl da Figura 1. Segundo, o processador escolhe se deseja atender a solicitações por parte do DMA ou não. Isto deve ser feito permitindo controle por software. Para tanto, deve-se criar duas novas instruções no processador, denominadas, por exemplo, ENI e DISI, abreviaturas de Enable Interrupt e Disable Interrupt, respectivamente. As instruções não possuem operandos explícitos, e devem controlar a condição de possibilidade ou impossibilidade para atender solicitações do módulo DMA. Tipicamente, após uma operação de inicialização (reset) do processador, solicitações não são atendidas. Apenas após a execução de uma instrução ENI solicitações do DMA podem ser atendidas. Obviamente, após a execução de uma instrução DISI solicitações do DMA não são atendidas, até que uma instrução ENI seja executada. Terceiro, o funcionamento do módulo de DMA se dá em 4 etapas: (i) aguardar que algum periférico externo solicite serviço, arbitrando quem atender em primeiro lugar, caso mais de um periférico solicite serviço ao mesmo tempo; (ii) interagir com o processador para assumir o controle da interface com a memória; (iii) comandar o processo de transferência de dados do periférico para a memória; (iv) ao final da transferência, liberar a interface de memória para o processador e informar ao periférico o final de atendimento da solicitação de transferência, voltando à etapa (i) acima. Note-se que não foram representados canais de comunicação e interfaces entre periféricos e o DMA. Escolher como implementar estas interfaces é deixado como parte do trabalho de especificação. A escolha deve ser documentada no relatório final. Sugere-se uma interface de comunicação simples entre o DMA e seus periféricos, com a seguinte funcionalidade. Periféricos de entrada fornecem o endereço inicial de escrita do bloco, seguido do tamanho do bloco. Após estas informações de controle serem recebidas pelo DMA, a transmissão se dá como uma rajada de envios pelo periférico, considerando o DMA rápido o suficiente para escrever na memória pelo menos na mesma taxa de recepção dos dados do periférico. Periféricos de saída fornecem inicialmente o endereço inicial do bloco a ser lido, seguido do tamanho do bloco. Após estas informações de controle serem recebidas pelo DMA, este inicia a transmissão como uma rajada de envios para o periférico, considerado rápido o suficiente para receber dados pelo menos na mesma taxa de envio pelo DMA. A implementação dos periféricos deve ser parte do desenvolvimento do testbench do sistema. Algumas regras básicas a serem respeitadas no trabalho são apresentadas abaixo: 1. Todas as instruções originais da R8 devem continuar sendo passíveis de execução, sem modificação do seu código objeto original. Ou seja, o novo processador deve ser compatível com o R8 original a nível de código objeto. 2. O testbench desenvolvido deve incluir um software de aplicação na R8, que recebe dados via DMA, processa os mesmos e os disponibiliza a um periférico externo. Atenção aos problemas de sincronização entre o software e os periféricos de leitura e escrita via DMA, uma vez que nenhum recurso disponível no processador permite que esta sincronização seja realizada de forma explícita. Sugestão de funcionalidade da aplicação: (i) o processador é inicializado via reset; (ii) a aplicação habilita solicitações de DMA e escreve 0000H na primeira posição do bloco de memória a ser escrito, posição esta reservada para sincronização entre o software e a entrada via DMA, que escreve um valor diferente de 0000H como primeiro dado do bloco; (iii) a aplicação entra em laço, lendo o conteúdo do endereço de sincronização, saindo fora deste laço apenas quando o valor lido for diferente de 0000H1; (iv) as solicitações de DMA são imediatamente desabilitadas2, os dados são processados e escritos em alguma região de memória (tipicamente diferente daquela dos dados de entrada); (v) solicitações de DMA são novamente habilitadas e a aplicação conclui3. 1 Note-se que o software executa em paralelo com o periférico, mas ao atender uma solicitação do DMA, o processador automaticamente suspende a execução de instruções, pois deve liberar o barramento de memória para a transferência. Assim, cada execução de uma leitura do endereço de sincronização ocorrerá ou antes do início da transferência do bloco para a memória, ou após o término desta transferência, não existindo a possibilidade de conflito de acesso à memória entre o software e o DMA. 2 Note-se que, devido à simplicidade do DMA proposto, existe aqui um risco de o pedido de saída via DMA ser atendido entre o término do processamento de entrada via DMA e a desabilitação de solicitações antes do processamento dos dados pelo software. Construa o testbench de forma a garantir que o pedido de saída via DMA não incorra nesta situação. 3 Novamente, devido à simplicidade do DMA proposto, não há como o software detectar que os dados foram repassados ao periférico de saída. Assim, este termina a execução logo após habilitar as solicitações de DMA. Grupos de alunos devem ser de 2 ou 3. Não façam trabalhos individuais. Prazo para entrega dos trabalhos: 7/07/2005. Devem ser enviados por e-mail e apresentados aos professores da disciplina. O trabalho inclui a distribuição do sistema completo, bem como um relatório de 3-5 páginas. No seu relatório, além da descrição da implementação, proponham sugestões de como aumentar a funcionalidade do DMA proposto para sanar os problemas mencionados nas notas de rodapé da presente especificação, indiquem os problemas de implementação encontrados (tais como inadequações/erros no código TL fornecido como parte da especificação, etc) Implementar o trabalho usando as ferramentas do gcc. Para depuração, recomenda-se uso depurador gráfico-interativo DDD, instalado na máquina Kriti. Se desejado, o mesmo depurador poderá ser instalado na máquina Leros para prover os mesmos recursos.