Aplicação ao Estudo de Caso: Sistema de Reserva de Hotéis Automated SynthesiS of Embedded Technology Eduardo C. Zini Marcelo A. Dantas Marcelo F. Cruz Tópicos Abordados • Recordando a metodologia ASSET • Descrição e especificação • Requisitos não-funcionais • Projeto • Verificação e Validação do Projeto • Notas finais e conclusões • Bibliografia Recordando... O Asset é composto por 3 fases: Especificação (Verificação) Especificação. Descrição das Funções. Código Dummy. Log e Grafo de Dependência. Geração do ESIR. Estimação e Particionamento Seleção do Processador. Estimativas de Hardware Estimativas de Software Particionamento Síntese Implementação Estudo de Caso – Reserva em Hotel Descrição: Uma rede de hotéis deseja tornar seus sistemas de reserva um diferencial para clientes VIP’s. É negociado com a operadora e com a fábrica de celulares um sistema de reserva de quartos usando o celular. No celular do cliente são exibidos uma lista de quartos disponíveis e sua cotação (de 1 a 5 estrelas). O cliente pode selecionar um quarto e efetuar a reserva. O celular deve se conectar a um servidor; este por sua vez deve enviar a resposta ao cliente. Estudo de Caso – Reserva em Hotel Estudo de Caso – Reserva em Hotel Especificação: Especificação: Caso de uso: Verificação de Disponibilidade. Descrição: Lista todos os quartos disponíveis para o hotel selecionado. Atores: Cliente Pré-Condições: O cliente deve ter selecionado um hotel Fluxo-Básico: 1 O cliente seleciona um hotel. 2 Sistema solicita a lista de quartos disponíveis. 3 Sistema recebe a lista de quartos disponíveis e a exibe. Fluxo-Alternativo: 2.1 Sistema não consegue enviar solicitação. 2.1.1 Sistema tenta novamente após 4 segundos. 2.1.2 Sistema cancela operação após 5 tentativas. 3.1 Sistema não recebe a lista dentro de 10 segundos. 3.1.1 Sistema envia pedido novamente 3.1.2 Sistema cancela a operaçào após 5 tentativas Estudo de Caso – Reserva em Hotel Especificação (cont.) – Descrição Alto Nível: 1. Listagem de hotéis disponíveis para a execução do sistema. 2. O cliente seleciona um hotel cuja disponibilidade de quartos deseja verificar . 3. Tenta-se conectar ao servidor do hotel selecionado. 3.1. São realizadas no máximo cinco tentativas de acesso ao servidor do hotel escolhido. 3.2. Cada tentativa deve possuir tempo limite de 4 segundos. 3.3. Caso não seja possível efetuar a conexão, o sistema deve retornar para a etapa de escolha de hotéis. 4. Os dados de disponibilidade de quartos são recebidos 4.1. São realizadas no máximo 5 tentativas de obtenção de dados. 4.2. Cada tentativa deve possuir tempo limite igual a 10 segundos. 4.3. Caso não seja possível obter os dados, o sistema deve retornar para a etapa de escolha de hotéis. Estudo de Caso – Reserva em Hotel Especificação (cont.) – Descrição Alto Nível: 5. Os dados recebidos (referentes ao hotel selecionado) são atualizados na base de dados do aparelho. 6. São exibidos para o cliente os quartos disponíveis do hotel selecionado 6.1. Caso não haja nenhum quarto disponível no hotel selecionado uma mensagem informativa é dada. 6.1.1 O sistema deve retornar para a etapa de escolha de hotéis. 7. O cliente seleciona então um quarto disponível que deseja ver em detalhes. 8. São exibidos os detalhes do quarto selecionado pelo cliente. 8.1 Se o cliente desejar pode ou voltar para a lista de quartos do hotel selecionado ou voltar para a seleção dos hotéis. Estudo de Caso – Reserva em Hotel Especificação (cont.) – Refinamento Procedural: Criamos a descrição das funções a serem criadas: Função Descrição showScreen_hoteis(hoteltype hotel) Espera o usuário selecionar um hotel. getHotelInDatabase(String idHotel) Obtém os dados sobre um determinado hotel no banco de dados do aparelho. connect(hoteltype hotel ) Realiza a conexão com o hotel selecionado. waitForRequestAck() Espera a confirmação do servidor de ter recebido o pedido. sendRequest() Informa que deseja-se realizar uma consulta no hotel getRooms(hoteltype hotel) Obtém os quartos disponíveis do hotel desejado. sendResponseAck( ) Confirma para o servidor os dados recebidos. databaseUpdate(hoteltype hotel) Insere os dados obtidos na base de dados do aparelho. showScreen_quartos(hoteltype hotel) Espera o usuário escolher um quarto disponível. showScreen_quarto(hoteltype hotel) Mostra na tela as informações sobre o quarto escolhido. start_ver_disp( ) Inicia todo o fluxo de execução. Estudo de Caso – Reserva em Hotel Especificação (cont.): Grafo de Dependência. start_ver_disp showScreen_hoteis Connect getHotelInDatabase sendRequest getRooms waitForRequestAck databaseUpdate sendResponseAck showScreen_quartos showScreen_quarto Estudo de Caso – Reserva em Hotel Especificação (cont.) – Input do SUIF e criação da RI do Projeto (ESIR): • Criação do código Dummy • Representação ESIR Estudo de Caso – Reserva em Hotel Estimação e Particionamento: Requisitos não funcionais. São indispensáveis nessa fase da metodologia. Os requisitos não funcionais são as métricas que auxiliam na estimação e particionamento. Exemplos: Hardware: Plataforma, Número de Registradores, Clock do Processador, Mémoria disponível, Capacidade de Escalonamento, Capacidade de Armazenamento, etc. Software: Tempo de Resposta, Carga de Usuários, etc. Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.) – selecionando o processador: • Apoiado no ESIR • ESIR contêm informações que permitem uma estimativa do número de ciclos por unidade de tempo para o codigo Dummy utilizado para o caso de uso. • A partir dessa estimativa é possível que se realize a seleção do melhor processador a ser utilizado para o conjunto de funções dado. • Com isso temos a seguinte tabela: Estudo de Caso – Reserva em Hotel Função Sparc(Clocks/ Tempo) Mips(Clocks/ Tempo) Celeron(Clocks/ Tempo) showScreen_hoteis(hoteltype hotel) 560 500 500 getHotelInDatabase(String idHotel) 495 400 1250 connect(hoteltype hotel ) 501 1325 499 waitForRequestAck() 457 1000 455 sendRequest() 547 550 520 getRooms(hoteltype hotel) 881 800 898 sendResponseAck( ) 545 1200 555 databaseUpdate(hoteltype hotel) 744 560 1000 showScreen_quartos(hoteltype hotel) 601 533 600 showScreen_quarto(hoteltype hotel) 578 565 1225 start_ver_disp( ) 5909 7433 7502 SPARC foi escolhido!!! Estimação e Particionamento (cont.) – selecionando o processador: Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.): Submetemos nosso ESIR ao Software Estimator: Função Tempo de Execução para Software showScreen_hoteis(hoteltype hotel) 545 getHotelInDatabase(String idHotel) 502 connect(hoteltype hotel ) 1111 waitForRequestAck() 1230 sendRequest() 547 getRooms(hoteltype hotel) 555 sendResponseAck( ) 1201 databaseUpdate(hoteltype hotel) 700 showScreen_quartos(hoteltype hotel) 500 showScreen_quarto(hoteltype hotel) 521 start_ver_disp( ) 6301 Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.): Submetemos nosso ESIR ao Hardware Estimator Função Tempo de Execução para Hardware showScreen_hoteis(hoteltype hotel) 754 getHotelInDatabase(String idHotel) 787 connect(hoteltype hotel ) 564 waitForRequestAck() 555 sendRequest() 897 getRooms(hoteltype hotel) 798 sendResponseAck( ) 700 databaseUpdate(hoteltype hotel) 988 showScreen_quartos(hoteltype hotel) 987 showScreen_quarto(hoteltype hotel) 885 start_ver_disp( ) 7915 Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.): • Criamos um modelo de Programação Linear que conterá as métricas para o Particionamento. 1. 2. Variáveis de Decisão: 1. tsi = Tempo de execução da função i em sw 2. thi = Tempo de execução da função i em hw 3. T = Tempo total de execução 4. ci = 1 se a função i é invocada por uma função de hardware e invoca uma de software (vice-versa) ou 0 se ele é invocada e invoca funções do mesmo tipo (em hardware e software). 5. hi = 1 se a função i é implementada em hw, 0 caso contrário 6. si = 1 se a função i é implementada em sw, 0 caso contrário 7. tci = Tempo de execução da função na Interface. Restrições: 1. Min (T) = (h1*th1 + s1*ts1) + ... + (hn*thn + sn*tsn) 2. hi + si + ci = 1 3. ci = 1 se s(i-1) + s(i+1) = 1 4. tci = min (tci,thi) Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.): • Configuramos o Partitioner com a PL modelada. • Aplicamos a saida do Sofware Estimantor e Hardware Estimator. Função Decisão showScreen_hoteis(hoteltype hotel) Software getHotelInDatabase(String idHotel) Software connect(hoteltype hotel ) Hardware waitForRequestAck() Hardware sendRequest() Interface getRoom(hoteltype hotel) Software getRooms(hoteltype hotel) Software showScreen_quartos(hoteltype hotel) Software showScreen_quarto(hoteltype hotel) Software sendResponseAck( ) Interface Estudo de Caso – Reserva em Hotel Estimação e Particionamento (cont.): Temos dessa maneira como será realizada a divisão das partes do projeto e podemos partir para a fase de síntese em si. showScreen_hoteis sendRequest Connect getHotelInDatabase sendResponseAck waitForRequestAck getRoom getRooms showScreen_quartos showScreen_quarto Estudo de Caso – Reserva em Hotel Verificação e Validação do Projeto: A Validação do Sistema é feita por co-simulação: VHDL Liguagem que simula dispositivos de Hardware. SystemC Conjunto de Classes C++ que auxiliam no desenvolvimento de simuladores de hardware. ArchC É uma linguagem open source usada descrição de arquiteturas. É baseada em SystemC. Simula as hierarquias de memória, pipeline, tamanho dos registradores e outras caracteristicas mais específicas. Muito útil no desenvolvimento de processadores. Essas ferramentas são usadas para validar o comportamento da aplicação no processador selecionado e medir a performance. Auxiliam também na decisão do processador a ser utilizado. Estudo de Caso – Reserva em Hotel Conclusões e Notas Finais: A metodologia aplica-se melhor em projetos de dispositivos altamente embarcados e com especificidade alta, tais como os de tecnologia aeroespacial. A necessidade de velocidade e as altas restrições de requisitos não-funcionais são prioridades e portanto exigem um método de desenvolvimento rápido e simples. Pontos Positivos: Sendo a metodologia totalmente baseada em ferramentas, encontramos: • Facilidade de definição da arquitetura utilizada • Forte automação do processo de desenvolvimento • Rapidez nas tomadas de decisões durante o ciclo de design • Verificação do sistema é possível em todas as etapas de desenvolvimento Pontos Negativos: • Especificação do projeto deixa a desejar em alguns aspectos. • Não possui uma fácil manutenção do sistema (fluxo de desenvolvimento unidirecional). • Não foi possível utilizar as ferramentas (proprietárias) de estimativas, de difícil acesso. Bibliografia http://www.cse.iitd.ernet.in/esproject : Architectures and CAD for Embedded Systems. Acessado em 01/12/04. Vinod Gupta, Purvesh Sharma, M. Balakrishnan, and Sharad Malik. Processor Evaluation in an Embedded Systems Design Environment. In Proc. of the Intl. Conf. on VLSI Design, Calcutta, India, Jan. 2000. Trechos cedidos. Vivek Haldar, Gokul Varadhan, Abhishek Saxena, M. Balakrishnan, and Subhashis Banerjee. Design of Embedded Systems for Real-Time Vision. In Proc. ICVGIP, 2000. Trechos cedidos. Aviral Shrivastava, Mohit Kumar, Sanjiv Kapoor, Shashi Kumar, and M. Balakrishnan. Optimal Hardware/Software Partitioning for Concurrent Specication using Dynamic Programming. In Proc. Intl. Conf. on VLSI Design, IEEE CS Press, Calcutta, India, pages 110.113, 2000. Trechos cedidos. http://suif.stanford.edu/ : The Stanford SUIF Compiler Group. Acessado em 02/12/04. http://www.archc.org :The ArchC Project Home Page. Acessado em 03/12/04. http://www.systemc.org :The SystemC Project Home Page. Acessado em 03/12/04. http://www.ginvhdl.com.br : VHDL Reference. Acessado em 03/12/04.