Você está na página 1de 108

VHDL

POLI-UPE

ZLCIO SALES

ENTIDADES DE PROJETO
Uma entidade de projeto o mdulo bsico
de um projeto em VHDL.
Pode representar desde uma porta lgica at
um circuito complexo.

composta de duas partes:


Declarao da entidade
Arquitetura

POLI-UPE

VHDL

ZLCIO SALES

ENTIDADES DE PROJETO
A Declarao da entidade representa a
interface com o mundo externo
A arquitetura representa a funcionalidade ou
descrio do funcionamento do circuito.
DECLARAO
Entidade de Projeto

ARQUITETURA

VHDL

POLI-UPE

ZLCIO SALES

ENTIDADES DE PROJETO
A Declarao da entidade constituda de duas
palavras reservadas:
ENTITY Vem seguida do nome do circuito
projetado
PORT empregada para definir o modo e o tipo
de portas ou sinais de entrada e sada.
ENTITY circuito
PORT (a,b: IN BIT;
c: OUT BIT);
END circuito;

a e b so portas ou sinais de entrada


c uma porta ou sinal de sada

IN e OUT so modos de operao


das portas de entrada e sada

VHDL

POLI-UPE

ZLCIO SALES

ENTIDADES DE PROJETO
O corpo da arquitetura inicia-se com a palavra reservada
ARQUITECTURE seguida de um nome identificador e o
nome da declarao de entidade associada a ela.
ARQUITECTURE exemplo OF circuito IS
REGIO DE DECLARAES:
Declaraes de sinais e constantes
Declarao de componentes
Declarao e corpo de sub-programas
Definio de novos tipos de dados locais
BEGIN
REGIO DE COMANDOS CONCORRENTES
END;

VHDL

POLI-UPE

ZLCIO SALES

ENTIDADES DE PROJETO
CIRC_ 1
PORTA NAND
ENTITY porta IS
PORT ( a, b: IN BIT:
c: OUT BIT);
END porta;
ARCHITECTURE porta_nand OF porta IS
BEGIN
c <= a AND b;
END porta_nand;

ATRIBUIO SIMPLES
DE SINAL

<=

POLI-UPE

VHDL

ZLCIO SALES

MODOS DE OPERAO DE UMA PORTA

IN: A porta opera exclusivamente como entrada


OUT: A porta opera exclusivamente como sada

INOUT : A porta bidirecional. Adequada para o modelamento


de baramentos bidirecionais.
BUFFER: Uma porta de modo OUT no pode controlar um sinal
interno da entidade. Uma porta BUFFER pode.

VHDL

POLI-UPE

ZLCIO SALES

MODOS DE OPERAO DE UMA PORTA


IN A

OUT D
Sinal X

OUT E

IN B

BUFFER F

INOUT C

INOUT G

O sinal F controlado pelo sinal B e pode controlar o sinal


interno X

F = f(B)

X= f(F)

VHDL

POLI-UPE

CLASSES DE OBJETOS
OBJETOS SO ELEMENTOS QUE CONTM UM VALOR
ARMAZENADO
CLASSES DE OBJETOS:

CONSTANT (CONSTANTE)
VARIABLE ( VARIVEL)

SIGNAL

(SINAL)

FILE

(ARQUIVO)

ZLCIO SALES

VHDL

POLI-UPE

ZLCIO SALES

CLASSES DE OBJETOS
CONSTANT (CONSTANTE)
ASSOCIA UM NOME SIMBLICO A UM NMERO EM UMA
EXPRESSO ARITMTICA.
VARIABLE ( VARIVEL)
LOCAL DE ARMAZENAGEM DE DADOS TEMPORRIOS DE UM
PROCESSO.
SIGNAL (SINAL)

REPRESENTAM FIOS QUE CONECTAM


MDULOS BSICOS DE UM PROJETO.
FILE

ASSOCIADOS CRIAO DE ARQUIVOS.

ENTRE

SI

OS

POLI-UPE

VHDL

ZLCIO SALES

CLASSES DE OBJETOS
VARIVEIS SO EMPREGADAS EM REGIES DE CDIGO
SEQUENCIAL
SINAIS SO EMPREGADOS EM REGIES DE CDIGO
SEQUENCIAL E CONCORRENTE.
OBJETOS SO DECLARADOS NAS REGIES DE
DECLARAO DE ARQUITETURAS E PROCESSOS.
DECLARAES DE OBJETOS
CONSTANT X:TIPO_CONSTANTE :=VALOR INICIAL;
VARIABLE V:TIPO_VARIABLE :=VALOR INICIAL;
SIGNAL S:TIPO_SINAL :=VALOR INICIAL;

Obs: Em verde, opcional.

POLI-UPE

VHDL

ZLCIO SALES

TIPOS
OS OBJETOS EM VHDL SO DECLARADOS SEGUNDO TIPOS
DEFINIDOS.
OS TIPOS SE DIVIDEM EM: ESCALARES E COMPOSTOS
TIPOS ESCALARES:
BIT: 1, 0
BOOLEAN: TRUE, FALSE
CHARACTER: a, b ,c, A, B, C, ?, {
INTEGER: 123, 12, 2#1101#, 16#5C#

REAL: 1,23; 100,23; 1,23E+2


TIME: 1us, 100 ps, 1fs

POLI-UPE

VHDL

ZLCIO SALES

TIPOS
TIPOS COMPOSTOS:

ARRAY(VETOR):
ARRAYS PREDEFINIDOS NO VHDL PADRO:

BIT_VECTOR E STRING.
BIT_VECTOR: MATRIZ DE n ELEMENTOS DO TIPO BIT.

STRING: MATRIZ DE n ELEMENTOS DO TIPO CARACTER.

POLI-UPE

VHDL

ZLCIO SALES

TIPOS
DEFINIO DE NOVOS TIPOS:

A DECLARAO DE UM NOVO TIPO FEITA A PARTIR DA


PALAVRA RESERVADA TYPE

TYPE novo_tipo IS ( a, b, c) ; -- Criando tipo enumerado


SIGNAL x: novo_tipo; -- Objeto empregando o novo tipo

VHDL

POLI-UPE

ZLCIO SALES

OPERADORES
OS OPERADORES SO DIVIDIDOS EM CLASSES:

LGICOS: AND OR NAND NOR XOR XNOR


RELACIONAIS: = /=

< <= > >=

DESLOCAMENTO: SLL SRL SLA SRA


ADIO: +

- &

SINAL: + MULTIPLICAO: *

DIVERSOS:

/ MOD

** ABS NOT

REM

ROL

ROR

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


CONSTRUO WHEN ELSE ( ATRIBUIO CONDICIONAL DE SINAL)
ENTITY mux IS
PORT
(input0, input1, sel :
output : OUT BIT );

output

IN BIT;

END mux;
ARCHITECTURE CIRC_2 OF mux IS
BEGIN
output <= input0 WHEN sel = '0' ELSE
input1;
END CIRC_2;

sel

input0

input1

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS

low

mid

ARCHITECTURE CIRC_3 OF cod IS


BEGIN
q <= 3 WHEN high = '1ELSE
2 WHEN mid = '1' ELSE
1 WHEN low = '1' ELSE
0;
END CIRC_3

high

ENTITY cod IS
PORT
( high, mid, low : IN BIT;
q: OUT INTEGER RANGE 0 TO 3);
END cod;

q0

q1

CONSTRUO WHEN ELSE

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


CONSTRUO WHEN ELSE COM OPERADORES LGICOS
ENTITY DECO IS
PORT
( ea,eb: IN INTEGER RANGE 0 TO 3;
I0,I1,I2,I3: IN BIT;
q: OUT BIT);
END DECO;
ARCHITECTURE CIRC_4 OF CURSO IS
BEGIN
q <= I3 OR I2 WHEN EA =2 AND EB=1 ELSE
I2
WHEN EA=4 OR EB =6 ELSE
I0 OR I1 WHEN EA=6 AND EB=3 ELSE
I2;
END CIRC_4;

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


CONSTRUO WHEN ELSE COM OPERADORES LGICOS

Equal0

ea[1..0]
I1
I0

A[1..0]
2' h2 --

OUT
B[1..0]

EQUAL

Equal1
q~0
eb[1..0]

A[1..0]
2' h1 --

OUT
B[1..0]
0
1
EQUAL

q~1
I2
I3

q~2

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


CONSTRUO

WITH SELECT ( ATRIBUIO DE SINAL SELECIONADO)

ENTITY mux IS
PORT
(d0, d1, d2, d3 : IN BIT;
s: IN INTEGER RANGE 0 TO 3;
output : OUT BIT );
END mux;
ARCHITECTURE CIRC_5 OF mux IS
BEGIN

so
s1

do
output
d1

d2

d3

WITH s SELECT
output <= d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2,
d3 WHEN 3;
END CIRC_5;

Mux0

s[1..0]
d3
d2
d1
d0

SEL[1..0]

OUT
DATA[3..0]

MUX

output

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


CONSTRUO

WITH SELECT FORMATO GERAL

WITH expressao_escolha SELECT


sinal_destino<= expressao_a WHEN
expressao_b WHEN
expressao_c WHEN
expressao_d WHEN
expressao_e WHEN

CONDICAO_1,
CONDICAO_2,
CONDICAO_3 | condicao_4,
CONDICAO_5 TO condicao_7,
OTHERS;

O delimitador | equivale a uma condio OU.


A condio usando TO representa uma faixa de valores de um tipo
escalar

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


COMANDO PROCESS

UM PROCESSO DEFINE UMA REA CONTENDO COMANDOS


SEQUENCIAIS.
COMPONENTES DE UM PROCESSO:
REGIO DE DECLARAO: PERMITE DECLARAR TIPOS,
CONSTANTES E VARIVEIS.

REGIO DE COMANDOS SEQUENCIAIS: REA CONTENDO OS


COMANDOS SEQUENCIAIS. INICIA COM A PALAVRA BEGIN E
TERMINA COM END PROCESS;

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


COMANDO PROCESS
ENTITY nome IS
PORT
(a,b: IN TIPO_SINAL;
c,d: OUT TIPO_SINAL );
END nome;
ARCHITECTURE nome OF nome IS
Declaraes
BEGIN
Cdigos concorrentes

PROCESS (x,y..)
Begin
Cdigos sequenciais

End process;
End nome;

O
que
est
dentro
de
architecture e fora de process
concorrente entre si.
O que est dentro de process
sequencial.
Uma arquitetura pode ter mais
de um processo.
O
processo
(process)

concorrente com com tudo que


estiver fora dele, inclusive
outro processo.

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


COMANDO PROCESS

LISTA SENSITIVA OU LISTA DE SENSIBILIDADE


PROCESS( X,Y)

X E Y SO SINAIS QUE, AO SOFREREM QUALQUER


VARIAO, DO INCIO AO PROCESSO. SE UMA VARIAO
DE X PROVOCAR UMA VARIAO DE Y OU VICE-VERSA O
PROCESSO RODA NOVAMENTE.
UM PROCESSO S NO TEM LISTA SENSITIVA SE CONTIVER
O COMANDO WAIT.

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS CONCORRENTES BSICOS


COMPARAO ENTRE WHEN ELSE E WITH SELECT

NA CONSTRUO WHEN ELSE A ORDEM EM QUE AS


CONDIES SO APRESENTADAS INDICA A ORDEM EM QUE
SO EXECUTADAS. A PRIMEIRA TEM PRIORIDADE MXIMA E
A LTIMA TEM PRIORIDADE MNIMA.
NA CONSTRUO WITH SELECT TODAS AS CONDIES TEM
A MESMA PRIORIDADE.

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


CONSTRUO IF ELSE
ENTITY mux IS
PORT
(d0,d1,d2,d3 IN BIT;
s: IN INTEGER RANGE 0 TO 3;
output : OUT BIT );
END mux;
ARCHITECTURE CIRC_6 OF mux IS
BEGIN
PROCESS (d,s);
BEGIN
IF
s=0 then output<=d0;
ELSIF s=1 then output<=d1;
ELSIF s=2 then output<=d2;
ELSE s=3 then output<=d3;
END PROCESS;
END CIRC_6;

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


CONSTRUO IF ELSE

( Mux usando BIT_VECTOR)

ENTITY mux IS
PORT
(d IN BIT_VECTOR(0 TO 3);
s: IN INTEGER RANGE 0 TO 3;
output : OUT BIT );
END mux;
ARCHITECTURE CIRC_6 OF mux IS
BEGIN
PROCESS (d,s);
BEGIN
IF
s=0 then output<=00; -- Tambm pode ser d(0)
ELSIF s=1 then output<=01; -- Tambm pode ser d(1)
ELSIF s=2 then output<=10; -- Tambm pode ser d(2)
ELSE s=3 then output<=11; -- Tambm pode ser d(3)
END PROCESS;
END CIRC_6;

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


SINTAXE DA INSTRUO IF
IF x>2 then
z=4;
END IF;
IF x>2 then
z=4;
ELSE
z=3;
END IF;
IF x=2 then
z=4;
ELSIF x=3 then
z=6;
ELSIF x=4 then
z=7;
ELSE
z=10;
END IF;

A
instruo
ELSIF
permite
negar
a
condio anterior e
especificar uma nova
condio.
A Instruo ELSE pode
vir depois de IF e
vrios ELSIF e nega
todas as condies
anteriores.

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


CONSTRUO CASE WHEN (MULTIPLEXADOR 4-1)
ENTITY mux IS
PORT
(d0, d1, d2, d3 : IN BIT;
s: IN INTEGER RANGE 0 TO 3; output :
OUT BIT );
END mux;
ARCHITECTURE CIRC_7 OF mux IS
BEGIN
PROCESS(s)
BEGIN
CASE s IS
WHEN 0 =>
output<=d0;
WHEN 1 =>
output<=d1;

WHEN 2 =>
Output<=d2;
WHEN 3 =>
Output<=d3;
END CASE;
END PROCESS;
END circ_7;

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


CONSTRUO CASE WHEN FORMATO GERAL
CASE EXPRESSAO_DE_ESCOLHA IS
WHEN CONDICAO_1
WHEN CONDICAO_2
WHEN CONDICAO_3 | CONDICAO_4
WHEN CONDICAO_5 TO CONDICAO_9
WHEN OTHERS
END CASE;

=>
=>
=>
=>
=>

COMANDO_A
COMANDO_B; COMANDO_C;
COMANDO_D;
COMANDO_D;
COMANDO_E;COMANDO_F

AS CONDIES DEVEM SER MUTUAMENTE EXCLUSIVAS, OU SEJA, NO PODE


HAVER MAIS DE UMA CONDIO VERDADEIRA.
TODAS AS CONDIES POSSUEMA MESMA PRIORIDADE.
O DELIMITADOR | EQUIVALE A UMA CONDIO OU
AS PALAVRAS TO E DOWNTO PODEM SER USADOS PARA DELIMITAR UMA
FAIXA DE CONDIES
A PALAVRA RESERVADA OTHERS PODE SER EMPREGADA PARA NA LTIMA
CONDIO PARAAGRUPAR AS CONDIES NO RELACIONADAS NA LISTA.

POLI-UPE

VHDL

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMPARAO ENTRE WHEN ELSE E IF ELSE
A CONSTRUO WHEN ELSE S PODE SER USADA EM REGIES DE
CDIGO CONCORRENTE E A INSTRUO IF ELSE USADA EM REGIES
DE CDIGO SEQUENCIAL.
SEMPRE QUE POSSVEL DEVE-SE ESCOLHER A INTRUO CASE NO
LUGAR DA INSTRUO IF, POIS CASE APRESENTA TODAS OS VALORES
POSSVEIS PARA O SINAL ESPECIFICADO. J A INSTRUO IF, MAIS
VERSTIL, PODE DEIXAR ALGUNS VALORES NO ESPECIFICADOS. CADA
VALOR NO ESPECIFICADO VAI GERAR UM LATCH ADICIONAL NO
HARDWARE PARA ARMAZEN-LO.

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMANDO WAIT
O COMANDO WAIT SUSPENDE A EXECUO DE UM PROCESSO OU DE
UM PROCEDIMENTO.
A CONSTRUO WAIT ON ATUA DE MODO SEMELHANTE LISTA
SENSITIVA DE UM PROCESSO. O PROCESSO FICA SUSPENSO AT QUE
HAJA A VARIAO DE UM DOS SINAIS RELACIONADOS NA LISTA.
NA CONSTRUO WAIT UNTIL O PROCESSO FICA SUSPENSO ENQUANTO
A EXPRESSO BOOLEANA CONTIDA NO COMANDO NO FOR
SATISFEITA.
NA CONSTRUO WAIT FOR O PROCESSO FICA SUSPENSO POR UM
PERODO DE TEMPO, REINICINADO NO COMANDO SEGUINTE, APS O
PERODO DE TEMPO DEFINIDO.

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMANDO WAIT
WAIT ON SINAL_A, SINAL_B,SINAL_C;
WAIT UNTIL X= 1;
WAIT FOR 50ns;
WAIT UNTIL X=1 FOR 50ns;
AS FERRASMENTAS DE SNTESE, NORMALMENTE NO SUPORTAM A
CONSTRUO WAIT FOR.
SE UM PROCESSO CONTM UMA LISTA SENSITIVA WAIT NO
PERMITIDA.
MAIS DE UM COMANDO WAIT PODE SER INCLUDO EM UM PROCESSO.

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMANDO WAIT

(WAIT UNTIL)

ENTITY W IS
PORT(A, B: IN BIT;
S: OUT BIT);
END W ;
ARCHITECTURE CIRC_8 OF W IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL A='1' AND B='0';
S<=A;
END PROCESS;
END circ_8;

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMANDO WAIT

(WAIT ON)

ENTITY W IS
PORT(A,B:IN BIT;
S:OUT BIT);
END W;
ARCHITECTURE CIRC_9 OF W IS
BEGIN
PROCESS
BEGIN
S<=0;
A:=1;
WAIT FOR 20ns;
S<=A;
END PROCESS;
END circ_9;

ESTE
CDIGO
NO

SINTETIZVEL NO QUARTUSII
DA ALTERA. O COMPILADOR
MOSTRA A MENSSAGEM DE
ERRO ABAIXO:

Error (10533): VHDL Wait Statement error at W.vhd(9): Wait Statement must
contain condition clause with UNTIL keyword

VHDL

POLI-UPE

ZLCIO SALES

COMANDOS SEQUENCIAIS BSICOS


COMANDO NULL
ENTITY NADA IS
PORT(A:BIT_VECTOR(1 DOWNTO 0);
S:OUT BIT_VECTOR(1 DOWNTO 0));
END NADA;
ARCHITECTURE NADA OF CIRC_10 IS
BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN "00" => S<="01";
WHEN "01" => S<="10";
WHEN "10" => S<="11";
WHEN "11" => S<=NULL;
END CASE;
END PROCESS;
END NADA;

O COMANDO NULL NO REALIZA


NENHUMA
OPERAO.
A
EXECUO PASSADA PARA O
PRXIMO COMANDO. TIL NAS
CONSTRUES CASE WHEN E IF
ELSE, QUANDO NENHUMA AO
DEVE SER TOMADA PARA UMA
DETERMINADA CONDIO.

VHDL

POLI-UPE

ZLCIO SALES

ATRIBUTOS
ATRIBUTOS SO INFORMAES RELATIVAS A UM SINAL.
GRANDE PARTE DOS ATRIBUTOS EM VHDL NO SO SINTETIZVEIS PELAS
FERRAMENTAS DE SNTESE, MAS SO USADOS EM DESCRIES QUE TM A
FINALIDADE DE TESTAR OUTRAS ENTIDADES.

ATRIBUTOS SINTETIZVEIS:
SEVENT : VERDADEIRO SE OCORREU UMA MUDANA DE VALOR NO SINAL.
FALSO SE NO OCORREU.
SSTABLE: VERDADEIRO SE NO OCORREU UMA MUDANA DE VALOR NO
SINAL. FALSO SE OCORREU UMA MUDANA DE VALOR NO SINAL.
EXEMPLOS:

IF SEVENT THEN B<=A;


ATRIBUI O VALOR DE a A b SE s MUDA DE VALOR.

IF SEVENT AND S=1 THEN B<=A;


ATRIBUI O VALOR DE a A b NA TRANSIO DE SUBIDA DO SINAL s.

IF SSTABLE THEN B<=A;


ATRIBUI O VALOR DE a A b SE O SINAL s NO MUDA DE VALOR.

VHDL

POLI-UPE

ZLCIO SALES

ATRIBUTOS
ATRIBUTOS NO SINTETIZVEIS:
SDELAYED[t] : GERA UM NOVO SINAL ATRASADO t UNIDADES DE TEMPO.
SSTABLE[t]: GERA UM NOVO SINAL BOOLEAN VERDADEIRO SE NO
OCORREU UMA TROCA DE VALOR DO SINAL.

STRANSACTION: GERA UM NOVO SINAL TIPO BIT, COMPLEMENTADO


A CADA ATRIBUIO DE VALOR DE S.

SLAST_VALUE: VALOR DO SINAL ANTES DO LTIMO EVENTO.


SLAST_EVENT:TEMPO DECORRIDO DESDE A LTIMA TROCA DE VALOR DO
SINAL

ATRIBUTOS NO ACEITOS PELO ALTERA QUARTUS II


SQUIET[t]: NOVO SINAL TIPO BOOLEAN, VERDADEIRO SE NENHUM VALOR FOI
ATRIBUIDO POR UM PERODO DE TEMPO

SACTIVE: VERDADEIRO SE FOI ATRIBIDO UM NOVO VALOR AO


SINAL, MESMO SE FOR UM VALOR IGUAL AO ANTERIOR

VHDL

POLI-UPE

ZLCIO SALES

ATRIBUTOS
ATRIBUTOS RELATIVOS A VETORES (SINTETIZVEIS):
SHIGH : LIMITE SUPERIOR DO VETOR.
SLOW: LIMITE INFERIOR DO VETOR.
SRIGTH: LIMITE DIREITO DO VETOR
SLEFT: LIMITE ESQUERDO DO VETOR.
SLENGTH: NUMEROS DE LEMENTOS NO VETOR.
SRANGE: FAIXA DO VETOR
SREVERSE_RANGE: FAIXA OPOSTA OBTIDA COM O ATRIBUTO RANGE
OBS: SE O VETOR TIVER MAIS DE UMA DIMENSO UM PARMETRO DEVE
SER USADO NO ATRIBUTO. POR EXEMPLO:
SHIGH[n], ONDE n A DIMENSO DO VETOR.

POLI-UPE

VHDL

ZLCIO SALES

ATRIBUTOS
EXEMPLOS:
CONSTANT X: BIT_VECTOR(0 TO 7) := 0 0 1 0 1 0 1 1;
X(0)

XHIGH = 7

X(7)

XLOW = 0 XRIGHT =7 XLEFT = 0 XRANGE = 0 TO 7

XREVERSE_RANGE = 7 TO 0
CONSTANT X: BIT_VECTOR(7 DOWNTO 0) := 0 0 1 0 1 0 1 1;
X(7)

X(0)

XHIGH = 7 XLOW = 0 XRIGHT = 0 XLEFT = 7 XRANGE = 7 DOWNTO


0
XREVERSE_RANGE = 0 TO 7

POLI-UPE

VHDL

ZLCIO SALES

ATRIBUTOS
ATRIBUTOS RELATIVOS A TIPOS (NO SINTETIZVEIS):
SHIGH :

ELEMENTO DE POSIO MAIS ELEVADA NO TIPO.

SLOW :

ELEMENTO DE POSIO MAIS INFERIOR NIO TIPO.

SSUCC(e) :

ELEMENTO QUE SUCEDE O ELEMENTO e NO TIPO.

SPRED(e) :

ELEMENTO QUE PRECEDE O ELEMENTO e NO TIPO.

SRIGHT :

ELEMENTO DE POSIO MAIS A DIREITA NO TIPO.

SLEFT :

ELEMENTO DE POSIO MAIS A ESQUERDA NO TIPO.

SRIGHTOF(e) : ELEMENTO DIREITA DO ELEMENTO e NO TIPO.


SLEFTOF(e) :

ELEMENTO ESQUERDA DO ELEMENTO e NO TIPO.

SVAL(p) :

ELEMENTO DE POSIO p NO TIPO.

SPOS(e) :

POSIO DO ELEMENTO e NO TIPO.

VHDL

POLI-UPE

ZLCIO SALES

ATRIBUTOS
EXEMPLOS:
SUBTYPE S IS CHARACTER RANGE A TO Z;

SPOS(g)

70 71

...

F G H

...

SLEFT

SLEFTOF(g)

SRIGHTOF(g)

SRIGHT

SLOW

SPRED(g)

SSUCC(g)

SHIGH

SVAL(71)

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRC_UITOS SENSVEIS A NVEL (LATCH)


LATCH DE UM BIT COM ENABLE, SET E RESET
ENTITY LT IS
PORT(D,EN,RESET,SET:IN BIT;
Q:OUT BIT);
END LT;
ARCHITECTURE CIRC_11 OF LT IS
BEGIN
PROCESS(D,EN,RESET,SET)
BEGIN
IF RESET='1' THEN
Q<='0';
ELSIF SET='1' THEN
Q<='1';
ELSIF EN='1' THEN
Q<=D;
END IF;
END PROCESS;
END circ_11;

ZLCIO SALES

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRCUITOS SENSVEIS A NVEL (LATCH)


LATCH DE OITO BITS COM ENABLE, SET E RESET
ENTITY LT IS
PORT(D,EN,RESET,SET:IN BIT_VECTOR(7 DOWNTO 0);
Q:OUT BIT_VECTOR(7 DOWNTO 0);
END LT;
ARCHITECTURE CIRC_11 OF LT IS
BEGIN
PROCESS(D,EN,RESET,SET)
BEGIN
IF RESET='1' THEN
Q<=00000000;
ELSIF SET='1' THEN
Q<=11111111;
ELSIF EN='1' THEN
Q<=D;
END IF;
END PROCESS;
END circ_11;

ZLCIO SALES

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRCUITOS SENSVEIS TRANSIO (FLIP-FLOPS)


FLIP-FLOP TIPO D COM SET E RESET
ENTITY FFD IS
PORT(CLK,D,EN,RESET,SET:IN BIT;
Q:OUT BIT);
END FFD;
ARCHITECTURE CIRC_12 OF FFD IS
BEGIN
PROCESS(CLK,RESET,SET)
BEGIN
IF RESET='1' THEN
Q<='0';
ELSIF SET='1' THEN
Q<='1';
ELSIF CLK'EVENT and CLK='1' THEN
IF EN='1' THEN
Q<=D;
END IF;
END IF;
END PROCESS;
END circ_12;

ZLCIO SALES

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRCUITOS SENSVEIS TRANSIO (FLIP-FLOPS)


FLIP-FLOP TIPO T
ENTITY FFT IS
PORT ( clk: IN BIT;
q: OUT BIT);
END FFT;
ARCHITECTURE EXEMPL013 OF FFT IS
SIGNAL s: BIT;
BEGIN
PROCESS(clk)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
s<= NOT s;
END IF;
q<= s;
END PROCESS;
END exemplo13;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (FLIP-FLOPS)
FLIP-FLOP TIPO RS
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FFRS IS
PORT ( set, reset,clk: IN STD_LOGIC;
q: OUT STD_LOGIC);
END FFRS;
ARCHITECTURE CIRC_14 OF FFRS IS
BEGIN
PROCESS(clk)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF set = '1' THEN
q<='1';
END IF;

IF reset = '1' THEN


q<='0';
END IF;
IF set='1' AND reset='1' THEN
Q<='X';
END IF;
END IF;
END PROCESS;
END circ_14;

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (FLIP-FLOPS)
FLIP-FLOP TIPO JK
ENTITY FFJK IS
PORT ( j, k,clk: IN BIT;
q: OUT BIT);
END FFJK;
ARCHITECTURE CIRC_15 OF FFJK IS
SIGNAL S:BIT;
BEGIN
PROCESS(clk)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF j = '1' AND k='0' THEN
q<='1';
END IF;
IF k = '1' AND j ='0' THEN
q<='0';
END IF;

IF j = '1' AND k = '1' THEN


s <= NOT s;
END IF;
END IF;
q <= s;
END PROCESS;
END circ_15;

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES)
REGISTRADOR DE OITO BITS
ENTITY REG1 IS
PORT (clk : IN BIT;
d: IN INTEGER RANGE 0 TO 255;
q: OUT INTEGER RANGE 0 TO 255);
END REG1;
ARCHITECTURE CIRC_ 16 OF REG1 IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL clk = '1'; -- PODERIA SER: IF CLKEVENT AND CLK=1
q <= d;
END PROCESS;
END circ_16;

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES)


REGISTRADOR COM CLEAR E PRESET ASSNCRONOS
ENTITY REG2 IS
PORT (clk,pre,clr : IN BIT;
d: IN BIT_VECTOR(7 DOWNTO 0);
q:OUT BIT_VECTOR(7 DOWNTO 0));
END REG2;
ARCHITECTURE CIRC_17 OF REG2 IS
BEGIN
PROCESS (clk, clr, pre)
BEGIN
IF clr = '1' THEN
q <= "00000000";
ELSIF pre = '1' THEN
q <= "11111111";
ELSIF clk'EVENT AND clk = '1' THEN
q <= d;
END IF;
END PROCESS;
END circ_17;

ZLCIO SALES

POLI-UPE

VHDL
CIRCUITOS SNCRONOS

CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES)


REGISTRADOR COM LOAD ASSNCRONO
ENTITY REG3 IS
PORT (clk,load : IN BIT;
data,d:IN INTEGER RANGE 0 TO 255;
q:OUT INTEGER RANGE 0 TO 255);
END REG3;
ARCHITECTURE CIRC_18 OF REG3 IS
BEGIN
PROCESS (clk, load, data)
BEGIN
IF load = '1' THEN
q <= data;
ELSIF clk'EVENT AND clk = '1' THEN
q <= d;
END IF;
END PROCESS;
END circ_18;

ZLCIO SALES

VHDL

POLI-UPE

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
PARA A DIREITA
BITS

b7

b6

b5

b4

b3

b2

b1

b0
ANTES

ORDEM

A7

A6

A5

A4

A3

A2

A1

A0

BITS

b7

b6

b5

b4

b3

b2

b1
DEPOIS

ORDEM

A7

A6

A5

A4

A3

A2

A1

A0

b5

b4

b3

b2

b1

b0

PARA A ESQUERDA
BITS

b7

b6

ANTES
ORDEM

A7

A6

A5

A4

A3

A2

A1

A0

BITS

b6

b5

b4

b3

b2

b1

b0

0
DEPOIS

ORDEM

A7

A6

A5

A4

A3

A2

A1

A0

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
REGISTRADOR COM DESLOCAMENTO PARA A DIREITA
ENTITY reg4 IS
PORT (ld,clk,sht : IN BIT;
d: IN BIT_VECTOR(7 DOWNTO 0);
q: OUT BIT_VECTOR(7 DOWNTO 0));
END reg4;
ARCHITECTURE CIRC_19 OF reg4 IS
BEGIN
PROCESS (clk)
VARIABLE num:BIT_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF ld='1' THEN num<=d;
ELSIF sht ='1' THEN
num(6 downto 0):=num(7 downto 1);
num(7):='0';
END IF;
END IF;
q<=num;
END PROCESS;
END circ_19;

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
REGISTRADOR COM DESLOCAMENTO PARA A ESQUERDA
ENTITY reg5 IS
PORT (ld,clk,sht : IN BIT;
d: IN BIT_VECTOR(7 DOWNTO 0);
q: OUT BIT_VECTOR(7 DOWNTO 0));
END reg5;
ARCHITECTURE CIRC_20 OF reg5 IS
BEGIN
PROCESS (clk)
VARIABLE num:BIT_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF ld='1' THEN num<=d;
ELSIF sht ='1' THEN
num(7 downto 1):=num(6 downto 0);
num(0):='0';
END IF;
END IF;
q<=num;
END PROCESS;
END circ_20;

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
REGISTRADORES USANDO INSTRUO DE DESLOCAMENTO E ROTAO
DESLOCAMENTO ARITMTICO
SLA (shift left arithmetic) : O BIT MAIS ESQUERDA PERDIDO. O BIT MAIS
DIREITA REPETIDO, OCUPANDO O LUGAR VAGO.
SRA (shift rigth arithmetic) :O BIT MAIS DIREITA PERDIDO. O BIT MAIS
ESQUERDA REPETIDO, OCUPANDO O LUGAR VAGO.

PERDIDO

REPETIDO

CONSTANT X: BIT_VECTOR:= 0 0 0 0 0 0 0 1 ;
Z<= X SLA 1; - - Z= 0 0 0 0 0 0 1 1
NMERO DE
DESLOCAMENTOS

REPETIDO

CONSTANT X: BIT_VECTOR:= 1 0 0 0 0 0 0 0 ;
Z<= X SRA 1; - - Z= 1 1 0 0 0 0 0 0

PERDIDO

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
REGISTRADORES USANDO INSTRUO DE DESLOCAMENTO E ROTAO
DESLOCAMENTO LGICO
SLL (shift left logical) : O BIT MAIS ESQUERDA PERDIDO. O BIT VAGO, MAIS
DIREITA, OCUPADO POR ZERO.
SRL (shift rigth logical) :O BIT MAIS DIREITA PERDIDO. O BIT VAGO, MAIS
ESQUERDA OCUPADO POR ZERO.

PERDIDO

CONSTANT X: BIT_VECTOR:= 0 0 0 0 0 0 0 1 ;
Z<= X SLL 1; - - Z= 0 0 0 0 0 0 1 0
NMERO DE
DESLOCAMENTOS

PERDIDO

CONSTANT X: BIT_VECTOR:= 1 0 0 0 0 0 0 0 ;
Z<= X SRL 1; - - Z= 0 1 0 0 0 0 0 0

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
REGISTRADORES USANDO INSTRUO DE DESLOCAMENTO E ROTAO
ROTAO
ROL (rotate logical left) : O BIT MAIS ESQUERDA, PASSA A OCUPAR A
POSIO MAIS DIREITA. NENHUMA BIT PERDIDO.
ROR (rotate logical rigth) :O BIT MAIS DIREITA PASSA A OCUPAR A POSIO
MAIS ESQUERDA. NENHUM BIT PERDIDO.
ROTACIONADO

CONSTANT X: BIT_VECTOR:= 1 0 0 0 0 0 0 1 ;
Z<= X SLL 1; - - Z= 0 0 0 0 0 0 1 1

ROTACIONADO

NMERO DE
ROTAES

CONSTANT X: BIT_VECTOR:= 1 0 0 0 0 0 0 0 ;
Z<= X SRL 1; - - Z= 0 1 0 0 0 0 0 1

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
ENTITY reg6 IS
PORT (ld,clk,sht : IN BIT;
d1: IN BIT_VECTOR(7 DOWNTO 0):="00000001";
d2: IN BIT_VECTOR(7 DOWNTO 0):="10000000";
d3: IN BIT_VECTOR(7 DOWNTO 0):="00000001";
d4: IN BIT_VECTOR(7 DOWNTO 0):="10000000";
d5: IN BIT_VECTOR(7 DOWNTO 0):="10000001";
d6: IN BIT_VECTOR(7 DOWNTO 0):="10000000";
q_sla,q_sra,q_sll,q_srl,q_rol,q_ror:
OUT BIT_VECTOR(7 DOWNTO 0));
END reg6;
ARCHITECTURE CIRC_21 OF reg6 IS
BEGIN
PROCESS (clk)
VARIABLE
num1,num2,num3,num4,num5,num6:
BIT_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF ld='1' THEN
num1:=d1;

num2:=d2; num3:=d3;
num4:=d4;
num5:=d5;
num6:=d6;
ELSIF sht ='1' THEN
num1:=num1 sla 1;
num2:=num2 sra 1;
num3:=num3 sll 1;
num4:=num4 srl 1;
num5:=num5 rol 1;
num6:=num6 ror 1;
END IF;
END IF;
q_sla<=num1;
q_sra<=num2;
q_sll<=num3;
q_srl<=num4;
q_rol<=num5;
q_ror<=num6;
END PROCESS;
END circ_21;

VHDL

POLI-UPE

ZLCIO SALES

CIRCUITOS SNCRONOS
CIRCUITOS SENSVEIS TRANSIO (REGISTRADORES DE DESLOCAMENTO)
sht

num2~[6..0]
num2~[13..7]
SEL
DATAA

num2[7]
D

num2[6..0]

SEL
OUT0

PRE

d2[7..0]
clk
ld

PRE

DATAA

DATAB

OUT0

DATAB

q_sra[7..0]
ENA

ENA
MUX21

MUX21

CLR

CLR

num1~[6..0]
num1[0]
D

num1[7..1]

SEL

DATAA

PRE

d1[7..0]

num1~[13..7]

SEL

PRE

DATAA
OUT0

OUT0

DATAB

DATAB

q_sla[7..0]

ENA
ENA
MUX21
CLR

CLR

MUX21

num6~[7..0]

num6~[15..8]
num6[7..0]

SEL
SEL

PRE

DATAA

DATAA

OUT0

DATAB

q_ror[7..0]

OUT0
DATAB
ENA
MUX21

CLR

num5~[15..8]

MUX21

num5~[7..0]

num5[7..0]

SEL

PRE

DATAA
OUT0

SEL

DATAB

q_rol[7..0]

DATAA
OUT0

ENA

DATAB
MUX21

CLR

num4~[15..8]
MUX21

num4~[7..0]

num4[7..0]

SEL

PRE

DATAA
OUT0

DATAB

q_srl[7..0]

SEL
DATAA

ENA
OUT0

1' h0 --

MUX21

CLR

DATAB

num3~[15..8]
num3[7..0]

SEL

MUX21

PRE

DATAA

num3~[7..0]

OUT0

SEL

MUX21

d3[7..0]
d4[7..0]
d5[7..0]
d6[7..0]

MUX21
OUT0

DATAB

ENA

DATAA
1' h0 --

DATAB

CLR

q_sll[7..0]

VHDL

POLI-UPE

CIRCUITOS SNCRONOS
CIRCUITOS CONTADORES
CONTADOR DE 8 BITS COM ENABLE SNCRONO
ENTITY CONT1 IS
PORT(en, clk: IN BIT;
q:OUT INTEGER RANGE 0 TO 255);
END CONT1;
ARCHITECTURE CIRC_22 OF CONT1 IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF (clk 'EVENT AND clk = '1') THEN
IF en = '1' THEN
cnt := cnt + 1;
END IF;
END IF;
q<= cnt;
END PROCESS;
END circ_22;

ZLCIO SALES

VHDL

POLI-UPE

CIRCUITOS SNCRONOS
CIRCUITOS CONTADORES
CONTADOR DE 8 BITS COM LOAD SNCRONO
ENTITY CONT2 IS
PORT (ld, clk: IN BIT;
d: IN INTEGER RANGE 0 TO 255;
q: OUT INTEGER RANGE 0 TO 255);
END CONT2;
ARCHITECTURE CIRC_23 OF CONT2 IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF (clk 'EVENT AND clk = '1') THEN
IF ld = '0' THEN
cnt := d;
ELSE
cnt := cnt + 1;
END IF;
END IF;
q<=cnt;
END PROCESS;
END circ_23;

ZLCIO SALES

VHDL

POLI-UPE

CIRCUITOS SNCRONOS
CIRCUITOS CONTADORES
CONTADOR UP/DOWN COM ENABLE SNCRONO.
ENTITY CONT3 IS
PORT(ld,en,up,clr, clk: IN BIT;
q:OUT INTEGER RANGE 0 TO 255);
END CONT3;
ARCHITECTURE CIRC_24 OF CONT3;
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF en = '1' THEN
IF up ='1' THEN
cnt:= cnt +1;
ELSE
cnt:= cnt -1;
END IF;
END IF;
END IF;
END PROCESS;
END circ_24;

ZLCIO SALES

VHDL

POLI-UPE

CIRCUITOS SNCRONOS
CIRCUITOS CONTADORES
CONTADOR UP/DOWN COM ENABLE E CLEAR SNCRONOS.
ENTITY cont4 IS
PORT(ld,clr,en,up, clk: IN BIT;
q:OUT INTEGER RANGE 0 TO 255);
END cont4;
ARCHITECTURE CIRC_25 OF cont4 IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 255;
BEGIN
IF clk'EVENT AND clk = '1' THEN
IF clr = '0' THEN cnt := 0;
ELSE
IF en = '1' THEN
IF up ='1' THEN
cnt := cnt +1;
ELSE
cnt := cnt -1;
END IF;
END IF;
END IF;
END IF;
q<=cnt;
END PROCESS;
END circ_25;

ZLCIO SALES

VHDL

POLI-UPE

CIRCUITOS SNCRONOS
CIRCUITOS CONTADORES
CONTADOR DE OITO BITS MDULO MENOR DO QUE 255
ENTITY CONT5 IS
PORT(ld,clr,en,up, clk: IN BIT;
q:OUT INTEGER RANGE 0 TO 255);
END CONT5;
ARCHITECTURE CIRC_26 OF CONT5 IS
BEGIN
PROCESS (clk)
VARIABLE cnt
: INTEGER RANGE 0 TO 255;
CONSTANT modulus : INTEGER := 200;
BEGIN
IF (clk'EVENT AND clk = '1') THEN
IF cnt = modulus THEN
cnt := 0;
ELSE
cnt := cnt + 1;
END IF;
END IF;
q<=cnt;
END PROCESS;
END Circ_26;

ZLCIO SALES

VHDL

POLI-UPE

ZLCIO SALES

CIRCUITOS SNCRONOS
MQUINAS DE ESTADO ENTITY MAQ2 IS
MQUINA MEALY

S1

S0

S2

x = 1/z =0

PORT( clr,clk,x: IN BIT;


z:OUT BIT);
END MAQ2;
ARCHITECTURE CIRC_27 OF MAQ2
IS
TYPE ESTADOS IS (S0, S1, S2);
SIGNAL EST: ESTADOS;
BEGIN
PROCESS (clr,clk,x)
BEGIN
IF clr = '1' THEN
EST <= S0;
ELSIF clk'EVENT AND clk = '1' THEN
CASE EST IS
WHEN S0 =>
IF x = '0' THEN
z <= '1';
EST<=S2;
ELSE
z<= '1';
EST<=S1;
END IF;

WHEN S1 =>
IF x = '0' THEN
z<= '1';
EST<=S1;
ELSE
z<= '0';
EST<=S2;
END IF;
WHEN S2 =>
IF x = '0' THEN
z<= '0';
EST<=S1;
ELSE
z<= '0';
EST<=S0;
END IF;
END CASE;
END IF;
END PROCESS;
END circ_27;

VHDL

POLI-UPE

ZLCIO SALES

CIRCUITOS SNCRONOS
MQUINAS DE ESTADO
MQUINAS MOORE ENTITY MAQ2 IS
PORT( clr,clk,x: IN BIT;
z:OUT BIT);
S1
END MAQ2;
ARCHITECTURE CIRC_28 OF MAQ2 IS

z = 1

S0
z =0

z = 1
S2
x = 1

TYPE ESTADOS IS (S0, S1, S2);


SIGNAL EST: ESTADOS;
BEGIN
PROCESS (clr,clk,x)
BEGIN
IF clr = '1' THEN
EST <= S0;
ELSIF (clk'EVENT AND clk = '1') THEN
CASE EST IS
WHEN S0 =>
z <= '0';
IF x = '0' THEN
EST <= S1;
ELSE
EST <= S1;
END IF;

WHEN S1 =>
z <= '1';
IF x = '0' THEN
EST <= S2;
ELSE
EST <= S1;
END IF;
WHEN S2 =>
z <='1';
IF x = '0' THEN
EST <= S1;
ELSE
EST <= S0;
END IF;
END CASE;
END IF;
END PROCESS;
END circ_28;

VHDL

POLI-UPE

ZLCIO SALES

CIRCUITOS SNCRONOS
MQUINA COM DOIS PROCESSOS
ENTITY MAQ3 IS
PORT( clr,clk,x: IN BIT;
z:OUT BIT);
END MAQ3;

ARCHITECTURE CIRC_29 OF MAQ3 IS

S1

S0

S2

x = 1/z =0

TYPE ESTADOS IS (S0, S1, S2);


SIGNAL atual,prox: ESTADOS;
BEGIN
PROCESS(clr,clk)
BEGIN
IF CLR='1' THEN
Atual<=S0;
ELSIF CLK'EVENT AND CLK='1' THEN
Atual<=prox;
END IF;
END PROCESS;
PROCESS (atual, prox,x)
BEGIN
CASE atual IS
WHEN S0 =>
IF x = '0' THEN
z<= '1';
prox<=S2;
ELSE

z<= '1';
prox<=S1;
END IF;
WHEN S1 =>
IF x = '0' THEN
z<= '1';
prox<=S2;
ELSE
z<= '0';
prox<=S2;
END IF;
WHEN S2 =>
IF x = '0' THEN
z<= '0';
prox<=S1;
ELSE
z<= '0';
prox<=S0;
END IF;
END CASE;
END PROCESS;
END circ_29;

POLI-UPE

VHDL
CIRCUITOS TRI-STATES

BUFFER DE OITO BITS TRI-STATE


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BUFF IS
PORT (en : STD_LOGIC;
d: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END BUFF;
ARCHITECTURE CIRC_30 OF BUFF IS
BEGIN
PROCESS (en,d)
BEGIN
IF en = '1' THEN
q <= d;
else
q <= "ZZZZZZZZ";
END IF;
END PROCESS;
END circ_30;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

CIRCUITOS TRI-STATES
BARRAMENTO BIDIRECIONAL TRI-STATE
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY BBT IS
PORT(
bidir: INOUT STD_LOGIC_VECTOR (7 DOWNTO 0);
oe, clk : IN STD_LOGIC;
inp : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
outp : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END BBT;
ARCHITECTURE CIRC_31 OF BBT IS
SIGNAL a : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL b : STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN

PROCESS(clk)
BEGIN
IF clk = '1' AND clk'EVENT THEN
a <= inp;
outp <= b;
END IF;
END PROCESS;
PROCESS (oe, bidir)
BEGIN
IF( oe = '0') THEN
bidir <= "ZZZZZZZZ";
b <= bidir;
ELSE
bidir <= a;
b <= bidir;
END IF;
END PROCESS;
END circ_31;

POLI-UPE

VHDL

ZLCIO SALES

SUBPROGRAMAS
EM VHDL EXISTEM DOIS TIPOS DE SUBPROGRAMAS:
FUNES (FUNCTIONS)
PROCEDIMENTOS (PROCEDURES)
UM SUBPROGRAMA COMPOSTO DE :
DECLARAO

DECLARAO

CORPO
FUNCTION SOMA ( X: IN INTEGER; Y: IN INTEGER) RETURN INTEGER
FUNCTION SOMA ( X: INTEGER; Y:INTEGER) RETURN INTEGER IS
VARIABLE M: INTEGER RANGE 0 TO 15;
BEGIN
M:= X+ Y;
RETURN M;
END SOMA;

CORPO

COMO O CABEALHO DO CORPO TEM AS INFORMAES DA DECLARAO ESTA


OPCIONAL.

VHDL

POLI-UPE

SUBPROGRAMAS
PONTO DE INSERO DO CORPO DE UM SUBPROGRAMA:
DECLARAO DE UMA ENTIDADE
CORPO DE UMA ARQUITETURA
CORPO DE UM SUBPROGRMA
CORPO DE UM PACOTE

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

FUNES
CABEALHO DO CORPO DA FUNO.
FUNCTION nome_funcao( SIGNAL a: IN tipo_a; SIGNAL b: IN tipo_b)
tipo_retorno IS;

RETURN

FUNCTION nome_funcao( CONSTANT a: IN tipo_a; CONSTANT b: IN tipo_b) RETURN


tipo_retorno IS;
OS PARMETROS a E b SO CHAMADOS DE PARMETROS FORMAIS. ELES PODEM
SER DA CLASSE SIGNAL OU CONSTANT. COMO ESTES PARMETROS SO
DECLARADOS OBRIGATORIAMENTE NO MODO IN, A DECLARAO DE MODO PODE
SER OMITIDA.
SEMPRE QUE A CLASSE DO PARMETRO NO FOR DECLARADA, ASSUME-SE QUE
CONSTANT.
O CDIGO DE UMA FUNO DEVE RETORNAR UM VALOR COERENTE COM A SUA
DECLARAO

VHDL

POLI-UPE

ZLCIO SALES

FUNES
CHAMADA DE UMA FUNO
UMA FUNO PODE SER CHAMADA DA REA CONCORRENTE (DENTRO DE
ARQUITETURA) OU DA REA SEQUENCIAL (DENTRO DE PROCESSO).
UMA FUNO RETORNA APENAS UM VALOR. ESTE RETORNO FEITO ATRAVS
DA PALAVRA CHAVE RETURN
S<= EXEMPLO ( X,Y);
S UM SINAL QUE RECEBE O VALOR RETORNADO PELA FUNO EXEMPLO. X E Y
SO CHAMADOS PARMETROS REAIS.

ASSOCIAO ENTRE PARMETROS FORMAIS E PARMETROS REAIS.


FORMAL:
CONSTANT

REAL:
VARIABLE, CONSTANT, SIGNAL

FORMAL:
SIGNAL

REAL:
SIGNAL

A CLASSE VARIABLE NO PERMITIDA COMO PARMETRO FORMAL.

POLI-UPE

VHDL
FUNES

EXEMPLO 1: FUNO CHAMADA DA REA CONCORRENTE.


ENTITY SOMADOR1 IS
PORT( A, B: IN INTEGER RANGE 0 TO 15;
S: OUT INTEGER RANGE 0 TO 15);
END SOMADOR1;
ARCHITECTURE SOMADOR1 OF SOMADOR1 IS
FUNCTION SOMA ( X: INTEGER; Y:INTEGER) RETURN INTEGER IS
VARIABLE M: INTEGER RANGE 0 TO 15;
BEGIN
M:= X+ Y;
RETURN M;
END SOMA;
BEGIN
S<=SOMA(A,B);
END SOMADOR1;

ZLCIO SALES

POLI-UPE

VHDL
FUNES

EXEMPLO 2: FUNO CHAMADA DA REA SEQUENCIAL.


ENTITY SOMADOR2 IS
PORT( A, B: IN INTEGER RANGE 0 TO 15;
S: OUT INTEGER RANGE 0 TO 15);
END SOMADOR2;
ARCHITECTURE SOMADOR2 OF SOMADOR2 IS
FUNCTION SOMA ( X: INTEGER; Y:INTEGER) RETURN INTEGER IS
BEGIN
RETURN X+Y;
END SOMA;
BEGIN
PROCESS(A,B)
VARIABLE VA,VB:INTEGER RANGE 0 TO 15;
BEGIN
VA:=A;
VB:=B;
S<=SOMA(VA,VB);
END PROCESS;
END SOMADOR2;

ZLCIO SALES

POLI-UPE

VHDL
FUNES

EXEMPLO 3: FUNO CHAMADA DA REA SEQUENCIAL.


ENTITY SOMADOR2 IS
PORT( A, B: IN INTEGER RANGE 0 TO 15;
S: OUT INTEGER RANGE 0 TO 15);
END SOMADOR2;
ARCHITECTURE SOMADOR2 OF SOMADOR2 IS
FUNCTION SOMA ( X: INTEGER; Y:INTEGER) RETURN INTEGER IS
BEGIN
RETURN X+Y;
END SOMA;
BEGIN
PROCESS(A,B)
BEGIN
S<=SOMA(A,B);
END PROCESS;
END SOMADOR2;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

PROCEDIMENTOS
CABEALHO DO CORPO DE UM PROCEDIMENTO.
A DECLARAO DE UM PROCEDIMENTO OCORRE NA REA DE DECLARAO DA
ARQUITETURA( ANTES DO BEGIN DE ARQUITETURA)

PROCEDURE nome_procedure( SIGNAL a: IN tipo_a; SIGNAL b: OUT tipo_b) IS;


PROCEDURE nome_procedure( VARIABLE a: IN tipo_a; SIGNAL b: OUT tipo_b) IS;
OS PARMETROS a E b SO CHAMADOS DE PARMETROS FORMAIS. ELES PODEM
SER DA CLASSE SIGNAL, VARIABLE, CONSTANT OU FILE, SENDO UTILIZADOS OS
MODOS IN, OUT E INOUT.
SEMPRE QUE A CLASSE DO PARMETRO NO MODO IN NO FOR DECLARADA,
ASSUME-SE QUE CONSTANT.
SEMPRE QUE A CLASSE DO PARMETRO NO MODO OUT OU INOUT NO FOR
DECLARADA ASSUME-SE QUE ELA VARIABLE.
UM PROCEDIMENTO PODE ALTERAR OS VALORES DOS DADOS PASSADOS A ELE.
PROCEDIMENTOS PERMITEM O RETORNO DE MAIS DE UM VALOR

VHDL

POLI-UPE

ZLCIO SALES

PROCEDIMENTOS
CHAMADA DE UM PROCEDIMENTO
UM PROCEDIMENTO PODE SER CHAMADA DA REA CONCORRENTE (DENTRO DE
ARQUITETURA) OU DA REA SEQUENCIAL (DENTRO DE PROCESSO).
ARCHITECTURE X OF X IS
Corpo do procedimento
BEGIN
Meu_proced ( x,y );
-Outros comandos
-End X;
A LINHA DE CDIGO ACIMA UMA CHAMADA DE PROCEDIMENTO. X E Y SO
CHAMADOS PARMETROS REAIS.

POLI-UPE

VHDL

ZLCIO SALES

PROCEDIMENTOS
ASSOCIAO ENTRE PARMETROS FORMAIS E PARMETROS
REAIS.
FORMAL:
CONSTANT

REAL:
VARIABLE, CONSTANT, SIGNAL

FORMAL:
SIGNAL

REAL:
SIGNAL

FORMAL:
VARIABLE

REAL:
VARIABLE

VHDL

POLI-UPE

ZLCIO SALES

PROCEDIMENTOS
EXEMPLO 1: PROCEDIMENTO CHAMADA DA REA CONCORRENTE.
ENTITY SUB1 IS
PORT( A, B, C: IN INTEGER RANGE 0 TO 15;
S1,S2: OUT INTEGER RANGE 0 TO 15);
END SUB1;
ARCHITECTURE SUB1 OF SUB1 IS
PROCEDURE SUBTRAI ( X, Y, Z: IN INTEGER RANGE 0 TO 15) ;
SIGNAL MAIS, MENOS: OUT INTEGER RANGE 0 TO 15) IS
BEGIN
MAIS<= X+ Y;
MENOS<= X- Z;
END SUBTRAI;
BEGIN
SUBTRAI (A, B , C, S1, S2)
END SUB1;

POLI-UPE

VHDL
PROCEDIMENTOS

EXEMPLO 2: PROCEDIMENTO CHAMADA DA REA SEQUENCIAL.


ENTITY SUB2 IS
PORT( A, B, C: IN INTEGER RANGE 0 TO 15;
S1,S2: OUT INTEGER RANGE 0 TO 15);
END SUB2;
ARCHITECTURE SUB2 OF SUB2 IS
PROCEDURE SUBTRAI ( CONSTANT X: IN INTEGER RANGE 0 TO 15;
VARIABLE Y : IN INTEGER RANGE 0 TO 15 ;
SIGNAL
Z: IN INTEGER RANGE 0 TO 15;
VARIABLE MAIS: OUT INTEGER RANGE 0 TO 15;
SIGNAL MENOS:OUT INTEGER RANGE 0 TO 15) IS
BEGIN
MAIS<= X+ Y;
MENOS<= X- Z;
END SUBTRAI;
BEGIN
PROCESS(A,B,C)
VARIABLE VB, VMAIS: INTEGER RANGE 0 TO 15;
BEGIN
VB:=B;
SUBTRAI(A,VB,C,VMAIS,S2);
S1<=VMAIS;
END PROCESS;
END SUB2;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

PROCEDIMENTOS
EXEMPLO 3: PROCEDIMENTO COM ASSOCIAO NOMEADA E USO DE ATRIBUTO
ENTITY FLIP IS
PORT( CLK D,: IN BIT;
Q,Q_B: BUFFER BIT);
END FLIP;
ARCHITECTURE FLIP OF FLIP IS
PROCEDURE FF(SIGNAL RELOGIO,DADO:IN BIT;
SIGNAL VALOR, VALOR_B:OUT BIT) IS
BEGIN
IF RELOGIOEVENT AND RELOGIO=1 THEN
VALOR<= DADO;
VALOR_B<= NOT DADO;
END IF;
END FF;
BEGIN
PROCESS(CLK)
BEGIN
FF(RELOGIO=>CLK, DADO=>D, VALOR=>Q, VALOR_B=>Q_B); -- FF(CLK, D, Q, Q_B)
END PROCESS;
END FLIP;

POLI-UPE

VHDL

ZLCIO SALES

COMANDO GENERATE
O COMANDO GENERATE PERMITE REPETIR COMANDOS CONCORRENTES.
TIL NA GERAO DE CIRCUITOS QUE APRESENTAM UMA
REGULARIDADE NA SUA ESTRUTURA OU QUE PODEM CONSTRUDOS A
PARTIR DE UM CONJUNTO DE CLULAS IDNTICAS INTERLIGADAS DA
MESMA MANEIRA.
EXISTEM DOIS ESQUEMAS DE GERAO: GERAO FOR E GERAO IF
GERAO FOR
FOR
FOR
FOR
FOR

x IN valor_inicial TO valor_final GENERATE;


x IN valor_final DOWNTO valor_inicial GENERATE;
x IN sinalRANGE GENERATE;
x IN sinalREVERSE RANGE GENERATE;

VHDL

POLI-UPE

ZLCIO SALES

COMANDO GENERATE...FOR
IMPLEMENTANDO SOMADOR DE N BITS COM COMANDO GENERATE.
CONTADOR DE UM BIT;
ENTITY SOM_1 IS
PORT SOM_1(a, b, vem:IN BIT;
s,vai:out bit);
End som_1;
ARCHITECTURE SOM_1 OF SOM_1 IS
BEGIN
S<= A XOR B XOR VEM; -- SOMA
VAI<=(A AND B) OR (A AND VEM) OR (B AND VAI); --VAI UM

VHDL

POLI-UPE

ZLCIO SALES

COMANDO GENERATE...FOR
SOMADOR DE TRS BITS

ve

y(2)

x(2)

y(1)

x(1)

y(0)

x(0)

F(1)

vem

vai

F(2)

vem

vai

vem

vai

s(2)

s(1)

s(0)

Sinais internos

va

POLI-UPE

VHDL

ZLCIO SALES

COMANDO GENERATE...FOR
SOMADOR DE TRS BITS
ENTITY SOM_3 IS
PORT(X, Y :IN BIT_VECTOR(2 DOWNTO 0);
VE:IN BIT;
VA:OUT BIT;
S:OUT BIT_VECTOR(2 DOWNTO 0);
END SOM_3;
ARCHITECTURE SOM_3 OF SOM_3 IS
SIGNAL F: BIT_VECTOR( 3 DOWNTO 0);
BEGIN
F(0)<=VE;
F<=SI(3);
FOR i IN 0 TO 1 GENERATE
S(i)<=X(i) XOR Y(i) XOR F(i);
SI(i+1)<=(X(i) AND Y(i)) OR (X(i) AND F(i)) OR (Y(i) AND F(i));
END GENERATE;
END SOM_3;

POLI-UPE

VHDL
COMANDO GENERATE...IF

GERAO IF

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

GENRICOS
GENRICOS PERMITEM QUE INFORMAES SEJAM PASSADAS
AO CIRCUITO, TAIS COMO PARMETROS E CARACTERSTICAS
QUE PODEM SER ALTERADOS SEM QUE PARA ISTO O CDIGO
TENHA QUE SER MUDADO, PODENDO O CIRCUITO SER USADO
EM VRIAS APLICAES.
O VALOR DE UM GENRICO PODE SER ESPECIFICADO EM:
DECLARAO DE ENTIDADES
DECLARAO DE COMPONENTES
SOLICITAO DE COMPONENTES
CONFIGURAES
BLOCOS

POLI-UPE

VHDL
GENRICOS

GENRICO EM ENTIDADES:
ENTITY nome_entidade IS
GENERIC( generico_1:tipo_generico_1:=valor_generico_1;
generico_2:tipo_generico_2:=valor_generico);
PORT(------);
END nome_entidade;

GENRICO EM COMPONENTES:
COMPONENT nome_componente
GENERIC( generico_1:tipo_generico_1:=valor_generico_1;
generico_2:tipo_generico_2:=valor_generico);
PORT(------);
END COMPONENT;

ZLCIO SALES

POLI-UPE

VHDL
GENRICOS E GENERATE

SOMADOR DE 3 BITS COM GENRICO.


ENTITY SOM_N IS
GENERIC(n:INTEGER:=3); -- Nmero de bits
PORT(X, Y :IN BIT_VECTOR(n-1 DOWNTO 0);
VE:IN BIT;
VA:OUT BIT;
S:OUT BIT_VECTOR(n-1 DOWNTO 0);
END SOM_N;
ARCHITECTURE SOM_N OF SOM_N IS
SIGNAL F: BIT_VECTOR( N DOWNTO 0);-- Vai um interno
BEGIN
F(0)<=VE;
F<=F(N);
FOR i IN 0 TO N-1 GENERATE
S(i)<=X(i) XOR Y(i) XOR F(i);
SI(i+1)<=(X(i) AND Y(i)) OR (X(i) AND F(i)) OR (Y(i) AND F(i));
END GENERATE;
END SOM_3;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL
MTODOS:
1- DECLARAR CADA COMPONENTE J EXISTENTE
NA ARQUITETURA DA ENTIDADE FINAL DO PROJETO.
OS CDIGOS DE CADA BLOCO DEVEM ESTAR NA
MESMA PASTA DO PROJETO TOTAL

2- DECLARAR UM PACOTE (PACKAGE) CONTENDO


DECLARAES DOS COMPONENTES EXISTENTES.
NO PRECISO DECLARAR OS COMPONENTES NA
ARQUITETURA DO PROJETO FINAL

VHDL

POLI-UPE

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 1


dado0
dado1
dado2

dado3

d0
d1
d2

saida

multiplexador

d3
s1

s0
ENTIDADE ME

q1

q0

contador
SINAL INTERNO

en
enable

clk
clock

POLI-UPE

VHDL
VHDL ESTRUTRURAL MTODO 1
ENTITY mux IS
PORT
(d0, d1, d2, d3 : IN BIT;
s: IN INTEGER RANGE 0 TO 3;
q : OUT BIT );
END mux;
ARCHITECTURE mux OF mux IS
BEGIN
WITH s SELECT
q <= d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2,
d3 WHEN 3;
END mux;

ZLCIO SALES

POLI-UPE

VHDL
VHDL ESTRUTRURAL MTODO 1
ENTITY cont IS
PORT
(q: OUT INTEGER RANGE 0TO 3;
clk, en: IN BIT);
END cont;
ARCHITECTURE cont OF cont IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 3;
BEGIN
IF (clk 'EVENT AND clk = '1') THEN
IF en = '1' THEN
cnt := cnt + 1;
END IF;
END IF;
q<= cnt;
END PROCESS;
END cont;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 1


ENTITY mae IS
PORT
(saida: OUT BIT;
clock,enable,dado0,dado1,dado2,
dado3 : IN BIT);
END mae;
ARCHITECTURE cir_32 OF mae
IS
SIGNAL
x:INTEGER RANGE 0 TO 3;
COMPONENT mux
PORT
(d0, d1, d2, d3 : IN BIT;
s: IN INTEGER RANGE 0 TO 3;
q : OUT BIT );
END COMPONENT;

COMPONENT cont
PORT
(q: OUT INTEGER RANGE 0 TO 3;
clk, en: IN BIT);
END COMPONENT

BEGIN
cont1:cont PORT MAP (x,clock,enable);
mux1:mux PORT MAP (dado0, dado1,
dado2, dado3, x, saida);
END circ_32;

VHDL

POLI-UPE

ZLCIO SALES

VHDL ESTRUTRURAL COMANDO GENERATE...FOR

ve

y(2)

x(2)

F(1)

vem

vai

y(1)

x(1)

F(2)

vem

vai

y(0)

x(0)

vem

vai

s(2)

s(1)

s(0)

Sinais internos

va

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL COMANDO GENERATE...FOR


ENTITY SOM_N IS
GENERIC(n:INTEGER:=3); -- Nmero
-- De bits
PORT(X, Y :IN BIT_VECTOR(n-1 DOWNTO 0);
VE:IN BIT;
VA:OUT BIT;
S:OUT BIT_VECTOR(n-1 DOWNTO 0);
END SOM_N;
ARCHITECTURE SOM_N OF SOM_N IS
SIGNAL F: BIT_VECTOR( N DOWNTO 0);
COMPONENT SOM_1 IS
PORT SOM_1(a, b, vem:IN BIT;
s,vai:out bit);
END COMPONENT;
BEGIN
F(0)<=VE;
VA<=F(N);
FOR i IN 0 TO N-1 GENERATE
SOM_1_1:SOM_1 PORT MAP(a=>X(i), b=>Y(i), vem=>f(i), s=>S(i), vai=>f(i+1));
END GENERATE;
END SOM_N;

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 2


PACOTE UM ARQUIVO COMPILADO CONTENDO DECLARAES DE
TIPOS, SINAIS GLOBAIS E COMPONENTES. O PACOTE TAMBM
ARMAZENA CONSTANTES E SUBPROGRAMAS

REGIES DE UM PACOTE:
1- DECLARAO DE UM PACOTE
2- CORPO DE UM PACOTE

DECLARAO

CORPO

VHDL

POLI-UPE

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 2


DECLARAO DO PACOTE.
PACKAGE nome_pacote IS
-- declarao de subprogramas, constantes, componentes, tipos,
subtipos, variveis.
END nome_pacote
CORPO DO PACOTE

PACKAGE BODY nome_pacote IS


-- declarao de subprogramas, constantes, componentes, tipos,
subtipos, variveis.
-Corpo de subprogramas
END nome_pacote;

VHDL

POLI-UPE

VHDL ESTRUTRURAL MTODO 2


EXEMPLO DE PACOTES SEM CORPO

1 PACKAGE exemplo_1 IS
CONSTANT: INTEGER RANGE 0 TO 31:=20;
END exemplo_1;
2 PACKAGE exemplo_2 IS
COMPONENT X
PORT(a,b:IN BIT;
c:OUT BIT):
END COMPONENT;
COMPONENT Y
PORT(d,e:IN BIT;
f:OUT BIT):
END COMPONENT;
END exemplo_2;

ZLCIO SALES

VHDL

POLI-UPE

VHDL ESTRUTRURAL MTODO 2


EXEMPLO DE PACOTE COM CORPO
1 PACKAGE exemplo_3 IS - - declarao do pacote
FUNCTION AND3 (SIGNAL i0, i1, i2: IN BIT) RETURN BIT;
FUNCTION OR3 ( SIGNAL i0, i1, i2:IN BIT); RETUR BIT;
END exemplo_3;

2 PACKAGE BODY exemplo_3 IS - - corpo do pacote


FUNCTION AND3 (SIGNAL i0, i1, i2: IN BIT) RETURN BIT IS;
BEGIN
RETURN (i0 AND i1 AND i2);
END AND3;
FUNCTION OR3 ( SIGNAL i0, i1, i2:IN BIT); RETUR BIT IS;
BEGIN
RETURN (i0 OR i1 OR i2);
END OR3;
END exemplo_3;

ZLCIO SALES

VHDL

POLI-UPE

VHDL ESTRUTRURAL MTODO 2


EXEMPLO DO USO DE UM PACOTE
USE WORK.EXEMPLO_3.ALL;
ENTITY USO_PACOTE IS
PORT(A, B, C: IN BIT;
S_AND, S_OR: OUT BIT);
END USO_PACOTE;
ARCHITECTURE UP OF USO_PACOTE IS
BEGIN
S_AND<= AND3(A, B, C);
S_OR<=OR3(A, B, C);

END UP;

ZLCIO SALES

VHDL

POLI-UPE

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 2


dado0
dado1
dado2

dado3

d0
d1
d2

saida

multiplexador

d3
s1

s0
ENTIDADE ME

q1

q0

contador
SINAL INTERNO

en
enable

clk
clock

POLI-UPE

VHDL
VHDL ESTRUTRURAL MTODO 2
ENTITY mux IS
PORT
(d0, d1, d2, d3 : IN BIT;
s: IN INTEGER RANGE 0 TO 3;
q : OUT BIT );
END mux;
ARCHITECTURE mux OF mux IS
BEGIN
WITH s SELECT
q <= d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2,
d3 WHEN 3;
END mux;

ZLCIO SALES

POLI-UPE

VHDL
VHDL ESTRUTRURAL MTODO 2
ENTITY cont IS
PORT
(q: OUT INTEGER RANGE 0TO 3;
clk, en: IN BIT);
END cont;
ARCHITECTURE cont OF cont IS
BEGIN
PROCESS (clk)
VARIABLE cnt : INTEGER RANGE 0 TO 3;
BEGIN
IF (clk 'EVENT AND clk = '1') THEN
IF en = '1' THEN
cnt := cnt + 1;
END IF;
END IF;
q<= cnt;
END PROCESS;
END cont;

ZLCIO SALES

POLI-UPE

VHDL
VHDL ESTRUTRURAL MTODO 2

ENTITY mae IS
PORT
(saida: OUT BIT;
clock,enable,dado0,dado1,dado2,
dado3 : IN BIT);
END mae;
ARCHITECTURE cir_32 OF mae IS
SIGNAL
x:INTEGER RANGE 0 TO 3;
BEGIN
cont1:cont PORT MAP (x,clock,enable);
mux1:mux PORT MAP (dado0, dado1,
dado2, dado3, x, saida);
END circ_32;

ZLCIO SALES

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 2


CRIAO DE UM PACOTE PARA USO DOS DISPLAYS DA PLACA DE-1
CDIGO DO PACOTE
PACKAGE CURSO_VHDL IS
FUNCTION DISPLAY(CONSTANT VALOR_BIN:IN INTEGER) RETURN BIT_VECTOR;
constant zero:BIT_VECTOR(6 downto 0):="0000001";--a b c d e f g
constant um:BIT_VECTOR(6 downto 0):="1001111";
constant dois:BIT_VECTOR(6 downto 0):="0010010";
constant tres:BIT_VECTOR(6 downto 0):="0000110";
constant quatro:BIT_VECTOR(6 downto 0):="1001100";
constant cinco:BIT_VECTOR(6 downto 0):="0100100";
constant seis:BIT_VECTOR(6 downto 0):="0100000";
constant sete:BIT_VECTOR(6 downto 0):="0001111";
constant oito:BIT_VECTOR(6 downto 0):="0000000";
constant nove:BIT_VECTOR(6 downto 0):="0001100";
END CURSO_VHDL;
PACKAGE BODY CURSO_VHDL IS
FUNCTION DISPLAY(CONSTANT VALOR_BIN:IN INTEGER) RETURN BIT_VECTOR IS
BEGIN

POLI-UPE

VHDL

ZLCIO SALES

VHDL ESTRUTRURAL MTODO 2


CRIAO DE UM PACOTE PARA USO DOS DISPLAYS DA PLACA DE-1 (CONT)
CASE VALOR_BIN IS
WHEN 0=>RETURN zero;
WHEN 1=>RETURN UM;
WHEN 2=>RETURN DOIS;
WHEN 3=>RETURN TRES;
WHEN 4=>RETURN QUATRO;
WHEN 5=>RETURN CINCO;
WHEN 6=>RETURN SEIS;
WHEN 7=>RETURN SETE;
WHEN 8=>RETURN OITO;
WHEN 9=>RETURN NOVE;
WHEN OTHERS=>RETURN "1111111";
END CASE;
END DISPLAY;
END CURSO_VHDL;

VHDL

POLI-UPE

VHDL ESTRUTRURAL MTODO 2


CRIAO DE UM PACOTE PARA USO DOS DISPLAYS DA PLACA DE-1
CDIGO DO CONTADOR
use WORK.CURSO_VHDL.all;
entity contador is
port(clk,enable:in bit;
q:out BIT_VECTOR(6 DOWNTO 0));
end contador;
architecture contador of contador is
begin
process(clk)
variable cnt:integer range 0 to 15;
begin
if clk'event and clk= '1' then
if enable='1' then
cnt:=cnt+1;
if cnt=10 then
cnt:=0;
end if;
end if;
end if;
q<=display(cnt);
end process;
end contador;

ZLCIO SALES

Você também pode gostar