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
Download

systemc2