parte 7 - vhdl: processos, paralelismo e o comando process laborg 08/abril/2009 césar augusto...
TRANSCRIPT
![Page 1: Parte 7 - VHDL: Processos, Paralelismo e o Comando process LABORG 08/abril/2009 César Augusto Missio Marcon Ney Laert Vilar Calazans](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062418/552fc102497959413d8be741/html5/thumbnails/22.jpg)
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)