Tópicos em System-Level Design Projeto de Sistemas Usando SystemC Sandro Rigo [email protected] 2o Semestre de 2006 MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 1 Concorrência Processos e Eventos MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 2 Concorrência • É comum um sistema de software executar em uma única thread • Mas em HW ou um sistema HW+SW teremos várias tarefas sendo executadas simultaneamente • Simular um sistema como esse exige controle de concorrência ! MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 3 Processos • SystemC usa processos para modelar concorrência • Simulação baseada em eventos não propicia uma execução realmente concorrente • Cada processo executa um pedaço de código, ou período de tempo, e libera o controle para a execução de outros processos MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 4 Processos • O kernel é responsável por disparar os processos • SystemC fornece métodos (SC_METHOD) e threads (SC_THREAD) MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 5 Eventos • Algo que acontece em um ponto específico de tempo • Não tem valor e duração • SystemC usa a classe sc_event para modelar eventos • Essa classe permite disparar eventos através do método de notificação MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 6 Eventos • REGRA: – Para observar um evento, o observador precisa estar monitorando esse evento!!! • SystemC permite a monitoração de eventos através de sensibilidade estática e dinâmica em seus processos MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 7 Kernel de Simulação SystemC * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 8 Processos e Eventos Execução aleatória Em algum momento termina ou é suspenso. Aguardan do um evento Delayed events * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 9 Processos e Eventos • Um processo pode gerar eventos que disparem outros processos sem avanço no tempo (delta cycles) • O tempo avança quando não houver mais processos prontos para execução • Avança até o próximo delayed event • Quando não houver processo pronto nem delayed, fim da simulação MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 10 SC_THREAD • São invocados apenas uma vez, mas podem ser suspensas e permitem que o tempo passe antes de continuarem • Uma vez invocadas assumem o controle, até que decidam passá-lo de volta ao simulador • Sair (return): termina definitivamente a thread MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 11 SC_THREAD • Suspender (wait): invocado explicitamente ou indiretamente – Por exemplo, acesso de escrita em uma FIFO bloqueante cheia • Tipicamente, threads são compostas de um laço infinito contendo pelo menos um wait • Troca de contexto é cara ! MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 12 O método WAIT() Não é possível saber o evento que satisfez a condição • wait(time); • wait(event); • wait (event1 | event2 ... ) // qualquer um • wait (event1 & event2 ... ) // todos • wait(timeout, event); // evento com timeout • wait ( timeout, event1 | event2 ... ) //qualquer com timeout Usado com a função timed_out() • wait ( timeout, event1 & event2 ...) //todos com timeout • wait(); // sensibilidade estática MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 13 Exemplo * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 14 Exemplo * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 15 Exemplo * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 16 Exemplo * Fonte: SystemC from the Ground Up MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 17 Disparando Eventos: .notify() // Estilo O-O (preferido) • event_name.notify(); // notificação imediata • event_name.notify(SC_ZERO_TIME) ; //notificação atrasada • event_name.notify(time); //notificação temporizada // Functional–call style • notify(event_name); // notificação imediata • notify(event_name, SC_ZERO_TIME) ; //notificação atrasada • notify(event_name, time); //notificação temporizada MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 18 Disparando Eventos: .notify() • sc_event action; • sc_time now(sc_time_stamp()); //observe current time //immediately cause action to fire • action.notify(); //schedule new action for 20 ms from now • action.notify(20, SC_MS); //reschedule action for 1.5 ns from now • action.notify(1.5,SC_NS); //useless, redundant • action.notify(1.5, SC_NS); //useless preempted by event at 1.5 ns • action.notify(3.0,SC_NS); //reschedule action for next delta cycle • action.notify(SC_ZERO_TIME); //useless, preempted by action event at SC_ZERO_TIME • action.notify(1, SC_SEC); //cancel action entirely • action.cancel(); MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 19 SC_METHOD • O tempo não passa entre sua invocação e retorno • São invocados repetidamente pelo kernel • Não podem ser suspensos. Invocar wait é erro! • São mais eficientes que threads MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 20 SC_METHOD • São similares aos processos de VHDL • São invocados através lista sensibilidade • Variáveis locais não são persistentes MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 21 Sensibilidade • Dinâmica: next_trigger() – – – – Mesmas opções do wait() Afeta a próxima invocação do método Afeta temporariamente a lista de sensibilidade do método Inicialização é crucial • Estática: sensitive – – Só executa uma vez!!! Durante a Definido no construtor, logo após registro do processo inicialização. Não se altera, é estática • O que acontece com um método sem lista de sensibilidade e sem sensibilidade dinâmica e seu código? MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 22 Referências • SystemC from the Ground-up - David C. Black e Jack Donovan, Kluwer Academic Press, 2004 • Transaction Level Modeling in SystemC – Adam Rose, Stuart Swan, John Pierce, Jean-Michel Fernandez, OSCI TLM Working Group • SystemC Tutorial. Forte Design Systems. http://www.forteds.com MO801: Tópicos em Arquitetura e Hardware http://www.ic.unicamp.br/~sandro 23