Vous êtes sur la page 1sur 3

Departamento de Engenharia Eletrnica

Escola de Engenharia da UFMG


Disciplina: Sistemas Digitais

Hermes Aguiar Magalhes / Luciano de Errico

ATRIBUIO DE SINAIS CONSTRUO CONCORRENTE VERSUS SEQUENCIAL


Atribumos valores a sinais usando uma sentena ou statement de atribuio de sinal. Em sua forma mais
simples, a atribuio de sinal da seguinte forma:

Objeto_do_tipo_sinal <= expresso [after valor_de_atraso];


A expresso entre colchetes especifica um atraso de tempo e opcional. Se for omitida, um atraso (ou delay) T
default ser assumido. Esta construo usando after (= aps) utilizada na construo e modelagem de
testbenches de simulao similares s entradas vector waveform files (arquivos .vwf), que servem para teste de
projetos mais complexos. Aqui vamos focar na sntese de circuitos lgicos e no na construo de testbenches.
Especificamente no caso da ferramenta Quartus II, quando na simulao adotamos a modalidade timing, o
atraso T levado em conta automaticamente pelo software. Seu valor resultante da escolha do chip. Para o
1
EPM3064ALC44-10 , este 10 no final do part-number indica que neste chip o atraso por porta de 10 ns.

Cdigo Comportamental Estrutural e Cdigo Sequencial Orientado a eventos


Em VHDL um cdigo de execuo sequencial um cdigo comportamental, programado dentro de construes
2
como PROCESS. Nele, as sentenas tm uma sequncia de execuo similar a um programa de computador ,
declaram-se variveis (keyword VARIABLE) locais para uso interno ao PROCESS e os sinais (criados
previamente com a keyword SIGNAL ou como itens da interface ENTITY) so usualmente carregados uma
nica vez, sendo utilizados para comunicar o resultado final do processo aos circuitos externos construo.
Dentro de um PROCESS so vlidas as construes sintticas IF, CASE, LOOP e WAIT.
J cdigos estruturais no requerem a declarao de um PROCESS e a necessidade de variveis internas
suprida pela declarao SIGNAL (e no por VARIABLE). Toda sentena tem execuo concorrente com as
demais sentenas, inclusive com blocos PROCESS eventualmente presentes, ou seja, suas execues so
simultneas. Estes cdigos usam construes como WHEN, SELECT, GENERATE, PORT MAP, etc. Note que
existe uma equivalncia entre as estruturas que pode ser explorada: IF WHEN, CASE SELECT e
LOOP GENERATE.
Uma atribuio de sinal pode aparecer dentro de um PROCESS ou fora dele. Se a atribuio estiver fora do
PROCESS, ela considerada uma sentena de atribuio concorrente (a menos do tempo de propagao da
cadeia de eventos) com as demais sentenas do projeto. Quando uma sentena de atribuio aparece dentro de
um PROCESS, a atribuio considerada sequencial e executada em sequncia com as demais atribuies
presentes no mesmo bloco PROCESS. Neste caso, quando a sentena de atribuio executada, seu valor
calculado naquele instante, mas o resultado no carregado imediatamente no sinal. Voc pode imaginar que
ele agendado para ser atribudo ao sinal aps o atraso de tempo T. Portanto, normalmente no podemos
contar com este resultado na linha de programao seguinte. Se for necessrio usar o contedo atribudo nas
linhas seguintes dentro do PROCESS, o mais adequado usar uma VARIABLE, que de carter temporrio e
atualizada instantaneamente.

O Datasheet desse componente est disponvel no link: http://www.altera.com/literature/ds/m3000a.pdf.

Note que na sntese de circuitos voc no pode contar com os resultados das operaes envolvendo SIGNAL dentro da estrutura PROCESS,
pois a atualizao nas modificaes dos sinais somente acontece ao final da execuo da estrutura. Esta caracterstica diferencia
substancialmente esta programao da programao de computadores convencional, da a palavra similar.

Rev.1

1/3

Departamento de Engenharia Eletrnica


Escola de Engenharia da UFMG
Disciplina: Sistemas Digitais

Hermes Aguiar Magalhes / Luciano de Errico


Resumindo, podemos ento enfatizar que existem dois comportamentos diferentes, dependendo de onde est a
sentena de atribuio de sinal:

Sentena concorrente de atribuio de sinal (fora de um process): este tipo de atribuio disparado por
eventos (event-triggered), ou seja, elas so executadas sempre que algum dos sinais presentes em sua
3
expresso no lado direito da atribuio sofrer uma alterao. Veja o exemplo a seguir :
architecture ATRIBUI_SIG_CON of TRECHO1 is
-- A, B e Z so sinais.
begin -- Seguem sentenas de atribuio concorrentes:
A<=B;
Z<=A;
end;
Na arquitetura ATRIBUI_SIG_CON, as duas sentenas so de execuo concorrente. Note que no
importa a ordem em que as sentenas aparecem no cdigo. Quando ocorre um evento no sinal B no
instante T, o sinal A assume o valor de B aps um atraso T, ou seja, no instante T+T. Quando o tempo
(na simulao) avana para T+T, o sinal A vai assumir seu novo valor. Se este tiver sido alterado, vai
disparar a execuo da segunda sentena, o que causa a atribuio do novo valor de A em Z aps um
novo atraso T, ou seja, no instante T+2T. O valor final de Z ser o valor de B.

Sentenas em um bloco sequencial de atribuio de sinal (dentro de um process): a atribuio sequencial


no orientada a eventos (event-triggered), mas sim executada consecutivamente s sentenas do corpo
de seu process. Para entrar em um bloco PROCESS, necessrio que pelo menos um dos itens de sua lista
de sensibilidade sofra modificao. Por exemplo, se temos um PROCESS(A,B,C), sua lista de sensibilidade
so os itens A, B e C e basta que um deles sofra modificao para seja executado o bloco correspondente.
Neste bloco TODAS as sentenas so avaliadas sequencialmente, independente de seus termos direita
das expresses de atribuio terem se modificado ou no. Veja o exemplo:
architecture ATRIBUI_SIG_SEQ of TRECHO2 is
begin
process (B)
begin -- Seguem sentenas de atribuio sequenciais:
A<=B;
Z<=A;
end process;
end;
Na arquitetura ATRIBUI_SIG_SEQ, as duas sentenas so de execuo sequencial. Aqui, a ordem que a
sentena aparece no cdigo relevante para o resultado final. Na ocorrncia de um evento no sinal B no
instante T (neste caso a lista de sensibilidade do bloco process tem apenas um item), a primeira sentena
de atribuio executada e em seguida ocorre a execuo da segunda sentena, ambas em tempo
zero. Contudo, o novo valor de ambos os sinais somente ser atribudo a eles aps um atraso T, ou
seja, no instante T+T. Quando o tempo (ou a simulao) avana para T+T, o sinal A vai assumir seu
novo valor igual a B, e Z receber o antigo valor de A.

rd

Livro: A VHDL Primer, 3 Ed. J. Bhasker, Prentice Hall, New Jersey, 1999.

Rev.1

2/3

Departamento de Engenharia Eletrnica


Escola de Engenharia da UFMG
Disciplina: Sistemas Digitais

Hermes Aguiar Magalhes / Luciano de Errico


Aps estudar estes dois exemplos, note que as definies de atribuio concorrente e sequencial so pertinentes,
mas fazem mais jus denominao que recebem quando usamos variveis para programar estruturas
comportamentais. Ao contrrio do que acontece com os sinais dentro de um process, que so avaliados no tempo
zero e atualizados posteriormente, as variveis (declaradas com a keyword VARIABLE) so atualizadas j para uso
de seu novo valor na sentena seguinte. Portanto, voltando aos exemplos acima, ao olharmos o que acontece
com a atribuio dos sinais ao longo do tempo, vemos que os papis foram trocados: houve uma sequncia
(orientada a eventos sucessivos) na atribuio concorrente e uma simultaneidade (sincronia) na atribuio
sequencial (efeito consumado apenas no final do bloco PROCESS). O entendimento correto desta caracterstica
sutil ir com certeza economizar muitas horas de depurao de cdigo.

Cdigo comportamental/sequencial com sentenas conflitantes


Uma questo surge: se o cdigo comportamental atualiza os seus sinais apenas no final do bloco, se forem
programadas sentenas com resultados conflitantes, qual prevalecer? Prevalecer o resultado da sentena que
for executada por ltimo na sequncia. O exemplo da figura a seguir determina duas aes opostas, ambas a
serem executadas na borda de subida do sinal de entrada b. No primeiro teste da sequncia de sentenas, a
sada x recebe b. A seguir, temos uma sentena com a mesma condio, mas que agora determina que x
receba b negado. O circuito resultante do cdigo como ele se encontra mostrado no destaque direita.
Experimente programar o exemplo abaixo e explorar suas variaes (por exemplo, comentando as linhas
conflitantes, fazendo pequenas alteraes de cdigo, etc.). Veja se o cdigo a seguir gera (ou no) algum erro de
compilao.

Rev.1

3/3

Vous aimerez peut-être aussi