Académique Documents
Professionnel Documents
Culture Documents
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.
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;
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
VHDL
POLI-UPE
ZLCIO SALES
OUT D
Sinal X
OUT E
IN B
BUFFER F
INOUT C
INOUT G
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)
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;
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#
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.
POLI-UPE
VHDL
ZLCIO SALES
TIPOS
DEFINIO DE NOVOS TIPOS:
VHDL
POLI-UPE
ZLCIO SALES
OPERADORES
OS OPERADORES SO DIVIDIDOS EM CLASSES:
- &
SINAL: + MULTIPLICAO: *
DIVERSOS:
/ MOD
** ABS NOT
REM
ROL
ROR
POLI-UPE
VHDL
ZLCIO SALES
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
low
mid
high
ENTITY cod IS
PORT
( high, mid, low : IN BIT;
q: OUT INTEGER RANGE 0 TO 3);
END cod;
q0
q1
POLI-UPE
VHDL
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
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
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
CONDICAO_1,
CONDICAO_2,
CONDICAO_3 | condicao_4,
CONDICAO_5 TO condicao_7,
OTHERS;
POLI-UPE
VHDL
ZLCIO SALES
POLI-UPE
VHDL
ZLCIO SALES
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)
POLI-UPE
VHDL
ZLCIO SALES
POLI-UPE
VHDL
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
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
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
WHEN 2 =>
Output<=d2;
WHEN 3 =>
Output<=d3;
END CASE;
END PROCESS;
END circ_7;
POLI-UPE
VHDL
ZLCIO SALES
=>
=>
=>
=>
=>
COMANDO_A
COMANDO_B; COMANDO_C;
COMANDO_D;
COMANDO_D;
COMANDO_E;COMANDO_F
POLI-UPE
VHDL
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
(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
(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
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:
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.
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)
XREVERSE_RANGE = 7 TO 0
CONSTANT X: BIT_VECTOR(7 DOWNTO 0) := 0 0 1 0 1 0 1 1;
X(7)
X(0)
POLI-UPE
VHDL
ZLCIO SALES
ATRIBUTOS
ATRIBUTOS RELATIVOS A TIPOS (NO SINTETIZVEIS):
SHIGH :
SLOW :
SSUCC(e) :
SPRED(e) :
SRIGHT :
SLEFT :
SVAL(p) :
SPOS(e) :
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
ZLCIO SALES
POLI-UPE
VHDL
CIRCUITOS SNCRONOS
ZLCIO SALES
POLI-UPE
VHDL
CIRCUITOS SNCRONOS
ZLCIO SALES
POLI-UPE
VHDL
CIRCUITOS SNCRONOS
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;
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;
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
ZLCIO SALES
POLI-UPE
VHDL
CIRCUITOS SNCRONOS
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
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
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;
S1
S0
S2
x = 1/z =0
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
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
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
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.
REAL:
VARIABLE, CONSTANT, SIGNAL
FORMAL:
SIGNAL
REAL:
SIGNAL
POLI-UPE
VHDL
FUNES
ZLCIO SALES
POLI-UPE
VHDL
FUNES
ZLCIO SALES
POLI-UPE
VHDL
FUNES
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)
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
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
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
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
VHDL
POLI-UPE
ZLCIO SALES
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
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
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
POLI-UPE
VHDL
ZLCIO SALES
REGIES DE UM PACOTE:
1- DECLARAO DE UM PACOTE
2- CORPO DE UM PACOTE
DECLARAO
CORPO
VHDL
POLI-UPE
ZLCIO SALES
VHDL
POLI-UPE
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
ZLCIO SALES
VHDL
POLI-UPE
END UP;
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES
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
POLI-UPE
VHDL
ZLCIO SALES
VHDL
POLI-UPE
ZLCIO SALES