Vous êtes sur la page 1sur 40

INTRODUÇÃO À

LINGUAGEM VHDL
Monitoria de Infra-Estrutura de Hardware
João Paulo Fernandes Barbosa - jpfb
Pontos Abordados
2

 Principais tipos
 Operadores
 Descrição de Entidades e Arquiteturas
 Circuitos Síncronos e Assíncronos
 Sinais e Variáveis
 Decisões: IF ELSE, CASE WHEN e WITH SELECT
 Iterações
 Formas de Descrição de Circuitos
 Máquinas de Estados
Principais Tipos
3

 VHDL possui um conjunto de tipos definidos que se


caracterizam pelo conjunto de valores que podem
assumir e o conjunto de operações que sobre eles
podem ser executadas.

 Objetos “CONSTANT”, “VARIABLE” e “SINAL”


devem ser declarados como de um tipo definido para
que possam ser identificados seus possíveis valores e
quais operações podem ser executadas.
Principais Tipos
4

 São esses alguns dos principais tipos que são definidos.


 BIT: utilizado para representar os níveis lógicos “0” e “1”
em um circuito.

SIGNAL valor: bit;

 BOOLEAN: podem assumir os valores “FALSE” e


“TRUE” sendo freqüentemente utilizados em comandos
que executam um teste de decisão.

SIGNAL teste: boolean;


Principais Tipos
5

 INTEGER: assume um valor inteiro entre -2.147.483.647 e


+2.147.483.67. Na maioria das vezes não é necessário a
utilização de valores tão altos ou tão baixos, portanto,
para melhor utilização dos recursos disponíveis, é
importante definir o conjunto de valores que um objeto
do tipo inteiro pode sumir.

SINGNAL valor: integer;


SINGNAL valor: integer range 0 to 10;

REAL: representa um número de ponto flutuante. Na


maioria das ferramentas esse tipo não é suportado por
conta da complexidade das operações executadas sobre
tais valores.
Principais Tipos
6

 O tipo std_logic foi definido a partir da necessidade


de se representar circunstâncias físicas que os
circuitos podem possuir e que através do tipo bit
não é possível. Alta impedância é uma delas.

 STD_LOGIC: podem assumir dentre outros valores os


seguintes: não inicializado(U), alta impedância(Z),
nível lógico alto(1) e nível lógico baixo(0).

SIGNAL valor: std_logic;


Principais Tipos
7

 Vetores de bits e de valores std_logic.


 São definidos também vetores de bits e de std_logic
que facilitam o agrupamento de um conjunto de sinais
que serão manipulados.

 Exemplos:
SIGNAL vetor: std_logic_vector(10 DOWNTO 0);
SIGNAL vetor: std_logic_vector(0 TO 10);

SIGNAL vetor: bit_vector(10 DOWNTO 0);


SIGNAL vetor: bit_vector(0 TO 10);
PRINCIPAIS TIPOS
8

 É possível definir novos tipos enumerados. Para


tanto basta definir um nome para o tipo e quais os
valores ele poderá assumir.

TYPE estados IS ( estado1, estado2, estado3);


SIGNAL estado: estados;
Operadores
9

 A seguir são apresentados os operadores definidos para


VHDL. Eles estão dispostos dos operadores de menor
ordem de precedência para os de maior.

 Operadores do mesmo tipo possuem a mesma ordem


de precedência obrigando o uso de parênteses para a
correta execução de um conjunto agrupado de
operações.

 A maioria dos operadores agem sobre elementos do


mesmo tipo, sendo poucas as exceções.
Operadores
10

 Operadores Lógicos
 and, or, nand, nor, xor, xnor

 valor := op xor op;


 valor := a nand b;

 Operadores Relacionais
 =, /=, <, <=, >, >=

 A >= B;
 IF (a /= b) THEN;
OPERADORES
11

 Operadores de deslocamento
 sll, srl, sla, sra, rol, ror

 z <= x sll 1;
 sinal_a <= x ror 1;

 Operadores de adição
 +, -, &

 z := x + 1;
 s := “0001” & “1000”;
OPERADORES
12

 Operadores de sinal
 +, -
 a <= -b;

 Operadores de multiplicação e divisão


 *, /, mod, rem
 l_div_r := l/r

 Operadores diversos
 **, abs, not
 sinal_a <= abs( -1.7);
 valor := a**2;
Descrição de Entidades e Arquiteturas
13

 Para descrever circuitos em VHDL devemos definir


quais são as portas de entrada e saída e qual será seu
comportamento. Nesse contexto surgem as entidades e
arquiteturas de circuito.

 Entidade: trecho do código que descreve os sinais de


entrada e de saída, definindo assim, como o circuito irá
se comunicar com o mundo exterior.

 Arquitetura: indica qual o comportamento do circuito


que está sendo descrito. Parte que guarda o algoritmo
interno do circuito.
Descrição de Entidades e Arquiteturas
14

 Entidades: descrevendo as portas de entrada e saída.

ENTITY P_Desvios IS
PORT(
ent: IN STD_LOGIC;
clk: IN STD_LOGIC;
rst: IN STD_LOGIC;
sd: OUT STD_LOGIC
);
END P_Desvios;
Descrição de Entidades e Arquiteturas
15

 Dessa forma simples define-se quais as entradas e


saídas do circuito. Agora devemos definir seu
comportamento.

P_Desv ios

ent sd
clk
rst

inst
Descrição de Entidades e Arquiteturas
16

 Para tanto, descrevemos sua arquitetura da seguinte


forma.

ARCHITECTURE Comportamento OF P_Desvios IS

Região para declaração de tipos, constantes e variáveis compartilhadas.

BEGIN
Região para a definição do comportamento do circuito
END Comportamento;
Circuitos Síncronos e Assíncronos
17

 É possível descrever circuitos síncronos e


assíncronos em VHDL.

 No caso de um circuito assíncrono basta colocar o


comportamentos do circuito após a cláusula
BEGIN de uma arquitetura.

BEGIN
sd <= ent;
END Comportamento;
Circuitos Síncronos e Assíncronos
18

 Para declarar um circuito síncrono usamos a


cláusula PROCESS definimos sua lista de
sensibilidade.

 A lista de sensibilidade é o conjunto de sinais que


quando alterado dispara a execução do processo a qual
está vinculado.
Circuitos Síncronos e Assíncronos
19

ARCHITECTURE Comportamento OF P_Desvios IS


BEGIN
PROCESS(clk)
BEGIN
IF ( clk'event AND clk = '1') THEN
sd <= ent;
END IF;
END PROCESS;
END Comportamento;
Sinais e Variáveis
20

 Sinais

 Funcionam como fios que interligam diferentes


módulos de um circuito e também podem funcionar
como estruturas internas de armazenamento de valores.

 Podem ser compartilhados por vários processos e tem


seu valor alterado apenas no final de um processo.

 A atribuição é feita através do operador <=


Sinais e Variáveis
21

 Variáveis

 São declaradas dentro de processos e pertencem apenas ao


processo onde foram criadas.

 A alteração de seu valores é imediata: não é preciso esperar


o final do processo.

 A atribuição de valores às variáveis é feita através do


operador :=.
Sinais e Variáveis
22

 Variáveis compartilhadas

 As variáveis compartilhadas funcionam como um meio


termo entre variáveis e sinais, ou seja, podem ser
utilizadas por vários processos e tem seu valor alterado
de forma assíncrona.

 Pode ser tão perigoso usar variáveis compartilhadas em


VHDL quanto usar variáveis globais em linguagens de
programação convencionais.
Sinais e Variáveis
23

ARCHITECTURE Comportamento OF P_Desvios IS


Região para declaração de tipos, constantes e variáveis compartilhadas.
Aqui não defini-se variáveis.
SIGNAL valor: STD_LOGIC;
SHARED VARIABLE valorVariavel: INTEGER;

BEGIN
PROCESS(clk)
Região para definição de tipos e variáveis.
Aqui não define-se sinais.
VARIABLE valor: STD_LOGIC;
BEGIN
END PROCESS;
END Comportamento;
Decisões
24

 Construção IF THEN ELSE

 Esse comando pode ser usado em circuitos síncronos


para se tomar decisões sobre qual caminho deve seguir.

IF (condição) THEN
END IF;
Decisões
25

 Construção IF THEN ELSE


 Podem ser encadeados e aninhados. Caso exista uma cláusula ELSE e
nenhum dos testes condicionais se confirme ela será executada.

IF (condição) THEN
IF (condição) THEN
END IF;
ELSIF (condição) THEN
IF (condição) THEN
ELSE
END IF;
ELSE
END IF;
Decisões
26

 Construção CASE WHEN

 Usado em circuitos síncronos.


 Ocorre um teste de um valor e de acordo com o resultado um conjunto de
operações é executado.

CASE estado IS
WHEN estado1 THEN
operações
WHEN estado2 THEN
operações
WHEN estado3 THEN
operações
END CASE;
Decisões
27

 Construção CASE WHEN


 É necessário que todos os possíveis valores que o teste pode assumir sejam
tratados, caso contrário é disparado um erro de compilação.

SIGNAL sinalA: STD_LOGIC_VECTOR(1 DOWNTO 0);

CASE sinalA IS
WHEN “00” =>
operações
WHEN “01” =>
operações
WHEN OTHERS =>
pode ter ou não operações
END CASE;
Decisões
28

 Construção WITH SELECT

 Podem ser usadas em circuitos assíncronos.

 Transfere um valor a um sinal de destino segundo uma


relação de opções .

 Todas as condições de seleção devem ser consideradas


e elas devem ser mutuamente exclusivas
Decisões
29

 Construção WITH SELECT

WITH expressao_escolha SELECT

sinal <= expressao_a WHEN condicao1,


expressao_b WHEN condicao2,
expressao_c WHEN condicao3 | condicao4,
expressao_d WHEN OTHERS;
Iterações
30

 Podemos também utilizar loops na descrição de


circuitos com VHDL

 Loop

 O comando LOOP permite repetir a execução de um


conjunto de comandos seqüenciais.

 Dois esquemas de iteração estão disponíveis: FOR e


WHILE.
Iterações
31

 Esquema de iteração FOR

 Contém um identificador local e os limites da iteração.


 O identificador local não precisa ser declarado e os limites de
iteração são definidos por uma faixa discreta de valores.
 Nenhuma operação dentro do laço pode atribuir um valor ao
identificador.

FOR i IN valor_final DOWNTO valor_inicial LOOP


--comando seqüencial
END LOOP;
Iterações
32

 Esquema de Iteração WHILE


 Um conjunto de comandos seqüenciais são executados
se uma condição for verdadeira.
 A condição de controle é feita através de um valor de variável e esta
deve ser alterada dentro do laço.

abc: WHILE condicao LOOP


-- comandos seqüenciais
-- atualização da variável de índice
END LOOP abc;

Exemplo de condição: (valor < 10).


Formas de Descrição de Circuitos
33

 Existem duas formas principais de descrever


circuitos em VHDL

 Descrição Comportamental
 A arquitetura possui um algoritmo que descreve o comportamento do
circuito gerando respostas a partir de estímulos externos.

 Descrição Estrutural
 A arquitetura possui um conjunto de componentes interligados através
de sinais. Esses circuitos devem ter sido descritos anteriormente.
Formas de Descrição de Circuitos
34

 Descrição estrutural

 Cada componente deve ser interligados através de fios. Isso


é feito declarando sinais que vão servir de pontes de ligação
entre os diferentes circuitos.

 Para fazer a ligação é preciso usar á cláusula PORT MAP


descrevendo onde cada sinal deve se ligar.

 É preciso que todas as entradas e saídas de componentes se


liguem a um sinal.
Formas de Descrição de Circuitos
35

 Forma Estrutural: Exemplo


ARCHITECTURE Proc OF Processador IS

COMPONENT Banco_reg IS
PORT(
Clk : IN STD_LOGIC;
Reset : IN STD_LOGIC;
RegWrite : IN STD_LOGIC;
ReadReg1 : IN STD_LOGIC_VECTOR (4 downto 0);
ReadReg2 : IN STD_LOGIC_VECTOR (4 downto 0);
WriteReg : IN STD_LOGIC_VECTOR (4 downto 0);
WriteData : IN STD_LOGIC_VECTOR (31 downto 0);
ReadData1 : OUT STD_LOGIC_VECTOR (31 downto 0);
ReadData2 : OUT STD_LOGIC_VECTOR (31 downto 0);
);
END COMPONENT ;
Formas de Descrição de Circuitos
36

 Forma Estrutural: Exemplo


BEGIN
B_REG: BANCO_REG PORT MAP (
REGWRITE => S_RWR, (sinal declarado internamente)
READREG1 => INST_25_21 ,
READREG2 => INST_20_16 ,
WRITEREG => F_MUX_REG ,
WRITEDATA => F_MUX_DAR,
READDATA1 => BR_A,
READDATA2 => BR_B,
RESET => RST, (entrada do circuito maior)
CLK => CLOC
);
As entradas e saídas do banco de registradores estão mapeadas em sinais internos ou nas entradas e saídas do
circuito que o contém
Máquinas de Estados
37

 Definição

 Máquinas de Estado podem ser consideradas como


computadores com memória bem reduzida, que de acordo
com uma entrada assume um determinado estado.

 Tipicamente implementa-se máquinas de estado com


cláusula CASE WHEN.
 Cria-se um tipo enumerado que possui todos os valores de estado que a
máquina assume e de acordo com um estímulo esterno move-se essa
máquina para um próximo estado.
Máquinas de Estados
38

 Exemplo:
TYPE estados IS ( inicia, busca, opera);
SIGNAL estado: estados;

CASE estado IS
WHEN inicia =>
--seqüência de operações
estado <= busca;
WHEN busca =>
--seqüência de operações
estado <= opera;
WHEN opera =>
--seqüência de operações
estado <= inicia;
END CASE;
Dica para o Projeto
39

 Usem as seguintes bibliotecas abaixo

 LIBRARY IEEE;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE IEEE.STD_LOGIC_ARITH.ALL;
 USE IEEE.STD_LOGIC_UNSIGNED.ALL;
Referência
40

 VHDL Descrição e Síntese de Circuitos Digitais.


Autor: Roberto d’Amore

Vous aimerez peut-être aussi