22
Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

Embed Size (px)

Citation preview

Page 1: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

Parte 7 - VHDL: Processos, Paralelismo e o Comando

process

LABORGLABORG

08/abril/2009

César Augusto Missio Marcon

Ney Laert Vilar Calazans

Page 2: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

2César Marcon / Ney Calazans

Sumário

Introdução

Processos em VHDL

TRABALHO A FAZER

A ENTREGAR

Page 3: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

3César Marcon / Ney Calazans

Sumário

Introdução

Processos em VHDL

TRABALHO A FAZER

A ENTREGAR

Page 4: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

4César Marcon / Ney Calazans

Introdução

• VHDL pode ser visto como formada por 3 linguagens, um todo e dois subconjuntos:

Linguagem de Modelagem de Hardware(VHDL completo)

Linguagem de Modelagem de Hardware(VHDL completo)

Subconjunto de Simulação de HardwareSubconjunto de Simulação de Hardware

Subconjunto de Síntese de HardwareSubconjunto de Síntese de Hardware

Page 5: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

5César Marcon / Ney Calazans

Introdução

• Linguagem de Modelagem – Aceita todas as construções da linguagem, incluindo aquelas não simuláveis temporalmente e as não sintetizáveis. Por exemplo, o que acontece ao tentar simular o texto abaixo? library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity nao_sim isend nao_sim;

architecture nao_sim of nao_sim issignal y : integer := 0; begin

processvariable x : integer :=1;begin if x<10 then x := x+1; end if; y <= x;end process;

end nao_sim;

Este texto compila no simulador, mas é impossível de ser

simulado usando formas de onda, Por quê?

Page 6: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

6César Marcon / Ney Calazans

Introdução

• Linguagem de Simulação – Aceita parte das construções da linguagem, incluindo descrições de hardware sintetizáveis e os testbenches usados para validá-lo. Por exemplo, que acontece ao tentar sintetizar o código abaixo no ISE?

library IEEE;use IEEE.STD_LOGIC_1164.all;

entity nao_sint is port (entra: in std_logic; sai: out std_logic);end nao_sint;

architecture nao_sint of nao_sint isbegin sai <= not entra after 10ns;end nao_sint;

Este texto compila OK no simulador, simula OK,

mas é impossível de sintetizá-lo. Por quê?

Page 7: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

7César Marcon / Ney Calazans

Introdução• Linguagem de Síntese – Aceita um subconjunto próprio das construções simuláveis da linguagem, apenas aquilo que as ferramentas de síntese

conseguem traduzir para hardware “de verdade”.

• Objetivo deste curso dominar o subconjunto sintetizável de VHDL para descrever hardware que pode ser construído e aprender a construir tal hardware

– Para tanto, não basta saber usar o subconjunto sintetizável, mas agregar a este boas técnicas de escrita, aprendendo a usar bons estilos de projeto de hardware em uma linguagem de descrição de hardware

• Objetivos secundários:

– Aprender a validar hardware usando o subconjunto simulável de VHDL

– Aprender a modelar hardware de maneira abstrata em VHDL

Page 8: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

8César Marcon / Ney Calazans

Introdução• Se VHDL pode ser visto como três linguagens, segundo a

destinação de seu emprego (modelagem, simulação ou síntese), segundo a sintaxe, VHDL pode ser vista como a união de duas linguagens sem quase nada em comum, exceto sinais e o comando de atribuição simples a estes:

Construções internas a um comando ProcessConstruções internas a um comando Process

Construções externas a um comando ProcessConstruções externas a um comando Process

Atribuição simples (<=)

if-then-else-elsif for-loop

while-loop

for-generatewith-select

case

atribuição condicional (when)

Instanciação de componentes (port map)

sinais

variáveis

Atribuição a variáveis (:=)

Page 9: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

9César Marcon / Ney Calazans

Sumário

Introdução

Processos em VHDL

TRABALHO A FAZER

A ENTREGAR

Page 10: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

10César Marcon / Ney Calazans

Processos em VHDL

• Mas afinal, o que é um processo em VHDL?

– Dito de forma muito simples e genérica, um processo é um “pedaço de hardware”

• Como cada pedaço de hardware opera em paralelo com outros pedaços de hardware existentes, a noção de paralelismo é fundamental em VHDL

• Por outro lado, a conexão entre dois pedaços de hardware cria “comunicação” entre estes

– Assim, o seqüenciamento de eventos de um pedaço de hardware que gera sinais que são entrada de um outro pedaço de hardware afeta o seqüenciamento de eventos do último

Page 11: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

11César Marcon / Ney Calazans

Processos em VHDL• Não confundir a noção geral de processo VHDL com o comando Process de VHDL:

– Um Process é um uma estrutura sintática que representa um processo de tipo especial, que permite descrever ações em seqüência ao invés de concorrentemente

– Outras construções são processos, tais como atribuições fora de um Process ou o comando with

– Alguns comandos, como o for-generate podem produzir múltiplos processos concorrentes

• Exemplo: library IEEE;use IEEE.STD_LOGIC_1164.all;entity processos isend processos ;

architecture nao_sim of nao_sim issignal x, y, z, t: std_logic; begin x <= not y; z <= x and t;end processos;

Esta descrição VHDL implementa um circuito

com dois processos paralelos, cada um

correspondendo a uma porta lógica

Page 12: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

12César Marcon / Ney Calazans

O comando Process em VHDL

• O comando Process é uma construção em VHDL que serve para, entre outras utilidades:

1. Descrever comportamento de um hardware de maneira seqüencial, o que é complexo e limitado de realizar fora deste comando

2. Descrever hardware combinacional ou seqüencial

3. Prover uma maneira natural de descrever estruturas mais abstratas de hardware tais como máquinas de estados finitas

• Cada comando Process corresponde a exatamente um processo (paralelo) VHDL

• A semântica do comando Process é complexa para quem não domina bem os modelos de funcionamento de hardware em geral, e de hardware síncrono em particular

Page 13: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

13César Marcon / Ney Calazans

Um exemplo de comando Process

• Vários conceitos a explorar:

– Variáveis

– Se temp difere de 0 e de 1, o que vale?

– Semântica do comando Process

– O comando wait

– Outras formas para descrever o mesmo comportamento

» Lista de Sensitividade

library IEEE;use IEEE.STD_LOGIC_1164.all;entity nand2_proc is

port( a : in STD_LOGIC; b : in STD_LOGIC; c : out STD_LOGIC );

end nand2_proc;

architecture nand2_proc of nand2_proc isbegin

process variable temp : std_logic;begin

temp := not (a and b);if (temp='1') then

c <= temp after 6ns;elsif (temp='0') then

c <= temp after 5 ns;else

c <= temp after 6ns;end if;wait on a,b;

end process;end nand2_proc;

Page 14: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

14César Marcon / Ney Calazans

Um exemplo de comando Process

• Comandos Process com um único comando wait antes do end process são muito comuns

• VHDL provê sintaxe alternativa para estes, a lista de sensitividade

– Sem tem a lista, process não pode ter wait e vice-versa

– Lista implica wait on, não wait for ou wait until ou outra forma de wait

library IEEE;use IEEE.STD_LOGIC_1164.all;entity nand2_proc is

port( a : in STD_LOGIC; b : in STD_LOGIC; c : out STD_LOGIC );

end nand2_proc;

architecture nand2_proc of nand2_proc isbegin

process (a, b) variable temp : std_logic;begin

temp := not (a and b);if (temp='1') then

c <= temp after 6ns;elsif (temp='0') then

c <= temp after 5ns;else

c <= temp after 6ns;end if;

end process;end nand2_proc;

Page 15: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

15César Marcon / Ney Calazans

A semântica do comando Process

• Uma maneira de compreender a semântica de um process é a partir de como funciona uma simulação VHDL deste comando:

– Um process, como qualquer processo em VHDL (e como qualquer pedaço de hardware), está eternamente em execução;

– Dentro de um process a avaliação dos comandos é seqüencial, ao contrário do que ocorre em VHDL fora de um process, onde tudo é avaliado em paralelo;

– Cada comando pode ter efeito sobre (atribuir novos valores a) sinais e/ou variáveis:

» Atribuições a variáveis têm efeito imediato, como em programação

» Atribuições a sinais são projeções para o futuro (mesmo que o futuro seja agora!!!)

– A definição de futuro é ditada pela execução do próximo comando wait na seqüência de comandos do processo, seja este explícito ou implícito (quando se usa lista de sensitividade)

Page 16: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

16César Marcon / Ney Calazans

A semântica de simulação em VHDL• Lembrando: simuladores VHDL são programas seqüenciais

executando em computadores. Contudo, a simulação deve refletir o comportamento paralelo do hardware, onde vários (talvez milhares) de processos operam simultaneamente

• Algoritmo de um simulador VHDL. Um laço (talvez eterno) que:

1. Com o tempo congelado no instante atual (começando em 0s), avalia cada processo existente, executando seus comandos até que ocorra a execução de um comando wait, explícito ou implícito. Quando isto ocorre, passa ao próximo processo, até que todos os processos tenham atingido um wait e suspendam;

» Atribuições a sinais são colocadas em uma lista de eventos classificada pelo tempo em que estes devem ocorrer

2. Avança o tempo para o instante mais próximo em que algo deve ocorrer. Então, toma todos eventos projetados para este instante e os efetiva

3. Se a lista está vazia, a simulação pára. Senão, volta ao passo 1

Page 17: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

17César Marcon / Ney Calazans

Tipos de Comandos Process• Pode-se classificar comandos process quanto ao tipo de

hardware que estes geram em duas grandes classes: os que geram hardware combinacional (ou seqüencial assíncrono)e os que geram hardware seqüencial síncrono

• Hardware combinacional – tipicamente, qualquer mudança de uma entrada deve implicar a reavaliação do processo

– Por exemplo, se o processo possui lista de sensitividade, pelo menos todas as entradas do hardware que o processo implementa devem estar na lista de sensitividade

• Hardware seqüencial síncrono – tipicamente, apenas o sinal de relógio (o clock do hardware) e os sinais assíncronos (como um reset assíncrono) devem gerar a necessidade de reavaliação do processo

– Por exemplo, se o processo possui lista sensitividade e não possui reset assíncrono (ou qualquer outro sinal assíncrono), apenas o sinal de relógio deve estar na lista de sensitividade

Page 18: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

18César Marcon / Ney Calazans

Sumário

Introdução

Processos em VHDL

TRABALHO A FAZER

A ENTREGAR

Page 19: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

19César Marcon / Ney Calazans

TRABALHO A FAZER (1)1. Estude e diga que hardware o VHDL abaixo implementa

2. Gere um testbench e simule este hardware

3. Remova um dos sinais da lista de sensitividade do processo e mostre o que muda no comportamento do hardware, via nova simulação. Guarde ambos projeto para entregar.

library IEEE;use IEEE.STD_LOGIC_1164.all;entity prim_proc is port( in1, in2, in3 in4 : in STD_LOGIC;

ctrl : in STD_LOGIC_VECTOR(1 downto 0); sai : out STD_LOGIC);

end prim_proc ;architecture prim_proc of prim_proc isbegin process (in1, in2, in3, in4, ctrl) begin case ctrl is when "00" => sai <= in1; when "01" => sai <= in2; when "10" => sai <= in3; when "11" => sai <= in4; when others => null; end case; end process;end prim_proc ;

Page 20: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

20César Marcon / Ney Calazans

TRABALHO A FAZER (2)1. Estude e diga que hardware o VHDL abaixo implementa

2. Gere um testbench e simule este hardware

3. Remova o sinal inicializa da lista de sensitividade e transforme a implementação em um hardware que use sinal de inicialização síncrono, ao invés de assíncrono. Repita o processo de validação para este novo projeto. Guarde ambos projetos para entregar

library IEEE;use IEEE.STD_LOGIC_1164.all;

entity seg_proc is port(relogio, inicializa : in STD_LOGIC; dado : in STD_LOGIC_VECTOR(5 downto 0); sai : out STD_LOGIC_VECTOR(5 downto 0); zero : out STD_LOGIC);end seg_proc;

architecture seg_proc of seg_proc issignal sai_int : std_logic_vector (5 downto 0);begin process (relogio, inicializa) begin

if inicializa = '1' thensai_int <= (others =>'0');

elsif relogio'event and relogio='1' thensai_int <= dado;

end if; end process;

zero <= '1' when sai_int="000000" else '0';sai <= sai_int;

end seg_proc;

Page 21: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

21César Marcon / Ney Calazans

Sumário

Introdução

Processos em VHDL

TRABALHO A FAZER

A ENTREGAR

Page 22: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans

22César Marcon / Ney Calazans

A ENTREGAR

Os quatro projetos Active-HDL com as implementações dos dois processos (o código não simulável, o código não-sintetizável, e os dois trabalhos da Seção TRABALHO A FAZER), contendo:

1. Os fontes de cada implementação

2. Os testbenches de cada implementação

3. Formas de onda mostrando a funcionalidade da implementação, ou a falta desta (com mensagem(ns) de erro)

4. Texto breve descrevendo cada projeto (pode ser arquivo .txt acrescentado a cada projeto)