Caso II: Necessidade de um controlador simples Este caso ocorre em três situações: II.1) Quando o número de unidades lógico-aritméticas é menor do que o número
C APÍTULO 11: R EDE DE P ETRI PARA S ISTEMAS D IGITAIS (RPSD)
11.2. EXTENSÃO RPSD
11.2.1. DESCRIÇÃO FUNCIONAL
11.2.1.1.3. TIPO III: FUNCIONAL
Um lugar funcional é utilizado para indicar que um ou mais samples de dados (representados por listas ordenadas de tokens) encontram-se em processamento por um ou mais componentes funcionais de mesmo tipo (cuja funcionalidade é descrita pelo parâmetro comportamento associado ao lugar).
A figura 11.7 mostra dois exemplos de lugares funcionais. Na parte a), o lugar Comparador representa um comportamento (descrito por uma rotina de programação), responsável pela seleção do maior número inteiro, dentre dois valores submetidos. É possível a comparação simultânea de até 3 pares de inteiros. Isto equivale à modelagem de 3 comparadores (que podem ser implementados como circuitos ou como rotinas de software).
< t, addr > Transfer < t, addr > addr = addr +1;
if addr = 4 then addr = 0;
< t, addr > Transfer < t, addr > addr = addr +1;
if addr = 4 then addr = 0;
< t, addr > Transfer < t, addr > addr = addr +1;
if addr = 4 then addr = 0;
< t, addr > Transfer < t, addr > addr = addr +1;
if addr = 4 then addr = 0;
Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 1F 55 AF 00 Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 00 00 00 00 Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 1F 00 00 00 Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 1F 55 00 00
Figura 11.6. RPSD com comportamento similar à rede da figura 11.5.
Na parte b) da figura 11.7, o lugar Clock Divider representa dois divisores de clock por 4: a inserção de 4 tokens do tipo clk neste lugar é responsável pela geração de um token clk em uma de suas saídas. A figura não mostra como estas inserções são feitas: uma possibilidade é que, a transição responsável pela inserção de cada token clk no lugar, seja temporizada de acordo com o tempo de duração de um ciclo de clock do sistema modelado. O comportamento do lugar Clock Divider é dado por uma RPSD-Transformacional (RPSD-T, descrita adiante), a qual constitui uma RPSD com algumas características especiais, de forma a garantir interfaceamento adequado. Como o lugar Clock Divider comporta até dois samples de entrada, há duas instâncias (cópias) da RPSD-T.
O funcionamento dos lugares funcionais da figura 11.7 ficará mais claro, à medida que compreendermos os componentes e regras de funcionamento desse tipo de lugar, descritos na seqüência.
Sete parâmetros definem um lugar funcional (figura 11.7):
P1. Identificador (Id): Seqüência de caracteres finita e única que denomina o lugar;
P2. Domínio de entrada (DI): Lista ordenada de n parâmetros de entrada,
DI (p) = ((lI1,typeI1),(lI2,typeI2),...,(lIn, typeIn)) |
lI1,lI2,..., lIn∈ Rótulos ∧ typeI1,typeI2,..., typeIn∈ An ∧ n ≥ 1,
onde An é a classe anotações da RPSD portadora do lugar e Rótulos é um dos conjuntos
que compõem An. DI indica quantos e de quais tipos devem ser os tokens necessários à
execução do comportamento B associado ao lugar, conforme descrição adiante. O tipo de um token (indicado por type) é o conjunto que contém o valor associado ao token, de acordo com a definição da classe An. Um token pode pertencer a mais de um tipo
(conjunto); <a><b><c><d> <a><b><c><d> Transfer <a><b><c><d> <a><b><c><d> Transfer Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 1F 55 AF 15 Reg. File I 2-hexa LR = 5; LW = 5 A B C D 1F 55 AF 15 Reg. File I I 2-hexa LR = 4; LW = 4 E F G H 00 00 00 00
Figura 11.7. Componentes de um lugar tipo III – Funcional.
Número Máximo de Samples (maxS) Clock Divider signal1 { clk } signal2 { clk } signal3 { clk } signal4 { clk } clk newClk { clk } [ ] Accept [ 0, 0 ] clk3 { clk } [ ] clk1 { clk } [ ] clk2 { clk } [ ] clk4 { clk } [ ] signal { clk } Comportamento (B) ( RPSD-Transformacional )
b) Lugar tipo III com comportamento descrito por subrede
Routine Comparator input: X: integer; Y: integer; output: Z: integer; { if X > Y then Z:=X else Z:=Y; } X integer Y integer Z integer Comparator Identificador (Id) Domínio de Entrada (DI) Domínio de Saída (DO) Comportamento (B) ( Rotina )
a) Lugar tipo III com comportamento descrito por rotina
Repositório de Saída (RO)
P3. Número máximo de samples (maxS): Número natural não-nulo, indicando a quantidade
máxima de samples de dados que podem ocupar o lugar concomitantemente. Um sample de dados encontra-se em um de quatro estados possíveis, quais sejam:
• sample inexistente: sample não possui qualquer dado, isto é, não possui token algum pertencente aos tipos que compõem o domínio de entrada DI do lugar. Samples neste
estado não são contabilizados (para verificação de maxS);
• sample de entrada em formação: sample não encontra-se completo (falta token para um ou mais dos tipos listados no domínio de entrada DI), uma vez que os seus tokens
(argumentos) não precisam ser inseridos ao mesmo tempo;
• sample em processamento: sample entra neste estado após estar completo, ativando uma instância do comportamento associado ao lugar. Esta instância do comportamento é responsável pela transformação de um sample de entrada completo (argumentos para os parâmetros do comportamento) em um sample de saída
transformado;
• sample de saída: sample resultante da transformação promovida pela instância do comportamento associado ao lugar. Neste estado, os tipos de tokens presentes no
sample são designados pela lista DO do domínio de saída, conforme definição adiante;
P4. Repositório de entrada (RI): Estrutura armazenadora de samples de entrada, representada
por uma matriz RI de maxS linhas e n colunas, onde maxS é o número máximo de
samples, e n a cardinalidade do domínio de entrada DI do lugar. Cada linha de RI é
dinamicamente associada a uma instância (cópia) do comportamento, ou seja, cada linha armazena um sample de entrada (conjunto de tokens representando argumentos), necessário à ativação de uma determinada instância do comportamento. Por construção, a j-ésima coluna de RI (indicada por RIj), 1 ≤ j ≤ n, está associada ao
j-ésimo tipo de DI (indicado por typeIj), isto é, cada coluna de RI admite apenas um único
tipo de token. Graficamente representado por uma tabela, RI tem os índices de linhas
crescentes de baixo para cima (primeira linha de RI associada à última linha da tabela;
última linha de RI associada à primeira linha da tabela), e os índices de colunas crescentes
da esquerda para a direita. Não é necessário que o preenchimento de uma linha de RI
ocorra de uma só vez. Cada vez que um token é inserido no lugar, ele é armazenado na coluna menos ocupada equivalente a seu tipo. Caso haja mais de uma coluna nesta condição, o token ocupará aquela de menor índice;
P5. Domínio de saída (DO): Lista ordenada de m resultados de saída,
DO (p) = ((lO1,typeO1),(lO2,typeO2),...,(lOm, typeOm)) |
lO1,lO2,..., lOm ∈ Rótulos ∧ typeO1,typeO2,..., typeOn ∈ An ∧ m ≥ 1,
onde An é a classe anotações da RPSD portadora do lugar e Rótulos é um dos conjuntos
que compõem An. DO indica os tipos dos tokens resultantes da execução do
comportamento associado ao lugar;
P6. Repositório de saída (RO): Estrutura armazenadora de samples de saída, representada por
uma matriz RO de maxS linhas e m colunas, onde maxS é o número máximo de samples,
e m a cardinalidade do domínio de saída DO do lugar. Cada linha de RO é
dinamicamente associada a uma instância do comportamento, ou seja, cada linha armazena um sample de saída (conjunto de tokens representando resultados), gerado por uma determinada instância do comportamento (subrede ou rotina). Por construção,
a k-ésima coluna de RO (indicada por ROk), 1 ≤ k ≤ m, está associada ao k-ésimo tipo de
DO (indicado por typeOk), isto é, cada coluna de RO admite apenas um único tipo de token.
Podem ser armazenados, no máximo, maxS samples de saída. A remoção de um sample
de saída ocorre através do disparo de uma transição associada ao lugar através de um
ramo coletor. Este ramo é rotulado com uma expressão <t1,t2,...,tm>, onde t1,t2,...,tm são
tokens com tipos implicitamente arbitrados pelo domínio de saída DO do lugar, isto é,
t1∈typeO1, t2∈typeO2,..., tm∈typeOm ;
P7. Comportamento (B): Estrutura responsável pela descrição da funcionalidade associada ao lugar. Uma instância (cópia) do comportamento é ativada quando um sample de
tokens no repositório de entrada RI encontra-se completo. Assim, pode existir mais de
uma instância do comportamento ativa por vez, sendo o número de instâncias limitado a maxS. Comportamento é descrito em uma de duas formas, quais sejam:
• RPSD-Transformacional (RPSD-T): Trata-se de uma RPSD cuja construção exige a presença de um conjunto de lugares tipo I somente de entrada (sem transições que insiram tokens) e de um conjunto de lugares tipo I somente de saída (sem transições que consumam tokens), associados, respectivamente, aos tokens que entram e que saem do comportamento. Mais especificamente, deve existir um lugar de entrada do tipo I (estado local) para cada token do sample de entrada e um lugar de saída do tipo I para cada token do sample de saída. Formalmente, para um lugar p do tipo III, tem-se a seguinte definição, onde o símbolo # representa cardinalidade e, PI, o
conjunto de lugares do tipo I de uma RPSD-T: RPSD-T(p) = RPSD com as seguintes restrições:
i) ∀ typeIj ∈ DI (p) ⇒ ∃ inputj ∈ PI(RPSD-T(p)) DS(inputj) = typeIj,
j = 1,..., #DI (p); e
ii) ∀ typeOk ∈ DO (p) ⇒∃ outputk ∈ PI(RPSD-T(p)) DS(outputk) = typeOk,
k = 1,..., #DO (p).
Uma instância da RPSD-T é criada para cada sample de tokens completo que se formar no repositório de entrada do lugar pai (RI(p)). A operação de uma instância
da RPSD-T cessa quando todos os seus lugares de saída (outputk, k= 1,..., #DO(p))
estiverem com um token, independentemente de existirem transições habilitadas na instância. Neste momento, os tokens presentes nestes lugares são disponibilizados no repositório de saída do lugar pai (RO(p)). Após a remoção destes tokens, a instância
deixará de existir.
RPSD permite hierarquia estrutural, uma vez que o comportamento B, de qualquer lugar funcional (tipo III) da RPSD-T, também pode ser descrito por outra RPSD-T e, assim, sucessivamente;
• Rotina: Trata-se de uma listagem de sentenças de programação (statements), descrevendo computações que devem ser executadas seqüencialmente. Estas sentenças podem usar os valores dos tokens contidos em um sample retirado do repositório de entrada do lugar, transformando-os em valores de tokens de um sample de saída. Os parâmetros de entrada e de saída são fixos, de acordo com a definição dos domínios de entrada (DI) e de saída (DO) do lugar. Variáveis locais podem ser
declaradas. Para garantir um interfaceamento adequado, a listagem da rotina associada a um lugar p do tipo III, deverá seguir a formatação apresentada na figura 11.8.
Figura 11.8. Formatação para rotina associada a um lugar do tipo III.
Uma instância da rotina é criada para cada sample de tokens completo (linha completa) que se formar no repositório de entrada do lugar pai (RI(p)). A operação da
instância termina quando for executado o último statement ou um statement return. A área de sistemas digitais embutidos é bastante ampla. Neste contexto, seguindo a orientação de não limitarmos o uso de RPSD a uma única classe específica de aplicações dentro desta área, nós não definimos e nem fixamos uma linguagem formal para a descrição de rotinas associadas a lugares funcionais, uma vez que diferentes domínios de projeto apresentam especificidades melhor atendidas por diferentes linguagens. Como um modelo descrito em RPSD pode representar, por exemplo, um sistema multiprocessador, seria interessante deixar a cargo do projetista a escolha da linguagem e de seu compilador correspondente, melhor adequados aos processos em software executados por um determinado processador. O que realmente importa, de fato, é exigir que a linguagem adotada para descrever a rotina associada a um lugar do tipo III permita interfaceamento adequado, seguindo a formatação dada na figura 11.8. No entanto, para demonstrar a forma de funcionamento de um lugar funcional, adotamos uma pseudo-linguagem,desintaxe semelhante a C, com os seguintes grupos de statements:
- atribuição: := (com operadores aritméticos comuns); - iteração: for...next (com índices fixos);
- seleção: if-then-else,
switch-case (com operadores relacionais comuns).
Routine p
input: input1 : typeI1 , // tipos definidos em DI(p)
input2 : typeI2 ,
...,
inputn : typeIn ;
output: output1 : typeO1 , // tipos definidos em DO(p)
output2 : typeO2 ,
...,
outputm : typeO m ;
[var: ... ] // declaração opcional
// de variáveis locais {
statements
Nas partes a) e b) da figura 11.7, pode-se observar a notação gráfica de um lugar funcional. O conjunto de três elipses concêntricas é divido em três regiões. Na região superior, encontram-se representados o identificador (Comparador/Clock Divider), o domínio de entrada (cabeçalho da tabela, indicando o rótulo e tipo de cada parâmetro de entrada do comportamento associado) e o repositório de entrada (corpo da tabela) do lugar – as três linhas da tabela, na parte a), inferem que o número máximo de samples (maxS)
no lugar Comparador é 3 (maxS(Clock Divider) = 2). Na região intermediária do lugar
funcional, encontra-se a descrição do comportamento associado. Na figura 11.7.a, o comportamento é dado por uma rotina (Routine Comparador), devido à sua simplicidade. Comportamentos mais complexos, envolvendo a execução de atividades em paralelo (dentro do comportamento), exigem sua descrição através de uma RPSD-T, a qual já foi citada neste texto; para tornar sua compreensão mais direta, o comportamento do lugar Clock Divider é descrito por uma RPSD-T.Finalmente,na parte inferior do lugar, encontram-se representados o domínio de saída (cabeçalho da tabela, indicando o rótulo e o tipo de cada resultado gerado pela execução do comportamento associado) e o repositório de saída (corpo da tabela) do lugar. Este último, possui o mesmo número de linhas do repositório de entrada.
Lugares funcionais permitem dois tipos de operações:
O1. Inserção de tokens: Realizada com o auxílio de um ramo fornecedor, com origem em uma transição t e término num lugar funcional p. Tal ramo insere um conjunto de tokens no repositório de entrada do lugar quando do disparo da transição, de acordo com uma função de inserção I(p,t), a qual segue a seguinte formatação:
I(p,t) = <boolean1,set1>|<boolean2,set2>|...|<booleann,setn>, n ≥ 0.
Nesta função, a primeira condição booleana (booleani) satisfeita é responsável pela
inserção do conjunto correspondente (seti), desde que os tokens deste conjunto sejam
compatíveis com os parâmetros de entrada do comportamento (definidos no domínio de entrada do lugar) e a capacidade do lugar não seja estourada. Caso ausente, a função de inserção corresponde ao conjunto de tokens retirados dos lugares ligados à transição considerada por ramos de entrada comuns, conjugados, coletores ou de leitura (ramos são tratados adiante).
Adotando-se a representação de matriz (dada anteriormente) para os repositórios de entrada (RI) e de saída (RO), toda vez que uma linha l de RI tiver sido preenchida, tem-se
um sample de entrada completo, fazendo com que o mecanismo de controle da rede ative uma instância do comportamento B associado ao lugar.
A função L(Bi), 1 ≤ i ≤ maxS, associa dinamicamente um número natural l,
0 ≤ l ≤ maxS, a uma instância Bi de B, onde l indica a linha de RI onde Bi captura
argumentos, assim como a linha de RO onde Bi armazena resultados; L(Bi) = 0 indica que
a instância Bi encontra-se desativada. RPSD exige que, cada sample de entrada
completo seja processado pela instância desativada de menor índice. Por exemplo, supondo-se que B possui 5 instâncias – B1, B2, B3, B4 e B5, e que a função L fornece as
seguintes associações:
L(B1) = 1; L(B2) = 0; L(B3) = 2; L(B4) = 0; L(B5) = 3,
somente B2 e B4 estão desativadas, pois a instância B1 está associada à linha 1 dos
repositórios RI e RO, a instância B3 à linha 2, e a instância B5 à linha 3. Neste caso, o
próximo sample de entrada se formará na linha 4 de RI, e será processado pela instância