Sie sind auf Seite 1von 52

Sistemas Digitais

Aula 03
Prof. Fbio Ramos

Sistemas Digitais
Tpicos a serem abordados na aula de hoje
1. Introduo a VHDL
1.
2.
3.
4.
5.
6.
7.

Histrico
Tipos de dados
Bibliotecas
Entidade VHDL
Operadores
Arquitetura VHDL
Condicionais VHDL (if - case)

Sistemas Digitais
Introduo ao VHDL
Criado no incio da dcada de 1980 pelo Departamento de
Defesa dos Estados Unidos;
Criado para documentar projetos de circuitos integrados.

Acrnimo significa VHSIC Hardware Description Language.


VHSIC significa:
V - Very
H - High
S - Speed
I - Integrated
C - Circuit

Sistemas Digitais
Introduo ao VHDL
Foi padronizada pela IEEE em 1987;
Revisada em 1993;

fortemente tipada e no case-sensitive.


Sua origem vem da linguagem de programao ADA;

No confundir com uma linguagem de programao.


O objetivo final de um cdigo VHDL ser sintetizvel:
Ou seja, que gere um circuito integrado real ao fim do projeto.

Sistemas Digitais
Introduo ao VHDL:
Um cdigo HDL sintetizado, j um cdigo de programa
compilado para o processador escolhido.

Cdigo
VHDL

Cdigo
C

Sntese

Compilao

Sistemas Digitais
Tipos de dados em VHDL
Tipos de dados bsicos
Tipo

Valor

Exemplo

0,1

0,1

boolean

TRUE, FALSE

TRUE, FALSE

integer

-2 -1 x 2 -1

1269, 2#11_01, 16#8A, -290

real

-3.65*1047 x +3.65*1047

2.26, 7.69E+2, 16#7.B#E+1

time

ps, ns, us, ms, sec, min, hr

1 ns, 100 ms, 345 us

bit

NOTA IMPORTANTE: real e time no so sintetizveis!!!

Sistemas Digitais
Tipos de dados em VHDL
std_logic: na prtica, o tipo de dados mais usado.
Necessita da biblioteca std_logic_1164 da IEEE para funcionar.

A diferena bsica para o tipo bit que o std_logic permite


9 tipos diferentes de valores:
U

no inicializada

indefinida

0
1
-

dont care

alta impedncia

Indefinida fraca

0 fraco

1 fraco

Sistemas Digitais
Tipos de dados em VHDL
O tipo integer pode ser definido em funo dos valores
mnimo e mximo que se espera dele:
integer range 0 to 7
Ou seja, esse sinal pode assumir os valores 0,1,2,3,4,5,6 ou
7.
Para isso seria necessrio um sinal de 3 bits (2 valores possveis)
logicamente.

No possvel acessar esses 3 bits diretamente quando


se utiliza o tipo integer!!

Sistemas Digitais
Tipos de dados em VHDL
Vetores: o tipo bit e o tipo std_logic podem ser usados
tambm como vetores:
ndice
i(3) i(2) i(1) i(0)

signal i : bit_vector (3 downto 0)

ndice
j(0) j(1) j(2) j(3) j(4) j(5)

signal j : std_logic_vector(0 to 5)

0 U 0

Sistemas Digitais
Tipos de dados em VHDL
Vetores: Esses vetores permitem acesso a qualquer bit
pelo ndice:
ndice
i(3) i(2) i(1) i(0)

signal i : bit_vector (3 downto 0)

ndice
j(0) j(1) j(2) j(3) j(4) j(5)

signal j : std_logic_vector(0 to 5)

0 U 0
Caso se queira acessar
o bit 3 e trocar o valor
por outro, isso
possvel

Sistemas Digitais
Tipos de dados em VHDL
Array: composio de um ou mais tipos de dados.
Exemplo:
type example is array (integer range 0 to 3) of std_logic_vector (3 downto 0)
signal vec : example
i(3) i(2) i(1) i(0)
e(0)

e(1)

e(2)

U 1

e(3)

0 H 1

Sistemas Digitais
I/O em VHDL
Entradas e sadas mais utilizadas: IN, OUT, INOUT.
Quando declarados, precisam ser associados a um dos tipos de
dados citados anteriormente.

IN
OUT
INOUT

Sistemas Digitais
Bibliotecas/pacotes em VHDL
A primeira definio a ser feita em uma descrio VHDL
Seguem algumas bibliotecas e suas funes
Nome da Biblioteca

Funo

std_logic_1164

Define os tipos std_logic, std_ulogic,


std_logic_vector e std_ulogic_vector.

std_logic_signed

Prov computao numrica com sinal


para o tipo std_logic_vector.

std_logic_unsigned

Prov computao numrica sem sinal


para o tipo std_logic_vector.

std_logic_arith

Prov computao numrica.

std_logic_textio

Prov input/output de usurio para os


tipos da biblioteca 1164.

textio

Prov input/output de usurio.

Sistemas Digitais
Bibliotecas/pacotes em VHDL
Como defini-las na descrio VHDL (sempre no topo do
cdigo e encerra-se a definio com ;):
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_signed.all;
use IEEE.std_logic_textio.all;
use std.textio.all;
use work.<nome_generico>.all;

Sistemas Digitais
Bibliotecas/pacotes em VHDL
Como defini-las na descrio VHDL (sempre no topo do
cdigo):
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_signed.all;
use IEEE.std_logic_textio.all;
use std.textio.all;

Bibliotecas essenciais!!

Sistemas Digitais
Descrio VHDL
Conceito de black-box:
um sistema ou objeto que s temos informaes a respeito das
entradas e sadas e das caractersticas de transferncias de dados
entre entradas e sadas.
No temos informaes de COMO essa transferncia feita!
in1
out1
in2

Sistemas Digitais
Descrio VHDL
Entidade bsica em VHDL: entity
como se fosse o black-box do componente que se deseja

Exemplo, se deseja fazer um componente que recebe dois


bits e se faz um AND de ambos e passa esse valor para
uma sada.
in1
out1
in2

Sistemas Digitais
Descrio VHDL
Entidade bsica em VHDL: entity
como se fosse o black-box do componente que se deseja

Exemplo, se deseja fazer um componente que recebe dois


bits e se faz um AND de ambos e passa esse valor para
uma sada.
in1
out1
in2

Sistemas Digitais
Descrio VHDL
Entidade bsica em VHDL: entity
como se fosse o black-box do componente que se deseja

Exemplo, se deseja fazer um componente que recebe dois


bits e se faz um AND de ambos e passa esse valor para
uma sada.
in1
out1
in2

Sistemas Digitais
Descrio VHDL
O entity desse componente seria:
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;

in1

out1
in2

Sistemas Digitais
Descrio VHDL
dado um nome para a entidade (no caso and_logic)
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;

in1

out1
in2

Sistemas Digitais
Descrio VHDL
Cada entrada/sada no black-box foi associada com um
pino na descrio
Definio de
entradas

entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;

in1

out1
in2

Definio de
sadas

Sistemas Digitais
Descrio VHDL
Como dito anteriormente, cada entrada/sada tem que
estar associado com um dos tipos de dados VHDL:
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;

in1

out1
in2

Sistemas Digitais
Descrio VHDL
A sintaxe VHDL exige um ; ao fim de cada entrada e sada
e no fim da entidade:
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;

in1

out1
in2

Apenas o ltimo I/O que


fica sem ; . O ); que
aparece no cdigo se
refere ao port (

Sistemas Digitais
Descrio VHDL
Somente a definio da entity no define qual funo que
ser desempenhada pelo componente;
Na verdade, uma mesma entity pode ter mais que uma funo
definida.

A parte do cdigo que define a funcionalidade


denominada architecture.
Mas antes, precisamos dos principais tipos de operadores em
VHDL.

Sistemas Digitais
Operadores VHDL
Operador

Tipo

Operador

Tipo

Operador

Tipo

**

exponenciao

sll

shift left lgico

and

and lgico

abs

valor absoluto

srl

shift right lgico

or

or lgico

not

negao

sla

Shift left aritmtico

nand

nand lgico

multiplicao

sra

Shift right aritmtico

nor

nor lgico

diviso

rol

Rotate left

xor

xor lgico

mod

mdulo

rol

Rotate right

xnor

xnor lgico

rem

resto

igual

adio

/=

diferente

subtrao

<

menor que

&

concatenao

<=

menor que ou igual

>

maior que

>=

maior que ou igual

Cores mais claras = maior


precedncia
Cores iguais = mesma
precedncia

Sistemas Digitais
Descrio VHDL
Exemplo usando a nossa entity j definida:
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;

in1
out1
in2

Sistemas Digitais
Descrio VHDL
Exemplo usando a nossa entity j definida:
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;
Comeo de
arquitetura

Nome dado
arquitetura

Fim da
arquitetura

Nome da
entidade

Sistemas Digitais
Descrio VHDL
Exemplo usando a nossa entity j definida:
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;
Sinal de
atribuio

Operador and

Sistemas Digitais
Descrio VHDL
Exemplo usando a nossa entity j definida:
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;

O final de uma
atribuio exige o

;
O fim de uma
arquitetura tambm
exige o ;

Sistemas Digitais
Descrio VHDL
Cdigo completo para nossa lgica and:
library IEEE;
use IEEE.std_logic_1164.all
use IEEE.std_logic_arith.all
use IEEE.std_logic_signed.all
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;

Sistemas Digitais
Descrio VHDL
Cdigo completo para nossa lgica and:
library IEEE;
use IEEE.std_logic_1164.all
use IEEE.std_logic_arith.all
use IEEE.std_logic_signed.all
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;
architecture behavior of and_logic is
begin
out1 <= in1 and in2;
end behavior;

Bibliotecas

Entidade

Arquitetura

Sistemas Digitais
Descrio VHDL
E se quisssemos uma lgica or:
library IEEE;
use IEEE.std_logic_1164.all
use IEEE.std_logic_arith.all
use IEEE.std_logic_signed.all
entity and_logic is
port(
in1 : in std_logic;
in2 : in std_logic;
out1 : out std_logic);
end and_logic;
architecture behavior of and_logic is
begin
out1 <= in1 or in2;
end behavior;

Bastaria mudar o
operador

in1

out1
in2

Sistemas Digitais
Descrio VHDL
Condicionais:
O VHDL permite o uso de condicionais, muito semelhante as
linguagens de programao.
Os condicionais sero utilizadas dentro da parte de architecture
do cdigo.

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

O if e o elsif sempre
necessitam de uma
condio. Essa
condio pode ou no
estar entre parnteses
(opcional)

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

O else no necessita
condio (ele
pressupe que todas as
demais condies
possveis foram
testadas.)

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Tanto o if quanto o elsif


necessitam de um then
aps a condio

O else no necessita de

then.

A sequncia de condicionais
se encerra em um end if
seguido de ;

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Testa-se a
primeira
condio

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Se a primeira
condio no
foi satisfeita,
testa-se a
segunda

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Se a primeira
nem a segunda
condio no
foram satisfeitas,
testa-se a
terceira

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
Exemplo em pseudo-cdigo VHDL:
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
elsif (outra condio ainda) then
{executa outra ao};
else
{executa a ltima opo de ao};
end if;

Se nenhuma
condio foi
satisfeita, a
condio do
else prevalecer

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
A construo de condicional pode ser tambm como a seguir:
Um if sem else
if (condio) then
{executa alguma ao};
end if;

Um if com um ou mais elsif,


mas sem else
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
end if;

Sistemas Digitais
Descrio VHDL
Condicionais: if-then-elsif-then-else-end if
A construo de condicional pode ser tambm como a seguir:
Um if sem else
if (condio) then
{executa alguma ao};
end if;

ATENO: essa forma


pode gerar problemas
quando se trata de
lgicas combinacionais

Um if com um ou mais elsif,


mas sem else
if (condio) then
{executa alguma ao};
elsif (outra condio) then
{executa outra ao};
end if;

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Exemplo em pseudo-cdigo VHDL:
case sinal is
when valor1 =>
{ao1};
when valor2 =>
{ao2};
when others =>
{ao3};
end case;

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Exemplo em pseudo-cdigo VHDL:
case sinal is
when valor1 =>
{ao1};
when valor2 =>
{ao2};
when others =>
{ao3};
end case;

O case sempre
vai se referir a
um sinal
determinado

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Exemplo em pseudo-cdigo VHDL:
case sinal is
when valor1 =>
{ao1};
when valor2 =>
{ao2};
when others =>
{ao3};
end case;

Cada when se
refere a um
possvel valor
que sinal pode
assumir

Ou seja quando
sinal tiver o valor
igual a valor1, a
ao1 ir ocorrer

Quando sinal tiver


o valor igual a
valor2, a ao2
ir ocorrer

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Exemplo em pseudo-cdigo VHDL:
case sinal is
when valor1 =>
{ao1};
when valor2 =>
{ao2};
when others =>
{ao3};
end case;

Quando sinal no tiver


nenhum dos valores
anteriores, se pode usar
uma condio default
chamada others, sempre
no fim do case.

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Exemplo em pseudo-cdigo VHDL:
case sinal is
when valor1 =>
{ao1};
when valor2 =>
{ao2};
when others =>
{ao3};
end case;

Cada when exige


um => logo aps
o valor a ser
testado

Ao fim do case, usase um end case


seguido de ;

Sistemas Digitais
Descrio VHDL
Condicionais: case - when - end case
Recomenda-se usar sempre o when => others ao fim do case:
A justificativa a mesma para o else no caso do if: pode gerar
problemas quando se trata de lgicas combinacionais.

O case geralmente usado quando se pretende gerar muxes e


mquinas de estado finitas.

Sistemas Digitais
Resumo
Origem e significado da linguagem VHDL
Objetivo de se usar linguagens de descrio de hardware.

Tipos de dados;
Tipos de operadores;
Diviso de cdigo VHDL
Bibliotecas
Entidade
Arquitetura

Sistemas Digitais
Resumo
Condicionais em VHDL: semelhantes aos usados em
linguagens de programao:
If-then-elsig-then-else-end if
Case-when-end case

Das könnte Ihnen auch gefallen