Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description...

43
Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL VHDL - - VHSIC Hardware Description Language

Transcript of Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description...

Page 1: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Aula 2

Semântica de VHDL

Leonardo Augusto Casillo

VHDLVHDL - - VHSIC Hardware Description Language

Page 2: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Identificadores Usados como referência a todos os objetos declarados

no código. Regras:

Primeiro caractere deve ser uma letra (Obrigatório);o Ex: Teste, Teste123

Não são CASE-SENSITIVE (maiúsculas/minúsculas);o Ex: Teste = teste = TESTE

Não é possível o uso de palavras reservadas com outras finalidades;

o Ex: mux, and

Page 3: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

IdentificadoresRegras:

São permitidos apenas letras, números e underscore( _ ) Último caractere não pode ser underscore;

o Ex: Teste_

Não são permitidos 2 underscores em seqüência;o Ex: Teste__projeto

Nomes com underscore são diferentes de nome sem underscore.o Ex: teste_projeto ≠ testeprojeto

Page 4: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Objetos de dados Usados para representar e armazenar dados; Três tipos básicos: constantes, sinais e variáveis; Cada objeto possui um tipo de dados específico e um

conjunto de possíveis valores; Objetos de dados de tipos diferentes não podem ser

atribuídos um ao outro. Ex: somar 101(Bit) e 011(Std_logic).

Quando um valor é especificado(atribuição de um valor a um sinal ou variável ou um valor é transferido como parâmetro para um subprograma), este valor é representado na forma de um literal.

Page 5: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Constantes Assumem apenas um valor em todo o código. Declaração:

– constant <identificador>: <tipo> := <valor>• Ex: constant errado : boolean := False;• Ex: constant parte_ram : bit_vector(3 downto 0) := 1110;• Podem ser declaradas em qualquer parte do código:

Constante com valor global: • Package (uso mais freqüente)

Somente no contexto em que foi declarada: • entity, architecture, process, function

Page 6: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Sinais

Representam ligações entre elementos (aula anterior) Declaração:

• signal <identificador>: <tipo> [:= valor]; Podem ser declaradas:

• Globalmente: • package

• Internamente:• entity, architecture (mais utilizado)

Page 7: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Variáveis

• Utilizados para armazenar valores intermediários entre expressões;

• Atribuição imediata;

• Declaração:

– variable <identificador>: <tipo> [:= valor];• Podem ser declaradas apenas em processos (variáveis

locais);

• Podem corresponder a registradores (processos sem temporização) ou não (processos com temporização);

Page 8: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

FPGA & VHDL

Page 9: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Literais

• Valores de dados específicos usados como parâmetros de objetos ou dentro de expressões.

• Não representam tipos específicos:

– Ex: '1' pode representar um bit ou um caractere.

• São válidos dependendo do tipo:

– Ex: '$' é válido como um caractere mas não como bit.

Page 10: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Literais• Podem ser representados pelas seguintes categorias:

– Character Literals: um caracter ASCII (‘a’, ‘z’).

– String Literals: seqüência de caracteres ASCII (“texto”)

– Bit String Literals: formas especiais de string literals para representar valores das bases binária, octal e hexadecimal.

• B”100100”

• O”446”

• X”A0F4B51”

– Válidos para bit_vector e std_logic_vector

Page 11: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Literais

– Numeric Literals: Integer Literals (Ex: 1) e Real Literals (Ex: 1.1)

• Números reais não são sintetizáveis.

– Based Literals: idêntico a numeric literals, mas utilizando bases binária, octal e hexadecimal.

• Ex: 2#101#, 16#FC9#, 2#1.0#E10#

– Physical Literals: grandeza física. Contém parte numérica e unidade.

• Podem representar tempo, velocidade, distância etc• Ex: 300 s, 40 m

Page 12: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Tipos de dados

• São divididos em 4 classes:

– Tipos escalares (representam um único valor);– Tipos compostos (representam uma coleção de

valores);– *Tipos de acessos (similares a ponteiros);– *Tipos de arquivo (referencia objetos que

contém uma seqüência de valores).

* Não são sintetizáveis

Page 13: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Tipos Escalares

• Tipos enumerados: tipos já definidos pela norma:– Bit

– Boolean

– Integer

– Real

– Physical

– STD_LOGIC

Page 14: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Tipos Escalares

• Tipos enumerados: permite criar novos tipos.

– Útil para máquina de estados (FSM)• Ex: type estado is (inicio, espera, calculo, final);

– Os tipos criados podem ser declarados• Ex: signal estado_atual : estado

Page 15: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Tipos Compostos

• ARRAY: Coleção de elementos do mesmo tipo

– Exemplos:• type word is array (31 downto 0) of bit;

• type vetor is array(integer range <>) of real;

• type std_logic_vector is array(natural range <>) of std_logic;

Page 16: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Tipos Compostos• Records: coleção de elementos de tipos diferentes.

– Semelhante a struct em C– Exemplos:

type instruction is recordMnemonico: string;Codigo: bit_vector(3 downto 0);Ciclos: integer;

end recordsignal instrucao : instruction;instrucao.Mnemonico : “registrador”instrucao.codigo : “0001”instrucao:ciclos : ‘3’

Page 17: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Expressões

• Realizam operações sobre objetos do mesmo tipo;

• Operações lógicas: and, or, nand, nor, xor, xnor e not;

• Operações relacionais: igual (=), diferente (/=), menor que (<), menor ou igual (<=), maior que (>), maior ou igual (>=);

• Operações numéricas: soma (+), subtração (-), negação (- unário), multiplicação (*), divisão (/), módulo (mod), remanescente (rem), expoente (**) e valor absoluto (abs);

Page 18: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Expressões• Operações de concatenação:

– Cria um novo vetor a partir de dois vetores já existentes.

– Ex: • Dado1: bit_vector(7 downto 0);• Dado2: bit_vector(7 downto 0);• Dado_Resultante: bit_vector(7 downto 0)

– Dado1 := “01011011”;– Dado2 := “11010010”;– Dado_Resultante := (Dado1(7 downto 6) & Dado2(5 downto 2) &

Dado1(1 downto 0));– Dado_Resultante = “01010011”

Page 19: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Expressões

Page 20: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Atribuição de sinais• Comandos utilizados para atribuir um dado valor a um

sinal em função de um sinal de controle.

• Comando WITH - SELECT.– Atribuição de sinal com escolha.

• Comando WHEN - ELSE– Atribuição condicional de sinais.

• Utilizados fora de processos.

Page 21: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Comando WHEN - ELSE

• Exemplo: Multiplexador de 1 bit

A

D1

SD0

D0, D1 = EntradasA = SinalS = Saída

MUX

D0 D1

A

S

Page 22: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Multiplexador de 1 bitLIBRARY ieee;USE ieee.std_logic_1164.all;

ENTITY Mux_1b ISPORT (

D0, D1, Sinal: IN BIT;Saida : OUT BIT

); END Mux_1b;

ARCHITECTURE behavior_we OF Mux_1b ISBEGIN

Saida <= D0 WHEN Sinal = ‘0’ ELSE D1 WHEN Sinal = ‘1’;

END behavior;

É possível declarar portas do mesmo tipo em apenas uma linha

Após a declaração da última porta não se usa ;

O ; é declarado após o )

Page 23: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Decodificador 3-8

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY decod3to8 IS

PORT (

endereco : IN BIT_VECTOR(2 DOWNTO 0);

Saida : OUT BIT_VECTOR(7 DOWNTO 0) );

END decod3to8;

ARCHITECTURE behavior_we OF decod3to8 IS

BEGIN

Saida <= “00000001” WHEN endereco = “000” ELSE

“00000010” WHEN endereco = “001” ELSE

“00000100” WHEN endereco = “010” ELSE

“00001000” WHEN endereco = “011” ELSE

“00010000” WHEN endereco = “100” ELSE

“00100000” WHEN endereco = “101” ELSE

“01000000” WHEN endereco = “110” ELSE

“10000000” WHEN endereco = “111”;

END behavior;

Page 24: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Comando WITH – SELECT

• Exemplo: Multiplexador de 8 bits com 4 entradas

D0

MUX

D1

D2

D3

Sinal

Saída

8

8

8

8

8

2

Page 25: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Multiplexador de 8 bits

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY Mux_8b IS

PORT (

D0, D1, D2, D3 : IN BIT_VECTOR(7 DOWNTO 0);

Sinal : IN

BIT_VECTOR (1 DOWNTO 0);

Saida : OUT

BIT_VECTOR(7 DOWNTO 0) );

END Mux_8b;

ARCHITECTURE behavior_ws OF Mux_8b IS

BEGIN

WITH Sinal SELECT

Saida <= D0 WHEN “00”, D1 WHEN “01”, D2 WHEN “10”, D3 WHEN “11”;

END behavior;

Page 26: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Multiplexador de 8 bits

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY Mux_8b IS

PORT (

D0, D1, D2, D3 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

Sinal : IN

STD_LOGIC_VECTOR (1 DOWNTO 0);

Saida : OUT

STD_LOGIC_VECTOR(7 DOWNTO 0) );

END Mux_8b;

ARCHITECTURE behavior_ws OF Mux_8b IS

BEGIN

WITH Sinal SELECT

Saida <= D0 WHEN “00”, D1 WHEN “01”, D2 WHEN “10”, D3 WHEN OTHERS;

END behavior;

Page 27: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Decodificador 3-8

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY decod3to8 IS

PORT (

endereco : IN BIT_VECTOR(2 DOWNTO 0);

Saida : OUT BIT_VECTOR(7 DOWNTO 0) );

END decod3to8;

ARCHITECTURE behavior_ws OF decod3to8 IS

BEGIN

WITH endereco SELECT

Saida <= “00000001” WHEN “000”, “00000010” WHEN “001”,

“00000100” WHEN “010”,

“00001000” WHEN “011”,

“00010000” WHEN “100”,

“00100000” WHEN “101”,

“01000000” WHEN “110”,

“10000000” WHEN “111”;

END behavior;

Page 28: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exercício: Multiplexador Estrutural

• Criar componentes AND, OR, NOT;• Instanciar componentes;• Realizar a ligação entre os componentes instanciados

(PORT MAP);

Page 29: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Cláusula Generate• Comando IF__generate_label:IF __expression GENERATE __statement; __statement;END GENERATE;

• Comando FOR:__generate_label:FOR __index_variable IN __range GENERATE __statement; __statement;END GENERATE;

Page 30: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Generate• Comando IFSequencia_reset:IF reset = ‘0’ GENERATE a <= ‘0’; b <= ‘0’;END GENERATE;

• Comando FOR:Operacao_and:FOR indice IN (0 to 7) GENERATE Soma(indice) <= a(indice) and b(indice);END GENERATE;

Page 31: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 1 Bit

Vai_1

SVem_1

BA

(CARRY_IN)

(CARRY_OUT)

Page 32: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 1 BitA B CIN SUM COUT

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

SUM = A XOR B XOR CIN;

COUT = ((A OR B) AND CIN) OR

(A AND B);

Page 33: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 1 BitLIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY onebit_full_adder IS

PORT (Cin, A, B : IN STD_LOGIC;

Sum, Cout : OUT STD_LOGIC);

END onebit_full_adder;

ARCHITECTURE behavior OF onebit_full_adder IS

BEGIN

Sum <= a XOR b XOR Cin;

Cout <= ((a OR b) AND Cin) OR (a AND b);

END behavior;

Page 34: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY eight_bits_adder IS

PORT (Cin : IN STD_LOGIC;

A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

Sum : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

Cout : OUT STD_LOGIC);

END eight_bits_adder;

Page 35: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

ADDER

CIN

A

B

COUT

SUM

ADDER0

ADDER1

CIN

A(0)

B(0)S(0)

A(1)

B(1)S(1)

COUTADDER7

A(7)

B(7)S(7)

… COUTCOUT CIN

Page 36: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

ARCHITECTURE behavior OF eight_bits_adder IS

SIGNAL Int_cout : STD_LOGIC_VECTOR(7 DOWNTO 0);

COMPONENT onebit_full_adder PORT (Cin : IN STD_LOGIC; A : IN STD_LOGIC; B : IN STD_LOGIC; Sum : OUT STD_LOGIC; Cout : OUT STD_LOGIC);END COMPONENT;

Page 37: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

BEGIN

Adder0 : onebit_full_adder PORT MAP ( Cin => Cin, A => A(0),

B => B(0), Sum => Sum(0),

Cout => Int_cout(0));

Adder1 : onebit_full_adder PORT MAP ( Cin => Int_cout(0), A => A(1),

B => B(1), Sum => Sum(1),

Cout => Int_cout(1));

Page 38: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

Adder2 : onebit_full_adder PORT MAP ( Cin => Int_cout(1), A => A(2),

B => B(2), Sum => Sum(2),

Cout => Int_cout(2));

Adder3 : onebit_full_adder PORT MAP ( Cin => Int_cout(2), A => A(3),

B => B(3), Sum => Sum(3),

Cout => Int_cout(3));

Page 39: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

Adder4 : onebit_full_adder PORT MAP ( Cin => Int_cout(3), A => A(4),

B => B(4), Sum => Sum(4),

Cout => Int_cout(4));

Adder5 : onebit_full_adder PORT MAP ( Cin => Int_cout(4), A => A(5),

B => B(5), Sum => Sum(5),

Cout => Int_cout(5));

Page 40: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador 8 Bits utilizando o somador de 1 bit

Adder6 : onebit_full_adder PORT MAP ( Cin => Int_cout(5), A => A(6),

B => B(6), Sum => Sum(6),

Cout => Int_cout(6));

Adder7 : onebit_full_adder PORT MAP ( Cin => Int_cout(6), A => A(7),

B => B(7), Sum => Sum(7),

Cout => Int_cout(7));

Cout <= Int_cout(7);END behavior;

Page 41: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador Genérico (N-Bits)LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY nbits_adder IS

GENERIC (N : POSITIVE := 8); -- Default value

PORT (Cin : IN STD_LOGIC;

A, B : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);

Sum : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);

Cout : OUT STD_LOGIC );

END nbits_adder;

Page 42: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador Genérico

ARCHITECTURE behavior OF nbits_adder ISSIGNAL int_carry : STD_LOGIC_VECTOR(N-1 DOWNTO 0);BEGIN Sum <= A(N-1 DOWNTO 0) XOR B(N-1 DOWNTO 0) XOR

(int_carry(N-2 DOWNTO 0) & Cin); int_carry(0) <= ((A(0) OR B(0)) AND Cin) OR (A(0) AND B(0));

CASCADE_CARRY: FOR I in 1 TO N-1 GENERATE int_carry(I) <= ((A(I) OR B(I)) AND int_carry(I-1)) OR (A(I) AND B(I));END GENERATE CASCADE_CARRY;Cout <= int_carry(N-1);END behavior;

Page 43: Aula 2 Semântica de VHDL Leonardo Augusto Casillo VHDL - VHDL - VHSIC Hardware Description Language.

Exemplo Somador Genérico

• Para interligar componentes genéricos:

COMPONENT nbits_adder IS

GENERIC (N : POSITIVE);

PORT (Cin : IN STD_LOGIC;

A, B : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);

Sum : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);

Cout : OUT STD_LOGIC);

END COMPONENT;

Adder : nbits_adder

GENERIC MAP (N => 8)

PORT MAP (cin, A(7 downto 0), B(7 downto 0), Saida(7 downto 0), cout);