VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais Comandos Concorrentes Básicos Comandos concorrentes são executados conjuntamente. Logo, a sequência como são apresentados no código é irrelevante Um atraso delta é empregado para o simulador avaliar as iterações resultantes dos comando concorrentes. O Atraso Delta Δ Ordem dos comandos no código não deve interferir no resultado final da simulação O simulador necessita de um atraso interno, denominado Δ, para coordenação da avaliação de eventos concorrentes Para todos os comandos ativados, o resultado é transferido 1Δ após A nova condição pode ativar novos comandos, e o processo se repete por sucessivas iterações até atingir uma condição estável Comandos Concorrentes Básicos O Atraso Delta Δ Observe que em uma linguagem sequencial, o comando da linha 9 deveria ser apresentado antes do comando da linha 8! 1 | ENTITY sig_tes0 2 | PORT( sa : 3 | sb, sc : 4 | END sig_tes0; 5 | 6 | ARCHITECTURE teste 7 | BEGIN 8 | sc <= sb; 9 | sb <= sa; 10 | END teste; IS IN BUFFER OF BIT; BIT); sig_tes0 IS Comandos Concorrentes Básicos O Atraso Delta Δ Simulador Comportamento real Comandos Concorrentes Básicos O Atraso Delta Δ – condição instável Os simuladores normalmente limitam o número máximo de iterações e abortam a simulação! Comandos Concorrentes Básicos Atribuição de valor a um sinal Pode ocorrer tanto em regiões de código concorrente quanto sequencial Quando a atribuição ocorre em região concorrente, a ordem dos comandos é irrelevante A atribuição emprega o delimitador “<=“ A informação pode ser originada de um outro sinal ou expressão VHDL é rigorosa com relação a operações envolvendo tipos diferentes, não permitindo transferência de valor entre objetos nesse caso Comandos Concorrentes Básicos Atribuição de valor a um sinal Exemplo: MUX (Circuito de Seleção) Comandos Concorrentes Básicos Atribuição de valor a um sinal Comandos Concorrentes Básicos Atribuição de valor a um sinal Comandos Concorrentes Básicos Construção WHEN ELSE Comandos Concorrentes Básicos Construção WHEN ELSE s1_s0 <= s1 & s0; Comandos Concorrentes Básicos Construção WITH SELECT Comandos Concorrentes Básicos Construção WITH SELECT Comandos Concorrentes Básicos WHEN ELSE versus WITH SELECT Na construção WHEN ELSE a ordem de apresentação das condições indica a precedência na execução Primeira condição tem prioridade máxima e a última mínima Na construção WITH SELECT todas as condições possuem igual prioridade Tais diferenças podem ser aproveitadas pelo projetista para obter circuitos mais eficientes e descrições mais sucintas O exercício a seguir ilustra o caso onde a construção WHEN ELSE leva vantagem sobre a construção WITH SELECT Exercícios 1 2 3 4 5 6 7 8 9 10 11 12 | ENTITY pr_cod | PORT( p : | c : | END pr_cod; | | ARCHITECTURE | BEGIN | c <= “11” WHEN | “10” WHEN | “01” WHEN | “00”; | END teste1; 1 2 3 4 5 6 7 8 9 10 11 12 13 | ENTITY pr_cod | PORT( p : | c : | END pr_cod; | | ARCHITECTURE | BEGIN | WITH p SELECT | c <= “11” WHEN | “10” WHEN | “01” WHEN | “00” WHEN | END teste2; Exercícios IS IN OUT BIT_VECTOR(3 DOWNTO 1); BIT_VECTOR(1 DOWNTO 0)); teste1 OF pr_cod p(3) = ‘1’ p(2) = ‘1’ p(1) = ‘1’ ELSE ELSE ELSE ----- IS IN OUT teste2 1 0 0 0 1 0 0 IS -- p3 p2 p1 c1 c0 1 1 1 0 1 0 1 0 0 0 BIT_VECTOR(3 DOWNTO 1); BIT_VECTOR(1 DOWNTO 0)); OF “111”|”110”|”101”|”100”, “011”|”010” , “001”, “000”; pr_cod ----- IS p3 p2 p1 c1 1 1 0 1 1 0 0 1 0 0 0 0 0 c0 1 0 1 0 Comandos Concorrentes Básicos Criação de latch com as construções WHEN ELSE e WITH SELECT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ENTITY latch IS | PORT( enb, d1, d2, d3 : IN | q1, q2, q3, : BUFFER | END latch; | | ARCHITECTURE funcionamento | BEGIN | q1 <= d1 WHEN enb = ‘1’ ELSE | q1; | q2 <= d2 WHEN enb = ‘1’; | WITH enb SELECT | q3 <= d3 WHEN ‘1’; | q3 WHEN ‘0’; | END funcionamento; BIT; BIT); OF latch IS