LABORG - PUCRSemoreno/undergraduate/EC/...Edson Moreno / Ney Calazans 4 Introdução •VHDL pode...
Transcript of LABORG - PUCRSemoreno/undergraduate/EC/...Edson Moreno / Ney Calazans 4 Introdução •VHDL pode...
Parte 4 - VHDL: Processos,
Paralelismo e o Comando process
LABORG
02/abril/2012
Edson Ifarraguirre Moreno
Ney Laert Vilar Calazans
2Edson Moreno / Ney Calazans
Sumário
➢Introdução
➢Processos em VHDL
➢TRABALHO A FAZER
➢A ENTREGAR
3Edson Moreno / Ney Calazans
Sumário
➢Introdução
➢Processos em VHDL
➢TRABALHO A FAZER
➢A ENTREGAR
4Edson Moreno / Ney Calazans
Introdução
• VHDL pode ser visto como formada por 3
linguagens, o todo e dois subconjuntos
próprios
Linguagem de Modelagem de Hardware
(VHDL completo)
Subconjunto de Simulação de Hardware
Subconjunto de Síntese de Hardware
5Edson Moreno / Ney Calazans
Introdução
• Linguagem de Modelagem de Hardware – 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 is
end nao_sim;
architecture nao_sim of nao_sim is
signal y : integer := 0;
begin
process
variable 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ê?
6Edson Moreno / Ney Calazans
Introdução
• Linguagem de Simulação – Aceita parte das construções da
linguagem de modelagem, 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 is
begin
sai <= not entra after 10ns;
end nao_sint;
Este texto compila OK no
simulador, simula OK,
mas é impossível de
sintetizá-lo desta forma e
ele operar como previsto.
Por quê?
7Edson Moreno / Ney Calazans
Introdução
• Linguagem de Síntese – Aceita um subconjunto próprio da
linguagem de simulação: apenas inclui 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 tipo de 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 VHDL
• Objetivos secundários
– Aprender a validar hardware usando o subconjunto simulável de
VHDL
– Aprender a modelar hardware de maneira abstrata em VHDL
8Edson Moreno / 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. O Diagrama de Venn abaixo ilustra a relação das
duas linguagens
Construções internas a um comando Process
Construções externas a um comando Process
Atribuição simples (<=)
if-then-else-elsif for-loop
while-loop
for-generate
with-select
case
atribuição condicional (when)
Instanciação de componentes (port map)
sinais
variáveis
Atribuição a variáveis (:=)
9Edson Moreno / Ney Calazans
Sumário
✓Introdução
➢Processos em VHDL
➢TRABALHO A FAZER
➢A ENTREGAR
10Edson Moreno / Ney Calazans
Processos em VHDL
• 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
– Notem: o sequenciamento de eventos de um pedaço
de hardware que gera sinais que são entrada de um
outro pedaço de hardware afeta o sequenciamento de
eventos do último
11Edson Moreno / Ney Calazans
Processos em VHDL• Não confundir a noção geral de processo VHDL com o
comando Process de VHDL
– Um Process é uma estrutura sintática que representa um
processo especial, que permite descrever ações em sequência ao
invés de concorrentemente (é um recurso de VHDL)
– Outras construções são processos, tais como atribuições fora de
um Process ou uma iunstância do comando with
– Alguns comandos, como o for-generate podem produzir
múltiplos processos concorrentes
• Exemplolibrary IEEE;
use IEEE.STD_LOGIC_1164.all;
entity processos is
end processos ;
architecture nao_sim of nao_sim is
signal 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
(desenhe o circuito). Estes
processos se comunicam?
12Edson Moreno / 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
sequencial, o que é complexo de realizar fora deste comando
2. Descrever hardware combinacional ou sequencial
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
13Edson Moreno / Ney Calazans
Um exemplo de comando Process
• Há 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 is
begin
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;
14Edson Moreno / 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 is
begin
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;
15Edson Moreno / 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 é sequencial,
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 sequência de comandos do processo, seja este
explícito ou implícito (quando se usa lista de sensitividade)
16Edson Moreno / Ney Calazans
A semântica de simulação em VHDL• Lembrando: simuladores VHDL são programas sequenciais
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 se atinja 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 (instante) 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
17Edson Moreno / 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 sequencial assíncrono)e
os que geram hardware sequencial 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 sequencial 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
18Edson Moreno / Ney Calazans
Sumário
✓Introdução
✓Processos em VHDL
➢TRABALHO A FAZER
➢A ENTREGAR
19Edson Moreno / 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.
4. Desenhe um diagrama de esquemáticos do circuito (c/ portas FFs, muxes, etc.)
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 is
begin
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 ;
20Edson Moreno / 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 is
signal sai_int : std_logic_vector (5 downto 0);
begin
process (relogio, inicializa)
begin
if inicializa = '1' then
sai_int <= (others =>'0');
elsif relogio'event and relogio='1' then
sai_int <= dado;
end if;
end process;
zero <= '1' when sai_int="000000" else '0';
sai <= sai_int;
end seg_proc;
21Edson Moreno / Ney Calazans
Sumário
✓Introdução
✓Processos em VHDL
✓TRABALHO A FAZER
➢A ENTREGAR
22Edson Moreno / Ney Calazans
A ENTREGAR – T4
Os quatro projetos simulados no ambiente ISE (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. Um texto breve, descrevendo cada projeto (com os
desenhos pedidos)
Data Final de Entrega: 23/04/2018 via sala de entrega no Moodle